读书人

动态创建的 CButton 怎么响应其事件

发布时间: 2012-01-12 22:11:58 作者: rapoo

动态创建的 CButton 如何响应其事件
我看了一些帖子,似乎都不太好.
动态创建的 CButton ID是不固定的,因此不能事先指定ID.
有个解决办法是响应父窗口的 preTranslateMsg 函数,在这里判断是否是此按钮的相关事件.
但 preTranslateMsg 函数的控件ID似乎不在wParam和lParam里,我一直没跟踪到是在哪,哪如何判断是哪个控件的事件呢?

[解决办法]
ON_COMMAND_RANGE(ID_MY_ADD_BUTTON,ID_MY_ADD_BUTTON+100,OnMyAddButton).
创建button时,使用事先预留好的ID。(例,起始ID_MY_ADD_BUTTON,留100个)。
在统一的响应函数 OnMyAddButton(UINT nID)中响应,具体是哪个button, 由参数nID决定。
[解决办法]
rayland()
已经说的很清楚了,
如果你创建的ID不是ID_xxx的常量,而是变量,比如 int nIDmin = 10002, nIDmax = 10145;
则把对应的常量用变量替换即可.
比如
if( (LOWORD(wParam) > = nIDmin ) && (LOWORD(wParam) <= nIDmax ))
{
OnMyAddButton(LOWORD(wParam) );
return true;
}

这里的 if 处理,就相当于 ON_COMMAND()
所以不再需要用宏定义消息映射.

读书人网 >VC/MFC

热点推荐