关于同态创建的控件的ID如何获取?

realbeibeiking 2014-03-04 09:59:54
描述:
用动态方法在对话框的page里创建了一堆checkbox,combobox等控件,现需要监控它们是否被用户改变了状态(例如勾选或更改选项)
如果是静态定义的对话框控件,可以用以下方法来监控:

BEGIN_MESSAGE_MAP(KLay_AxisDialog, CDialog)
ON_BN_CLICKED(IDC_LAY_AXISAPPLY, OnChange)
ON_LBN_SELCHANGE(IDC_LAY_AXISBOX, OnChange)
END_MESSAGE_MAP()


然后完成OnChange函数即可.

但对于动态创建的控件,我手里当然只有它们的实例(CEdit m_Edit, CButton m_Checkbox等)而没有预分配的控件ID.如果用上面这种方式,我也需要把IDC_LAY_AXISBOX换成m_Checkbox.GetDlgCtrlID()获取其ID,但我不认为在MAP阶段它就已经有一个有效的ID,很可能出错.

求教我应该如何实现目的(监控动态创建的控件是否有状态变化)?谢谢
...全文
125 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
realbeibeiking 2014-03-04
  • 打赏
  • 举报
回复
请问第二种方法里,nCode定义的几种消息,哪种是对应的"控件选项被改变"?
realbeibeiking 2014-03-04
  • 打赏
  • 举报
回复
谢谢LS!第一种好理解,到那个时候ID一定已经绑定了
allenhiman 2014-03-04
  • 打赏
  • 举报
回复
如果是MFC的话更容易 可以用虚函数 virtual BOOL OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo);
allenhiman 2014-03-04
  • 打赏
  • 举报
回复
...这都不知道? 所有的消息都是发给主窗口的 响应主窗口的WM_COMMAND 在里面分析即可 类似 switch(nId) { case m_edit.getctrlid(): ... }
Eleven 2014-03-04
  • 打赏
  • 举报
回复
你动态创建的时候还不是有个ID号吗?需要预先定义好的。

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧