gpt4 book ai didi

c++ - 使用 VS2015 CLR 在 CDialog 派生类上创建返回 0,在 VC++ 6 中运行良好

转载 作者:行者123 更新时间:2023-11-28 05:21:14 26 4
gpt4 key购买 nike

我正在尝试迁移基于 VC++ 6 的代码以使用 VS2015 CLR。我的主要功能正常,但 UI 缺少​​一些东西。

我已将此问题追溯到由于父 CWnd 的 NULL HWnd 而导致 SubclassDlgItem 失败。它是 NULL,因为在 CDialog 派生的父类上创建在 dlgcore.cpp 的后面返回 0

if (hWnd != NULL && !(m_nFlags & WF_CONTINUEMODAL))
{
::DestroyWindow(hWnd);
hWnd = NULL;
}

m_nFlags = 256(定义为#define WF_OLECTLCONTAINER 0x0100//某些后代是 afxwin.h 中的 OLE 控件)

并且 hWnd 不是 NULL,但是 '::CreateDialogIndirect() 没有创建窗口(即由于模板中的错误)并根据 Microsoft 评论返回 NULL'

父CWnd的代码如下

CreateEx(
WS_EX_NOPARENTNOTIFY,
NULL,
"MainClient",
WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,
0, 0, // Locate at upper left corner of client area
1, 1, // Initial size doesn't matter - will be sized to fit parent
parent->GetSafeHwnd(),
NULL
);

以下是创建CDialog的代码

m_pMainDialog = new CxMainDialog();
m_pMainDialog->Create(IDD_MAIN_DIALOG, this);

下面是CxMainDialog的构造函数

CxMainDialog::CxMainDialog(CWnd* pParent /*=NULL*/)
: CDialog(CxMainDialog::IDD, pParent)
{

//{{AFX_DATA_INIT(CxMainDialog)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}

我怎样才能让它发挥作用?

最佳答案

此问题已通过删除在创建时导致问题的 ActiveX 控件来修复对话框模板来解决。我创建了一个重复对话框并将其清空以测试创建是否成功。

关于c++ - 使用 VS2015 CLR 在 CDialog 派生类上创建返回 0,在 VC++ 6 中运行良好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41459280/

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