【问题标题】:What message should my MFC dialog control receive before I can modify it?我的 MFC 对话框控件在修改之前应该收到什么消息?
【发布时间】:2009-11-03 15:18:58
【问题描述】:

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

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

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

【问题讨论】:

    标签: mfc


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      您还可以覆盖 PreSubclassWindow

      无论如何,多一点信息或一些代码会很好地理解您的问题。

      【讨论】:

      • 从不调用 Create 的覆盖。
      【解决方案3】:
      1. 检查您的消息映射是否设置正确,并且肯定包含 WM_CREATE。
      2. 检查您的 OnCreate 函数签名是否正确声明。
      3. 在 OnCreate 中使用 ASSERT 而不是断点
        (也许它已经到了,但跳过了断点)
      4. 尝试使用全新的应用程序来隔离问题,如果仍然存在,请发布您的代码。

      您可能还想关注一些these tutorials

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-25
        • 1970-01-01
        • 2016-06-10
        • 1970-01-01
        • 2011-02-01
        • 1970-01-01
        • 2011-01-20
        • 2016-03-14
        相关资源
        最近更新 更多