假设我有一个 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_++);
}
那么我的问题是:如何处理来自该按钮的消息?是否可以使用 MFC 消息映射工具?
该解决方案应该适用于 vs6 和 vs2005。
谢谢!
最佳答案
这些是我到目前为止找到的解决方案(按相关性排序):
如果您可以定义要处理的控件 ID 的范围,请使用
ON_COMMAND_RANGE
。重载
CWnd::PreTranslateMessage()
并对收到的消息做任何您想做的事情。注意:在处理按钮时,请注意 BN_CLICKED 事件不会发送到 PreTranslateMessage,而是直接发送到窗口过程。重载
CWnd::WindowProc()
并对接收到的消息做任何您想做的事情。请注意,在处理按钮时,这是我发现的处理 BN_CLICKED 事件的唯一方法。
有趣的链接:
希望这对您有所帮助...感谢大家的贡献。
关于c++ - 如何处理来自 MFC 应用程序中动态创建的控件的消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/857135/