日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

动态生成控件的消息处理

發布時間:2025/3/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 动态生成控件的消息处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?動態生成控件的消息處理
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)

?

總結

以上是生活随笔為你收集整理的动态生成控件的消息处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。