2016-09-10 109 views
2

我只是试图设置一个小型的win32项目,并且正要创建一个窗口。CWindowImpl - Create()返回错误代码1406

我创建的资源设计一个对话框,设置这个类为我的窗口:

#pragma once 
#include "stdafx.h" 

class TTTMainDialog : public CWindowImpl<TTTMainDialog> 
{ 
public: 

    DECLARE_WND_CLASS(_T("TTTDlg")) 

    enum { IDD = IDD_TTT_DIALOG }; 

    BEGIN_MSG_MAP_EX(MusicPlayerDialog) 
     MSG_WM_INITDIALOG(OnInitDialog); 
     MSG_WM_CLOSE(OnClose); 
     MSG_WM_DESTROY(OnDestroy); 
    END_MSG_MAP() 

    TTTMainDialog(); 
    ~TTTMainDialog(); 

private: 

    const BOOL OnInitDialog(const CWindow wndFocus, const LPARAM lInitParam); 
    void OnClose(); 
    void OnDestroy(); 
}; 

正如你所看到的,我加入了窗口类的声明,我继承了CWindowImpl的,我注册的对话框。我不认为我在这里忘记了一些东西。

在这是为了创建对话框类的,我想是这样创造的:

TTTMainDialog myDialog; 
HWND handle = myDialog.Create(NULL); 
myDialog.ShowWindow(nCmdShow); 

然而,创建方法并返回NULL所有的时间。我用GetLastError()检查了错误代码,结果我得到了错误代码1406或“ERROR_TLW_WITH_WSCHILD”。

MSDN文档指出以下有关此错误:“无法创建顶层子窗口”

我试图谷歌了这一点,但没有多少发现。

如果我不得不猜测,我会说这个问题是由一些窗口类名称的细节引起的,但我真的不确定。

有什么建议吗?

+0

检查对话框的属性中的资源。也许你在那里包含了'WS_CHILD'。直接或间接。无论如何,发布资源脚本。除非它吨,在这种情况下,减少到一个最小的,但完整的例子,并张贴它(你不需要包括AFX的东西)。 –

回答

5

您正试图从错误的部分构建窗口类。

该错误是非常具有描述性的:您正试图创建一个WS_CHILD风格的无母版窗口,这不起作用。

您从默认模板参数CWindowImpl - > CWindowImplBaseT - > TWinTraits - > CControlWinTraits获取子样式。 CControlWinTraits应该用于儿童控制窗口。

如果您打算使用对话框模板(IDD_TTT_DIALOG),那么正确的基类是CDialogImpl,它已经准备好使用正确的窗口样式。此外,它具有创建模态和非模态对话所需的功能。后者的行为更像Windows,并且是非阻塞的,但同时需要使用预定义控件的对话框模板资源。

+0

谢谢,现在我明白了! – Sossenbinder