Создание на производном от CDialog классе возвращает 0 с VS2015 CLR, отлично работало в VC ++ 6

Я пытаюсь перенести код на основе VC ++ 6 для работы с VS2015 CLR.
У меня работает основная функциональность, но в пользовательском интерфейсе чего-то не хватает.

Я проследил эту проблему до сбоев SubclassDlgItem из-за NULL HWnd для родительского CWnd. Это NULL, потому что Create в производном родительском классе CDialog возвращает 0 при следующем в dlgcore.cpp

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

m_nFlags = 256 (определяется как #define WF_OLECTLCONTAINER 0x0100 // некоторый потомок является элементом управления OLE в afxwin.h)

И hWnd не NULL, но ‘:: CreateDialogIndirect () НЕ создал окно (т.е. из-за ошибки в шаблоне) и возвращает NULL’ согласно комментариям Microsoft

Ниже приведен код для родительского 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
}

Как я могу заставить это работать?

0

Решение

Это было решено путем исправления шаблона диалога путем удаления элементов управления ActiveX, вызывающих проблему при создании. Я создал дубликат диалогового окна и опустошил его, чтобы проверить успешность создания.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector