自定义MFC控件可防止对话框创建

时间:2009-11-03 12:33:04

标签: mfc custom-controls

我有一个自定义MFC控件,子类化CWnd。除了提供OnPaint和PreSubclassWindow实现之外,它不会覆盖任何默认功能,除了在构造函数中注册窗口类外,在构造中不会做任何奇怪的事。

使用对话框编辑器将控件添加到对话框中以添加自定义控件。

当它是一个源自CDialog的简单模态对话框时,该对话框有效,但是我们有代码将CWnd :: CreateDlgIndirect调用到实例对话框,这会失败并带有自定义控件...但是如果自定义控件从资源模板。

1 个答案:

答案 0 :(得分:1)

找到了它! 我有自定义控件在自己的构造函数中注册它的窗口类。我在此自定义控件类型的对话框中有成员,因此在创建对话框时,按照预期调用了ctor。 但是,事实证明基类我改变了派生的对象,而不是CDialog,在我的新类'自己的初始化到达之前,在自己的ctor中调用CreateDlgIndirect - 所以它试图在窗口类之前创建自定义控件已注册。

我的(稍微凌乱的解决方案)是确保在任何对话框发生之前,在InitInstance方法的应用程序启动时发生窗口类注册。