c++ - 如何处理来自 MFC 应用程序中动态创建的控件的消息?

标签 c++ visual-c++ mfc event-handling

假设我有一个 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。

谢谢!

最佳答案

这些是我到目前为止找到的解决方案(按相关性排序):

  1. 如果您可以定义要处理的控件 ID 的范围,请使用 ON_COMMAND_RANGE

  2. 重载 CWnd::PreTranslateMessage() 并对收到的消息做任何您想做的事情。注意:在处理按钮时,请注意 BN_CLICKED 事件不会发送到 PreTranslateMessage,而是直接发送到窗口过程。

  3. 重载 CWnd::WindowProc() 并对接收到的消息做任何您想做的事情。请注意,在处理按钮时,这是我发现的处理 BN_CLICKED 事件的唯一方法。

有趣的链接:

希望这对您有所帮助...感谢大家的贡献。

关于c++ - 如何处理来自 MFC 应用程序中动态创建的控件的消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/857135/

相关文章:

c++ - 在函数、编译时或运行时创建的数组?

visual-studio - MS Visual C/C++ 的 LIB 和 LIBPATH 环境变量有什么区别?

c++ - 使用 Visual C++ 6.0 的 Windows 服务

wpf - Microsoft Office 2010 使用 WPF 还是普通的旧 MFC?

c++ - 给出字符串值列表

c++ - 为什么在尝试推送到 vector 时会出现 std::bad_alloc 错误?

c++ - for循环错误计算素数C++

c++ - 使用 C++/WinAPI 在对话窗口中释放资源的适当消息是什么

c++ - 如何知道Windows XP 或7 中是否安装了MSSql Server?

c++ - Q_DECLARE_METATYPE 抛出缺少类型说明符错误