如何改變控制項的字型
由於控制項是也是視窗,使用者可以呼叫cwnd: : setfont指定新字型。該函式用乙個cfont指標,要保證在控制項撤消之前不能撤消字型物件。下例將下壓按鈕的字型改為8點arial字型:
//declare font object in class declaration (.h file ).
private : cfont m_font
// set font in class implementation (.cpp file ). note m_wndbutton is a
//member variable added by classwizard.ddx routines hook the member
//variable to a dialog button contrlo.
bool csampledialog : : oninitdialog ( )
如何禁止和使能控制項
如何動態建立控制項
分配乙個控制項物件的例項並呼叫其create成員函式。開發者最容易忽略兩件事:忘記指定ws_visble標籤和在棧中分配控制項物件。下例動態地建立乙個下壓按鈕控制項:
//in class declaration (.h file ).
private : cbutton* m _pbutton
//in class implementation (.cpp file ) .
m_pbutton =new cbutton
assert_valid (m_pbutton)
m_pbutton —>create (_t ("button title ") ,
ws_child |ws_visible |bs_pushbutton,
crect ( 0, 0, 100 , 24) ,
this ,
idc _mybutton )
如何改變控制項的顏色
有兩種方法。其一,可以在父類中指定控制項的顏色,或者利用mfc4.0新的訊息反射在控制項類中指定顏色。 當控制項需要重新著色時,工作框呼叫父視窗(通常是對話方塊)的cwnd: : oncrtlcolor,可以在父視窗類中重置該函式並指定控制項的新的繪畫屬性。例如,下述**將對話中的所有編輯控制項文字顏色改為紅色:
hbrush caboutdig : : onctlcolor (cdc * pdcm , cwnd * pwnd , uint nctlcolor)
然而,由於每個父視窗必須處理通知訊息並指定每個控制項的繪畫屬性,所以,這種方法不是完全的物件導向的方法。控制項處理該訊息並指定繪畫屬性更合情合理。訊息反射允許使用者這樣做。通知訊息首先傳送給父視窗,如果父視窗沒有處理則傳送給控制項。建立乙個定製彩色列表框控制項必須遵循下述步驟。
首先,使用classwizard 建立乙個clistbox 的派生類並為該類新增下述資料成員。
class cmylistbox publilc clistbox
其次,在類的建構函式中,初始化資料中。
cmylistbox : : cmylistbox ()
最後,使用classwizard處理反射的wm_ctlcolor(=wm_ctlcolor)訊息並指定新的繪畫屬性。
hbrush cmylistbox : : ctlcolor (cdc* pdc, uint nctlcolor )
如何向編輯控制項中新增文字
如何限制編輯框中的准許字元
如果使用者在編輯控制項中只允許接收數字,可以使用乙個標準的編輯控制項並指定新的建立標誌es_numbers,它是windows 95新增加的標誌,該標誌限制 編輯控制項只按收數字字元。如果使用者需要複雜的編輯控制項,可以使用microsoft 的遮蔽編輯控制項,它是乙個很有用的ole定製控制項。
如果希望不使用ole 定製控制項自己處理字元,可以派生乙個cedit類並處理wm_char訊息,然後從編輯控制項中過濾出特定的字元。首先,使用classwizard建立乙個 cedit的派生類,其次,在對話類中指定乙個成員變數將編輯控制項分類在oninitdialog 中呼叫cwnd: : subclassdlgitem .
//in your dialog class declaration (.h file )
private : cmyedit m_wndedit // instance of your new edit control .
//in you dialog class implementation (.cpp file )
bool csampledialog : : oninitdialog ( )
使用classwizard處理wm_char訊息,計算nchar參量並決定所執行的操作,使用者可以確定是否修改、傳送字元。下例說明了如何顯示字母字元,如果字元是字母字元,則呼叫cwnd onchar,否則不呼叫onchar.
//only display alphabetic dharacters .
void cmyedit : : onchar (uint nchar , uint nrepcnt , uitn nflags )
如果要修改字元,則不能僅僅簡單地用修改過的nchar呼叫cedit: : onchar,然後cedit: : onchar呼叫cwnd: : default獲取原來的wparam 和lparam 的值,這樣是不行的。要修改乙個字元,需要首先修改nchar,然後用修改過的nchar呼叫cwnd: : defwindowproc。下例說明了如何將字元轉變為大寫:
//make all characters uppercase
void cmyedit : : onchar (uint nchar , uint nrepcnt , uint nflags )
如何獲取乙個對話控制項的指標
有兩種方法。其一,呼叫cwnd: : getdlgitem,獲取乙個cwnd*指標呼叫成員函式。下例呼叫getdlgitem,將返回值傳給乙個cspinbuttonctrl*以便呼叫cspinbuttonctrl : : setpos 函式:
bool csampledialog : : oninitdialog ( )
其二, 可以使用classwizard將控制項和成員變數聯絡起來。在classwizard中簡單地選擇member variables標籤,然後選擇add variable …按鈕。如果在對話資源編輯器中,按下ctrl鍵並雙擊控制項即可轉到add member variable對話。
VC控制項DateTimePicker使用方法
使用datetimepicker控制項一般是獲取其時間替代手工輸入帶來的不便,而datetimepicker控制項既可以獲取日期 2010 03 05 也可以獲取時間 16 27 33 要獲取日期只需要更改控制項屬性的格式為長日期或短日期,要獲取時間則將格式更改為時間即可!在新增控制項變數時,選擇其...
VC控制項DateTimePicker使用方法
使用datetimepicker控制項一般是獲 取其時間替代手工輸入帶來的不便,而datetimepicker控制項既可以獲取日期 2010 03 05 也可以獲取時間 16 27 33 要獲 取日期只需要更改控制項屬性的格式為長日期或短日期,要獲取時間則將格式更改為時間即可!在新增控制項變數時,選...
VC控制項DateTimePicker使用方法
使用datetimepicker控制項一般是獲 取其時間替代手工輸入帶來的不便,而datetimepicker控制項既可以獲取日期 2010 03 05 也可以獲取時間 16 27 33 要獲 取日期只需要更改控制項屬性的格式為長日期或短日期,要獲取時間則將格式更改為時間即可!在新增控制項變數時,選...