MFC中動態建立多個按鈕並實現其訊息響應

2021-06-08 02:40:10 字數 1398 閱讀 2167

在mfc中,一般通過控制項欄直接向對話方塊中新增按鈕控制項,並雙擊按鈕新增該按鈕控制項的訊息響應函式。但是經常我們需要根據程式輸入或執行時資訊在介面上動態生成乙個或多個按鈕,並分別新增訊息響應,實現這一目標包括如下幾步:

1.在類中宣告按鈕變數指標cbutton* btn。

2.在類中宣告並定義按鈕控制項的id, buttonid=10000。

3.在類的oninitdialog()函式中動態建立按鈕。

btn = new cbutton[n];

dword dwstyle = ws_child | ws_visible | bs_pushbutton;

for(int i = 0; i < dbutil::ordnancesitenum; i++)

上述**中,n表示執行時獲得的按鈕控制項的個數,一共建立n個按鈕控制項,且控制項id在buttonid~buttonid+n-1之間。

4.建立按鈕訊息響應。

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

// implementation

protected:

// generated message map functions

//}afx_msg

afx_msg void onbuttonclick(uint uid);

declare_message_map()

注意,onbuttonclick函式必須宣告在對話方塊類自動生成的控制項響應函式宣告列表的後面(上述**中oninitdialog函式就是自動生成的函式宣告),即程式設計師新增的動態按鈕訊息響應函式宣告應該在在//}}afx_msg和declare_message_map()兩行之間,以免系統將其當做自動生成的訊息響應函式。onbuttonclick函式的引數nid代表響應函式對應按鈕控制項的id號。

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

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

on_command_range(buttonid,buttonid+n-1,onbuttonclick)

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

注意:若是單個按鈕,則訊息對映的定義方式為on_bn_clicked(idc_button_id, onbuttonfunc)

(3)實現訊息響應函式onbuttonclick。

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

mfc自動建立按鈕訊息處理並清除

以前參加一次面試有這道題 當時沒有網路沒有做出來,今天在網上整理了一下,實現如下.h中增加下面 生成的訊息對映函式 virtual bool oninitdialog afx msg void onsyscommand uint nid,lparam lparam afx msg void onpa...

如何動態建立按鈕,並響應訊息

如何讓動態建立的按鈕響應滑鼠雙擊?利用按鈕的bs pushbutton風格,具有該風格的按鈕被單擊時會發出wm command訊息,他的響應原理和用類嚮導定義的函式一樣。只不過它的響應函式原形,訊息對映以及函式實現需要你自己手動寫進去 例如 如 cbutton m btn 因為按鈕是顯示在對話方塊上...

MFC中的動態建立

1 為了能夠動態建立,程式必須維護乙個cruntimeclass的類,當需要去識別乙個類的時候,就依次去查詢這個鍊錶,而這個是通過一組巨集來實現的。因為是乙個鍊錶,所以就需要初始化,這個初始化在cobject中用稍有不同的巨集來實現的。2 cruntimeclass的結構 lpcstr m lpsz...