Win32 程序?qū)W習(xí)筆記_創(chuàng)建按鈕(Button)
按鈕類(Button)分為四種樣式
1。組框樣式(GroupBox)
2。單選按鈕樣式(RadioBox)
3。復(fù)選框樣式(CheckBox)
4。普通按鈕樣式(Pushbutton)
創(chuàng)建代碼:
// 創(chuàng)建組框
???????? HWND hGroupWnd = CreateWindowEx(0, TEXT("BUTTON"), TEXT("組框1"), WS_VISIBLE | WS_CHILD | BS_GROUPBOX,
?????????????????? 10, 10, 300, 200, hWnd, (HMENU)1001, hInstance, 0);
?
???????? // 創(chuàng)建下壓按鈕
???????? HWND hBtnWnd1 = CreateWindowEx(0, TEXT("BUTTON"), TEXT("Button1"), WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
?????????????????? 40, 30, 100, 30, hWnd, (HMENU)1002, hInstance, 0);
???????? HWND hBtnWnd2 = CreateWindowEx(0, TEXT("BUTTON"), TEXT("Button2"), WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
?????????????????? 150, 30, 100, 30, hWnd, (HMENU)1003, hInstance, 0);
?
???????? // 創(chuàng)建一組單選按鈕(WS_GROUP設(shè)置分組,放在一組的第一個單選按鈕上)
???????? HWND hRadioWnd1 = CreateWindowEx(0, TEXT("BUTTON"), TEXT("RadioBox1"), WS_VISIBLE | WS_CHILD |WS_GROUP| BS_AUTORADIOBUTTON,
?????????????????? 40, 70, 100, 30, hWnd, (HMENU)1004, hInstance, 0);
???????? HWND hRadioWnd2 = CreateWindowEx(0, TEXT("BUTTON"), TEXT("RadioBox2"), WS_VISIBLE | WS_CHILD | BS_AUTORADIOBUTTON,
?????????????????? 150, 70, 100, 30, hWnd, (HMENU)1005, hInstance, 0);
?
???????? // 創(chuàng)建另一組單選按鈕
???????? HWND hRadioWnd3 = CreateWindowEx(0, TEXT("BUTTON"), TEXT("RadioBox1"), WS_VISIBLE | WS_CHILD | WS_GROUP | BS_AUTORADIOBUTTON,
?????????????????? 40, 110, 100, 30, hWnd, (HMENU)1005, hInstance, 0);
???????? HWND hRadioWnd4 = CreateWindowEx(0, TEXT("BUTTON"), TEXT("RadioBox2"), WS_VISIBLE | WS_CHILD | BS_AUTORADIOBUTTON,
?????????????????? 150, 110, 100, 30, hWnd, (HMENU)1006, hInstance, 0);
?
???????? // 創(chuàng)建復(fù)選框按鈕
???????? HWND hCheckWnd1 = CreateWindowEx(0, TEXT("BUTTON"), TEXT("CheckBox1"), WS_VISIBLE | WS_CHILD | BS_AUTOCHECKBOX,
?????????????????? 40, 150, 100, 30, hWnd, (HMENU)1007, hInstance, 0);
???????? HWND hwndCheck2 = CreateWindowEx(0, TEXT("BUTTON"), TEXT("CheckBox2"), WS_VISIBLE | WS_CHILD | BS_AUTOCHECKBOX,
?????????????????? 150, 150, 100, 30, hWnd, (HMENU)1008, hInstance, 0);
效果圖片:

按鈕風(fēng)格樣式
BS_3STATE
創(chuàng)建與復(fù)選框相同的按鈕,但該框可以是灰色的,也可以選中或清除。 ? 使用灰色狀態(tài)顯示未確定復(fù)選框的狀態(tài)。
BS_AUTO3STATE
創(chuàng)建與三狀態(tài)復(fù)選框相同的按鈕,但當用戶選擇該按鈕時,該框會更改其狀態(tài)。 ? 狀態(tài)通過檢查、不確定和清除循環(huán)。
BS_AUTOCHECKBOX
創(chuàng)建與復(fù)選框相同的按鈕,但每次用戶選中復(fù)選框時,復(fù)選框狀態(tài)都會自動切換并清除。
BS_AUTORADIOBUTTON
創(chuàng)建與單選按鈕相同的按鈕,但當用戶選擇該按鈕時,系統(tǒng)會自動將按鈕的檢查狀態(tài)設(shè)置為已選中,并自動設(shè)置同一組中所有其他按鈕的檢查狀態(tài)以清除。
BS_BITMAP
指定按鈕顯示位圖。 ? 請參閱“備注”部分,了解其與BS_ICON的交互。
BS_BOTTOM
將文本置于按鈕矩形底部。
BS_CENTER
在按鈕矩形中水平居中文本。
BS_CHECKBOX
創(chuàng)建包含文本的小型空復(fù)選框。 ? 默認情況下,該文本顯示在復(fù)選框右側(cè)。 ? 若要顯示復(fù)選框左側(cè)的文本,請將此標志與BS_LEFTTEXT樣式 (或等效的BS_RIGHTBUTTON樣式) 組合在一起。
BS_COMMANDLINK
創(chuàng)建一個命令鏈接按鈕,該按鈕的行為類似于BS_PUSHBUTTON樣式按鈕,但命令鏈接按鈕的左側(cè)有一個綠色箭頭,指向按鈕文本。 可以通過將BCM_SETNOTE消息發(fā)送到按鈕來設(shè)置按鈕文本的標題。
BS_DEFCOMMANDLINK
創(chuàng)建類似于BS_PUSHBUTTON樣式按鈕的命令鏈接按鈕。 如果按鈕位于對話框中,用戶可以通過按 ? Enter 鍵來選擇命令鏈接按鈕,即使命令鏈接按鈕沒有輸入焦點也是如此。 ? 此樣式可用于讓用戶快速選擇最有可能 (默認) 選項。
BS_DEFPUSHBUTTON
創(chuàng)建一個類似于BS_PUSHBUTTON樣式按鈕的推送按鈕,但外觀明顯。 如果按鈕位于對話框中,則用戶可以通過按 Enter 鍵來選擇該按鈕,即使該按鈕沒有輸入焦點也是如此。 此樣式可用于讓用戶快速選擇最有可能 (默認) 選項。
BS_DEFSPLITBUTTON
創(chuàng)建一個類似于BS_PUSHBUTTON樣式按鈕的拆分按鈕,但也具有獨特的外觀。 如果拆分按鈕位于對話框中,則用戶可以按 Enter 鍵選擇拆分按鈕,即使拆分按鈕沒有輸入焦點也是如此。 此樣式可用于讓用戶快速選擇最有可能 (默認) 選項。
BS_GROUPBOX
創(chuàng)建一個矩形,在該矩形中可以分組其他控件。 ? 與此樣式關(guān)聯(lián)的任何文本都顯示在矩形的左上角。
BS_ICON
指定按鈕顯示圖標。 ? 請參閱“備注”部分,了解其與BS_BITMAP的交互。
BS_FLAT
指定按鈕為二維;它不使用默認底紋來創(chuàng)建三維圖像。
BS_LEFT
左對齊按鈕矩形中的文本。 ? 但是,如果按鈕是沒有BS_RIGHTBUTTON樣式的復(fù)選框或單選按鈕,則文本框或單選按鈕右側(cè)的文本左對齊。
BS_LEFTTEXT
與單選按鈕或復(fù)選框樣式結(jié)合使用時,將文本放在單選按鈕或復(fù)選框的左側(cè)。 ? 與BS_RIGHTBUTTON樣式相同。
BS_MULTILINE
如果文本字符串太長,無法容納按鈕矩形中的單個行,則將按鈕文本包裝為多行。
BS_NOTIFY
允許按鈕將?BN_KILLFOCUS?和?BN_SETFOCUS?通知代碼發(fā)送到其父窗口。
? 請注意,無論按鈕是否具有此樣式,按鈕都會發(fā)送?BN_CLICKED?通知代碼。 若要獲取?BN_DBLCLK?通知代碼,按鈕必須具有BS_RADIOBUTTON或BS_OWNERDRAW樣式。
BS_OWNERDRAW
創(chuàng)建所有者繪制的按鈕。 ? 當按鈕的視覺方面發(fā)生更改時,所有者窗口會收到?WM_DRAWITEM?消息。 請勿將BS_OWNERDRAW樣式與其他任何按鈕樣式組合在一起。
BS_PUSHBUTTON
創(chuàng)建一個推送按鈕,當用戶選擇該按鈕時,會將?WM_COMMAND?消息發(fā)布到所有者窗口。
BS_PUSHLIKE
使按鈕 ((如復(fù)選框、三態(tài)復(fù)選框或單選按鈕)) 外觀并像按下按鈕一樣。 ? 按鈕在未推送或檢查時顯示,在按下或選中按鈕時會引發(fā)。
BS_RADIOBUTTON
使用文本創(chuàng)建一個小圓圈。 ? 默認情況下,文本顯示在圓的右側(cè)。 ? 若要顯示圓左側(cè)的文本,請將此標志與BS_LEFTTEXT樣式 (或等效的BS_RIGHTBUTTON樣式) 組合在一起。 ? 對相關(guān)組使用單選按鈕,但相互排斥的選擇。
BS_RIGHT
右對齊按鈕矩形中的文本。 ? 但是,如果按鈕是沒有BS_RIGHTBUTTON樣式的復(fù)選框或單選按鈕,則文本框或單選按鈕右側(cè)的文本右對齊。
BS_RIGHTBUTTON
將單選按鈕的圓或復(fù)選框的正方形放在按鈕矩形的右側(cè)。 ? 與BS_LEFTTEXT樣式相同。
BS_SPLITBUTTON
創(chuàng)建拆分按鈕。 ? 拆分按鈕具有下拉箭頭。
BS_TEXT
指定按鈕顯示文本。
BS_TOP
將文本置于按鈕矩形的頂部。
BS_TYPEMASK
請勿使用此樣式。 ? 在 BS_* 樣式位上使用 OR 運算符產(chǎn)生的復(fù)合樣式位。 ? 它可用于從給定位掩碼屏蔽有效的BS_* 位。 請注意,這是過期的,并且未正確包含所有有效樣式。 因此,不應(yīng)使用此樣式。
BS_USERBUTTON
已過時,但提供與 16 位版本的Windows兼容。 應(yīng)用程序應(yīng)改用BS_OWNERDRAW。
BS_VCENTER
將文本置于按鈕矩形的中間 (垂直) 。
按鈕常用消息:
BM_CLICK? 模擬按鈕點擊? WPARAM=0,LPARAM=0;
BM_GETCHECK??????? 獲取單選按鈕或復(fù)選框的選中狀態(tài)???? WPARAM=0,LPARAM=0
BM_GETIMAGE?????? 獲得按鈕的圖像(圖標或位圖)句柄,???? WPARAM=0,LPARAM=0
BM_GETSTATE????????? 獲得單選按鈕或復(fù)選框狀態(tài),???? WPARAM=0,LPARAM=0;
BM_SETCHECK???????? 設(shè)置單選按鈕或復(fù)選框的選中狀態(tài),????????
???????????????????????????????????? WPARAM=BST_CHECKED,BST_INDETERMINATE,BST_UNCHECKED
???????????????????????????????????? LPARAM=0;
BM_SETDONTCLICK? 在單選按鈕上設(shè)置一個標志,接收焦點時生成BN_CLICKED消息
???????????????????????????????????? WPARAM=BOOL,???? LPARAM=0;
BM_SETIMAGE??????? 設(shè)置新圖像(圖標或位圖)????????
WPARAM=IMAGE_BITMAP,IMAGE_ICON
???????????????????????????????????? LPARAM=HBITMAP,HICON
BM_SETSTATE?????????? 設(shè)置按鈕的選中狀態(tài)? ???????? WPARAM=BOOL, LPARAM=0;
BM_SETSTYLE?????????? 設(shè)置按鈕樣式?????????????????? WPARAM=BS_..(按鈕樣式)? ,LPARAM=BOOL,(是否重繪)
按鈕通知消息
點擊按鈕時向父窗口發(fā)送WM_COMMAND消息,
wParam?? 的低字節(jié)指定了子窗口的ID號,高字節(jié)指定事件通知碼BN_CLICKED,
lParam???? 指定了子窗口句柄