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

2021-04-12 20:41:46 字數 1358 閱讀 7722

如何讓動態建立的按鈕響應滑鼠雙擊?

利用按鈕的bs_pushbutton風格,具有該風格的按鈕被單擊時會發出wm_command訊息,他的響應原理和用類嚮導定義的函式一樣。只不過它的響應函式原形,訊息對映以及函式實現需要你自己手動寫進去

例如:如:cbutton m_btn;

因為按鈕是顯示在對話方塊上的,所以我們可以在oninitdialog()中動態建立按鈕。因為建立按鈕需要id,所以在需要在resource.h中定義乙個id

如:#define idc_button_create               1002

在oninitdialog()中建立按鈕的**如下:

m_btn.create("pushbutton",bs_pushbutton |ws_child|ws_visible|ws_tabstop,

crect(0,0,100,50),this,idc_button_create);

按鈕建立後,執行後按鈕即會顯示在對話方塊上。

下面為動態建立的按鈕新增訊息對映:

如:在buttondlg.h中,新增函式原形:

afx_msg void onbuttoncreate();

然後在buttondlg.cpp中新增訊息對映:

on_bn_clicked(idc_button_create,onbuttoncreate)

最後新增上函式的函式體即可

如:void cbuttondlg::onbuttoncreate()

但是如何讓動態建立的按鈕響應滑鼠雙擊呢?如果按照上面的方法,新增響應滑鼠雙擊的函式會發現按鈕不會響應滑鼠雙擊!

我們利用對話方塊模版,在其上放乙個按鈕控制項。然後利用類嚮導新增響應滑鼠雙擊的函式,執行後雙擊按鈕結果也沒反應!但是如果我們把它的屬性中style項的notify這項選上,執行後雙擊按鈕就會響應。

因此我們斷定,動態建立的按鈕加上notify風格bs_notify。我們可以在建立按鈕時加上此風格也可以利用cwnd函式modifystyle()進行修改

如方法1 :

m_btn.create("pushbutton",bs_pushbutton |ws_child|ws_visible|ws_tabstop|bs_notify,

crect(0,0,100,50),this,idc_button_create);

方法2:

m_btn.modifystyle(0,bs_notify);

修改後,按照上述方法新增訊息處理函式即可!

如果是其它控制項比如edit,要讓edit響應一般的通告訊息只要在子類中新增響應得訊息對映即可

雖然自空件將通告訊息首先傳送給父視窗,但父視窗並不會先處理而是將其反射回子控制項,讓子控制項處理,如果子控制項處理了則訊息路由結束否則交給父視窗處理

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動態按鈕的建立及其訊息響應 和 自定義訊息

動態按鈕 多個 的建立 1 在類中宣告並定義按鈕控制項的id define idc d btn 10000 2 在類的oninitdialog 函式中動態建立按鈕 建立按鈕物件時最好建立物件的指標 3 手動釋放物件指標 下面是動態生成多個按鈕的例子 cbutton btn new cbutton 5...