gpt4 book ai didi

c++ - CWindowImpl - Create() 返回错误代码 1406

转载 作者:搜寻专家 更新时间:2023-10-31 00:29:49 24 4
gpt4 key购买 nike

我刚刚尝试设置一个小型 win32 项目,并且正要创建一个窗口。

我在资源设计器中创建了一个对话框并为我的窗口设置了这个类:

#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);

但是,Create 方法始终返回 NULL。我用 GetLastError() 检查了错误代码,结果我得到了错误代码 1406,或“ERROR_TLW_WITH_WSCHILD”。

msdn 文档对这个错误的描述如下:

“无法创建顶级子窗口。”

我试图用谷歌搜索这个,但没有太多可找到的。

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

有什么建议吗?

最佳答案

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

该错误非常具有描述性:您正在尝试创建一个带有 WS_CHILD 的无父窗口风格,这行不通。

您从默认模板参数获取子样式:CWindowImpl -> CWindowImplBaseT -> TWinTraits -> CControlWinTraits。 CControlWinTraits应该与子控制窗口一起使用。

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

关于c++ - CWindowImpl - Create() 返回错误代码 1406,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39423719/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com