在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++){
- btn[i].Create(str, dwStyle,CRect(x1,y1,x2,y2),this,buttonID+i);
- btn[i].SetFont(GetParent()->GetFont());
- }
上述代碼中,n表示運行時獲得的按鈕控件的個數,一共創建n個按鈕控件,且控件ID在buttonID~buttonID+n-1之間。
4.創建按鈕消息響應。
(1)在對話框類的定義文件(.h文件)中聲明消息響應函數OnButtonClick。
- // Implementation
- protected:
- // Generated message map functions
- //{{AFX_MSG(COrdnanceLocus)
- virtual BOOL OnInitDialog();
- //}}AFX_MSG
- afx_msg void OnButtonClick(UINT uID);
- DECLARE_MESSAGE_MAP()
(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文件)中給出具體的按鈕消息響應。