如何動態創建按鈕,並響應消息

  
如何讓動態創建的按鈕響應鼠標雙擊?
 
利用按鈕的BS_PUSHBUTTON風格,具有該風格的按鈕被單擊時會發出WM_COMMAND消息,他的響應原理和用類嚮導定義的函數一樣。只不過它的響應函數原形,消息映射以及函數實現需要你自己手動寫進去
例如:
首先建一個AppWizard的工程Button,然後給CButtonDlg添加一個成員變量m_btn
如: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()
{
    // TODO: Add your control notification handler code here
    MessageBox("OnCreateButton!");
}
但是如何讓動態創建的按鈕響應鼠標雙擊呢?如果按照上面的方法,添加響應鼠標雙擊的函數會發現按鈕不會響應鼠標雙擊!
我們利用對話框模版,在其上放一個按鈕控件。然後利用類嚮導添加響應鼠標雙擊的函數,運行後雙擊按鈕結果也沒反應!但是如果我們把它的屬性中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響應一般的通告消息只要在子類中添加響應得消息映射即可
雖然自空件將通告消息首先發送給父窗口,但父窗口並不會先處理而是將其反射回子控件,讓子控件處理,如果子控件處理了則消息路由結束否則交給父窗口處理
發佈了31 篇原創文章 · 獲贊 1 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章