mfc動態按鈕

2021-07-11 03:01:58 字數 2444 閱讀 4665

動態按鈕(多個)的建立:

1、在類中宣告並定義按鈕控制項的id

#define

idc_d_btn 10000

2、在類的oninitdialog()函式中動態建立按鈕(建立按鈕物件時最好建立物件的指標)

3、手動釋放物件指標

下面是動態生成多個按鈕的例子:

cbutton* btn = new

cbutton[5

];

dword dwstyle = ws_child | ws_visible |bs_pushbutton;

for(int

i = 0

; i < 5

; i++)

注:create()的第乙個引數為按鈕的標題,可直接給出(如上所示),也可在string table中先定義字串,再利用控制項的 loadstring() 函式將字串讀取進來

程式執行效果如下所示:

動態按鈕(多個)的訊息響應:

乙個mfc的訊息響應函式在程式中有三處相關資訊: 函式原型 、 函式實現 以及用來 關聯訊息和訊息響應函式的巨集 。標頭檔案中在兩個afx_msg注釋巨集之間是訊息響應函式原型的宣告。原始檔中有兩處:一處是在afx_msg_map注釋巨集之間的訊息對映巨集,用來關聯訊息和訊息響應函式的巨集;另一處是原始檔中的訊息響應函式的實現**。

下面為動態生成的多個按鈕的訊息響應的建立步驟:

1、在對話方塊類的定義檔案(.h檔案)中宣告訊息響應函式onbuttonclick

afx_msg void

onbuttonclick(uint uid);

注:onbuttonclick函式的引數nid代表響應函式對應按鈕控制項的id號,單個按鈕可不設引數

2、在對話方塊類的函式實現檔案(.cpp檔案)中定義訊息對映on_command_range (多個按鈕)

在函式實現檔案中的訊息對映部分(begin_message_map與end_message_map之間)定義按鈕控制項與其訊息響應函式之間的對映關係。

on_command_range(idc_d_btn,idc_d_btn+5-1,onbuttonclick)
對於所有動態建立的5個按鈕(id號在idc_d_btn ~ idc_d_btn+5-1之間),定義其訊息對映函式為onbuttonclick函式,根據其輸入id分辨具體響應那個按鈕。

若是單個按鈕,則訊息對映為 on_bn_clicked

on_bn_clicked(idc_button_id, onbuttonfunc)
3、實現訊息響應函式onbuttonclick

在對話方塊類的函式實現檔案(.cpp檔案)中給出具體的按鈕訊息響應

自定義訊息:

訊息對映 、 迴圈機制 是windows程式執行的基本方式。vc++ mfc 中有許多現成的訊息控制代碼,可當我們需要完成其它的任務,需要自定義訊息,就遇到了一些困難。在mfc classwizard中不允許新增使用者自定義訊息,所以我們必須在程式中新增相應**,以便可以象處理其它訊息一樣處理自定義訊息。

windows訊息用"wm_"這個字首,自定義訊息一般用"um_這個字首" 。

1、首先在標頭檔案或cpp檔案中定義乙個訊息(推薦使用者自定義訊息至少是wm_user+100 ,因為很多新控制項也要使用wm_user訊息)

#define

wm_my_message (wm_user+100)

2、在訊息對映巨集裡面新增函式宣告

afx_msg lresult onmymessage(wparam wparam, lparam lparam);
3、在函式實現檔案(.cpp檔案)中定義訊息對映 on_message ,關聯訊息和訊息響應函式

on_message(wm_my_message, onmymessage)
4、實現訊息處理函式,該函式使用wpram和lparam引數並返回lpesult

lpesult

cmainframe

::onmymessage(wparam

wparam, lparam

lparam)

5、傳送訊息

::postmessage(getsafehwnd(), wm_my_message, 0, 0);
其中 getsafehwnd() 得到了乙個當前視窗的控制代碼,此訊息將發給當前視窗;如果想傳送訊息給其它視窗,只需改變這個控制代碼,前提是目的視窗也實現了此訊息的處理函式。

注:如果使用者需要乙個定義 整個系統唯一的訊息 ,可以呼叫sdk函式registerwindowmessage 定義訊息:

static

uint wm_my_message=registerwindowmessage("

user

");

並使用 on_registered_message 巨集指令取代on_message巨集指令,其餘步驟同上。

MFC單選按鈕

先為對話方塊加上2個radio button,分別是radio1和radio2。問題1 如何讓radio1或者radio2預設選上?如何知道哪個被選上了?關鍵是選上,預設 只要放在oninitdialog 即可。三種方法可以讓它選上 第一種 cbutton getdlgitem idc radio1...

MFC按鈕著色

這裡也有一些 在給按鈕上色的時候出了點問題。在網上找的方法基本上都不管用。說得跟真的一樣,各種onctrlcolor 和onerasebkground 各種技術帝的方法看起來都很厲害,但是都不管用。真正有用的辦法是自定義button,才能實現按鈕顏色。但是這個辦法不免有些複雜,我這麼懶的人,既不想為...

MFC按鈕特效

效果一 在按鈕上加入icon,使icon和文字同時顯示 假設按鈕id為idc button1 1.新增成員變數 cbuttonst m btn 2.新增icon資源,設其id設為idi icon1 3.在oninitdialog函式中初始化按鈕 m btn.subclassdlgitem idc b...