I'm trying migrate a VC++ 6 based code to work with VS2015 CLR. I have major functionality working, but UI has some things missing.
I have traced this issue to failures of SubclassDlgItem due to NULL HWnd for parent CWnd. It is NULL, because Create on a CDialog derived parent class returns 0 at following in dlgcore.cpp
if (hWnd != NULL && !(m_nFlags & WF_CONTINUEMODAL))
    {
        ::DestroyWindow(hWnd);
        hWnd = NULL;
    }
m_nFlags = 256 (Defined as #define WF_OLECTLCONTAINER 0x0100 // some descendant is an OLE control in afxwin.h)
And hWnd is not NULL, but '::CreateDialogIndirect() did NOT create the window (ie. due to error in template) and returns NULL' as per Microsoft comments
Following is the code for parent 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
        );
Following is the code for CDialog creation
m_pMainDialog = new CxMainDialog();
m_pMainDialog->Create(IDD_MAIN_DIALOG, this);
Below is the CxMainDialog constructor
CxMainDialog::CxMainDialog(CWnd* pParent /*=NULL*/)
    : CDialog(CxMainDialog::IDD, pParent)
{
    //{{AFX_DATA_INIT(CxMainDialog)
        // NOTE: the ClassWizard will add member initialization here
    //}}AFX_DATA_INIT
}
How may I get this to work?
                        
This was resolved by fixing the dialog template by removing ActiveX controls causing the problem while Create. I created a duplicate dialog and emptied it to test that Create is successful.