在我修改它之前,我的MFC对话框控件应该接收什么消息?

时间:2009-11-03 15:18:59

标签: mfc

我有一个自定义MFC对话框 CMyDialog ,使用资源编辑器添加了类型为 CMyControl 的自定义控件 - 该对话框具有控件的成员变量并具有DDX建立。

控件正在接收绘制消息,并具有自定义的绘制处理程序。但是我希望在控件中具有等效的OnInitDialog,因此它可以在创建时安全地进行一些初始化 - 将代码放入构造函数会导致问题。
我尝试为WM_CREATE,WM_NCCREATE消息添加处理程序,并为CWnd :: Create添加覆盖...但这些都没有触发。

我应该注意什么,知道编辑内容是否安全?

3 个答案:

答案 0 :(得分:4)

对话框控件在创建后在子类化时附加到MFC对象。发送WM_CREATE时,控件尚未附加到您的对象,并且您没有收到该消息。您可以覆盖PreSubclassWindow以在控件进行子类化时执行所需的初始化。这将在MFC处理WM_INITDIALOG期间调用。

答案 1 :(得分:0)

覆盖CWnd :: Create有什么问题?你应该能够做到这一点,然后首先调用父方法(CWnd :: Create()),然后做你的东西。但在这种情况下,您必须自己创建控件。

您还可以覆盖 PreSubclassWindow

无论如何,更多信息或一些代码可以很好地理解你的问题。

答案 2 :(得分:0)

  1. 检查您的消息地图是否设置正确,并且肯定包含WM_CREATE。
  2. 检查您的OnCreate函数签名是否已正确声明。
  3. 在OnCreate中使用ASSERT而不是断点 (也许它已经到了,但跳过断点)
  4. 尝试使用全新的应用程序隔离问题,然后在代码仍然发生时发布。
  5. 您可能还想关注一些these tutorials