動態按鈕(多個)的建立:
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巨集指令,其餘步驟同上。
C 動態建立按鈕及 按鈕的訊息響應
動態建立的按鈕 都會在訊息 oncommand 中得到處理,無論是什麼訊息,都會處理的 1 建立按鈕 複製 如下 cbutton btn new cbutton leuxserz btn create t 方法 ws child ws visible,crect 0,0,50,50 this,2 注...
MFC中動態建立多個按鈕並實現其訊息響應
在mfc中,一般通過控制項欄直接向對話方塊中新增按鈕控制項,並雙擊按鈕新增該按鈕控制項的訊息響應函式。但是經常我們需要根據程式輸入或執行時資訊在介面上動態生成乙個或多個按鈕,並分別新增訊息響應,實現這一目標包括如下幾步 1.在類中宣告按鈕變數指標cbutton btn。2.在類中宣告並定義按鈕控制項...
mfc自動建立按鈕訊息處理並清除
以前參加一次面試有這道題 當時沒有網路沒有做出來,今天在網上整理了一下,實現如下.h中增加下面 生成的訊息對映函式 virtual bool oninitdialog afx msg void onsyscommand uint nid,lparam lparam afx msg void onpa...