动态生成控件的消息处理
?動態生成控件的消息處理
www.diybl.com 時間:2008-04-26 作者:佚名 編輯:本站 點擊: 159 [評論]
今天用MFC做了一個動太生成控件的小程序,有關生成的控件
在網上查了一些資源,在這里整理一下
首先生成控件(這里以CButtonST為例,其它類似):
?
//生成按鈕
void CdlgDlg::OnBnClickedButton2()
...{
??? // TODO: 在此添加控件通知處理程序代碼
??? int width,height,left,space;
??? width=height=22;
??? left=100;
??? space=5;???
??? char cNum[10];
??? for(int i=1;i<10;i++)
??? ...{???????
??????? itoa(i,cNum,10);
??????? CButtonST* m_pBtnST=new CButtonST();
??????? m_pBtnST->Create(cNum, WS_VISIBLE | WS_CHILD,CRect(CPoint(left,100),CSize(width,height)),this,IDC_SELECTBUTTON);
??????? m_pBtnST->ShowWindow(SW_SHOW);
??????? this->SelectButton(*m_pBtnST);
??????? left+=width+space;
??? }
}
?
方法1:
?
#define IDC_SELECTBUTTON??????????????? 1011
//添加消息處理
afx_msg void OnBnClickedSelectButton();
BEGIN_MESSAGE_MAP(CdlgDlg, CDialog)
??? ON_BN_CLICKED(IDC_SELECTBUTTON,&CdlgDlg::OnBnClickedSelectButton)
END_MESSAGE_MAP()
//添加消息處理函數
void CdlgDlg::OnBnClickedSelectButton()
...{
??? MessageBox("clicked");
}
方法2(此方法更佳,可以具體得到是哪個控件觸發的消息):
?
在.h文件添加
private:
virtual BOOL OnCommand(WPARAM wParam,LPARAM lParam);
在.cpp文件添加
BOOL CdlgDlg::OnCommand(WPARAM wParam,LPARAM lParam)
...{
if(LOWORD(wParam)==IDC_SELECTBUTTON && HIWORD(wParam)==BN_CLICKED) //選擇按鈕
...{
HWND hWnd=(HWND)lParam; //觸發消息控件的句柄
CButtonST* pST=(CButtonST*)CButtonST::FromHandle(hWnd); //獲取控件指針
if(this->IsSelected(*pST))
Id(''_351_387_Closed_Text'').style.display=''inline'';" align="top" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" />...{
this->CancelSelectButton(*pST);
}
else
...{
this->SelectButton(*pST);
}
}
return CDialog::OnCommand(wParam,lParam);
}
就這樣就完成了動態添加控件的消息處理...
?
方法3(網上收集,跟方法2有點相似,還沒有測試過):
?
LRESULT?? CmmsgDlg::DefWindowProc(UINT?? message,?? WPARAM?? wParam,?? LPARAM?? lParam)??
? ...{??
????????? switch(message)??
????????? ...{??
????????????????? case?? WM_COMMAND:??
????????????????? ...{??
????????????????????????? DWORD?? nID???? =?? LOWORD(wParam);//低字空件ID??
????????????????????????? DWORD?? nEv???? =?? HIWORD(wParam);//高字窗體句柄??
????????????????????????? switch(nID)??
????????????????????????? ...{??
????????????????????????????????? case?? 0:??
????????????????????????????????? ...{??
????????????????????????????????????????? switch(nEv)??
????????????????????????????????????????? ...{??
????????????????????????????????????????????????? case?? BN_CLICKED://BN_CLICKED?? 二次消息??
?????????????? &nbs
? ...{??
????????????????????????????????????????????????????????? AfxMessageBox("Create?? Button?? is?? Cilcked.");??
????????????????????????????????????????????????? }??
????????????????????????????????????????????????? break;??
????????????????????????????????????????????????? //case?? BN_XXXX;?? 此控件的其它消息??
????????????????????????????????????????? }??
???
????????????????????????????????? }??
????????????????????????? }??
????????????????????????? //case?? other:??
????????????????? }??
????????????????? break;??
????????? }??
????????? return?? CDialog::DefWindowProc(message,?? wParam,?? lParam);??
? }??
?
哈哈...就寫到這...
文章出處:DIY部落(http://www.diybl.com/course/3_program/c++/cppjs/2008426/111625_3.html)
?
總結
以上是生活随笔為你收集整理的动态生成控件的消息处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在MFC中创建动态控件的生成与响应
- 下一篇: 浅谈自制MFC控件