今天用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)) ...{ 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 二次消息 ...{ AfxMessageBox("Create Button is Cilcked."); } break; //case BN_XXXX; 此控件的其它消息 } } } //case other: } break; } return CDialog::DefWindowProc(message, wParam, lParam); } 哈哈...就写到这... |