2017-01-04 8 views
0

VS2015 CLRで動作するようにVC++ 6ベースのコードを移行しようとしています。 私は主要な機能は動作していますが、UIには欠けているものがいくつかあります。CDialogのクラスを作成するとVS2015 CLRで0が返され、VC++ 6で正常に動作します。

私はこの問題を、親CWndのNULL HWndのためにSubclassDlgItemの失敗に追いかけました。 CDialogの派生親クラスに作成するdlgcore.cppに

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

m_nFlags = 256以下で0を返すので(の#define WF_OLECTLCONTAINERは0x0100 //のように定義されたいくつかの子孫はAFXWIN.HでOLEコントロールである)、NULLであります

とのhWndがNULLではありませんが、「:: CreateDialogIndirect()は、(すなわち。原因テンプレートでエラーに)ウィンドウを作成していないと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 
} 

のですか?

+0

ありがとうございました。具体的に「気分」を更新しました。 – Chaitanya

+0

明確化:MFCにはソースが付いていますので、作成中に何が失敗するのかを確認することができます。 –

+0

はい、m_nFlags = 256であるため、DestroyWindowはdlgcore.cpp内で呼び出されています。 – Chaitanya

答えて

0

これは、作成中に問題を引き起こすActiveXコントロールを削除してダイアログテンプレートを修正することで解決しました。私は重複したダイアログを作成し、それが空であることをテストするために空にしました。

関連する問題