有兩種方法:
第一種方法:
在resource.h中定義按鈕的ID: #define IDC_MYBUTTON 1010
在對話框的.h文件中聲明一個Button指針CButton *m_pButton;
在構造函數中: m_pButton=NULL;
在析構函數中:
if (m_pButton != NULL)
{
delete m_pButton;
m_pButton = NULL;
}
生成按鈕:可以在OnInitDialog()中
m_pButton =new CButton;
m_pButton->Create(_T("Button Title"),
WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
CRect (0,0,100,24),
this,IDC_MYBUTTON );
映射消息:
在.h文件中聲明:
afx_msg void OnMyButton();
在對話框.cpp文件中:
BEGIN_MESSAGE_MAP(CDlgTestDlg, CDialog)
ON_BN_CLICKED(IDC_MYBUTTON,OnMyButton)
END_MESSAGE_MAP()
void CDlgTestDlg::OnMyButton()
{
MessageBox("This is a test!");
}
第二種方法:
1)在窗體初始化時動態創建按鈕:
CButton * Mybutton = new CButton;
Mybutton->Create(_T("我的按鈕"), BS_CENTER | WS_CHILD | WS_VISIBLE, CRect(0,0,200,30), AfxGetApp()->m_pMainWnd, 0);
2)在DefWindowProc消息中截獲按鈕的消息,這樣做的目的是,不僅僅爲此按鈕創建了消息處理的時機,更重要的是將來所有其它動態控件等都可以這此進行細緻的處理;
LRESULT CmmsgDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_COMMAND:
{
DWORD nID = LOWORD(wParam);
DWORD nEv = HIWORD(wParam);
switch(nID)
{
case 0:
{
switch(nEv)
{
case BN_CLICKED://BN_CLICKED 二次消息
{
AfxMessageBox("Create Button is Cilcked.");
}
break;
//case BN_XXXX; 此控件的其它消息
}
}
}
//case other:
}
break;
}
return CDialog::DefWindowProc(message, wParam, lParam);
}
附:
WM_COMMAND
wNotifyCode = HIWORD(wParam); // notification code
wID = LOWORD(wParam); // item, control, or accelerator identifier
hwndCtl = (HWND) lParam; // handle of control