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
}
のですか?
ありがとうございました。具体的に「気分」を更新しました。 – Chaitanya
明確化:MFCにはソースが付いていますので、作成中に何が失敗するのかを確認することができます。 –
はい、m_nFlags = 256であるため、DestroyWindowはdlgcore.cpp内で呼び出されています。 – Chaitanya