dav*_*dag 8 c++ mfc event-handling visual-c++
想象一下,我有一个CDialog,可以在用户单击按钮时动态创建控件.它可能是这样的:
// We don't know which is the first id for the new buttons until runtime (!)
MyDialog::MyDialog(/*whatever parameters needed*/, first_id)
: next_id_(first_id)
{ /*...*/ }
BOOL MyDialog::OnSomeButtonClicked()
{
CButton* new_button = new CButton;
new_button->Create("Caption", WS_CHILD | WS_VISIBLE, this->new_button_rect_,
this, this->next_id_++);
}
Run Code Online (Sandbox Code Playgroud)
然后我的问题是:我怎么能处理来自这个按钮的消息?是否可以使用MFC消息映射工具?
该解决方案应该在vs6和vs2005中都有效.
谢谢!
这些是迄今为止我发现的解决方案的相关性:
使用ON_COMMAND_RANGE,如果你能确定你要处理的控件ID的范围.
CWnd::PreTranslateMessage()使用收到的消息重载并执行您想要的任何操作.注意:处理按钮时,请考虑BN_CLICKED事件未发送到PreTranslateMessage但直接发送到窗口过程.
CWnd::WindowProc()使用收到的消息重载并执行您想要的任何操作.请注意,在处理按钮时,这是我发现处理BN_CLICKED事件的唯一方式.
有趣的链接:
我希望这有帮助......谢谢大家的贡献.
虽然您不知道id的确切值,但如果您知道ID的可能范围,则可以使用以下宏.
BEGIN_MESSAGE_MAP(MyDialog, CDialog)
...
...
ON_COMMAND_RANGE(1000, 5000, OnButtonDynamic)
END_MESSAGE_MAP()
void MyDialog::OnButtonDynamic(UINT nID)
{
}
Run Code Online (Sandbox Code Playgroud)
这适用于1000 - 5000范围内的ID.
| 归档时间: |
|
| 查看次数: |
13170 次 |
| 最近记录: |