使用 VS2015 CLR 在派生的 class returns 0 上创建 CDialog,在 VC++ 6 中运行良好
Create on a CDialog derived class returns 0 with VS2015 CLR, worked fine in VC++ 6
我正在尝试迁移基于 VC++ 6 的代码以使用 VS2015 CLR。
我的主要功能正常,但 UI 缺少一些东西。
我已将此问题追溯到 SubclassDlgItem 由于父 CWnd 的 NULL HWnd 而失败。它是 NULL,因为在 CDialog 派生父 class returns 0 上创建 dlgcore.cpp
if (hWnd != NULL && !(m_nFlags & WF_CONTINUEMODAL))
{
::DestroyWindow(hWnd);
hWnd = NULL;
}
m_nFlags = 256(定义为#define WF_OLECTLCONTAINER 0x0100 //某些后代是afxwin.h中的OLE控件)
而且 hWnd 不是 NULL,但是根据 Microsoft 的评论,'::CreateDialogIndirect() 没有创建 window(即由于模板中的错误)和 returns 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 控件修复对话框模板来解决此问题。我创建了一个重复的对话框并将其清空以测试创建是否成功。
我正在尝试迁移基于 VC++ 6 的代码以使用 VS2015 CLR。 我的主要功能正常,但 UI 缺少一些东西。
我已将此问题追溯到 SubclassDlgItem 由于父 CWnd 的 NULL HWnd 而失败。它是 NULL,因为在 CDialog 派生父 class returns 0 上创建 dlgcore.cpp
if (hWnd != NULL && !(m_nFlags & WF_CONTINUEMODAL))
{
::DestroyWindow(hWnd);
hWnd = NULL;
}
m_nFlags = 256(定义为#define WF_OLECTLCONTAINER 0x0100 //某些后代是afxwin.h中的OLE控件)
而且 hWnd 不是 NULL,但是根据 Microsoft 的评论,'::CreateDialogIndirect() 没有创建 window(即由于模板中的错误)和 returns 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 控件修复对话框模板来解决此问题。我创建了一个重复的对话框并将其清空以测试创建是否成功。