掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
MFCのメインウィンドウを変更したい (ID:52349)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
VisualC++のウィザードでMFC(SDI)アプリケーションを選択した後、 自作のCWnd(ClassWizardでMFCのgeneric CWnd派生)クラスを追加しました。 そのあと、ウィザードで作成されたCxxAppクラスのInitInstance関数内の メインウィンドウ作成部分を以下のようにメインウィンドウを差し替えました。 CMyWndがメインウィンドウにしたい追加クラスです。 CMyWnd* pMyWnd = new CMyWnd; m_pMainWnd = pMyWnd ; pMyWnd->Create(); // メイン ウィンドウが初期化されたので、表示と更新を行います。 pMyWnd->ShowWindow(SW_SHOW); pMyWnd->UpdateWindow(); pMyWnd->Create();は自分で追加した関数で、以下のように 親ウィンドウをNULLにしてトップレベルウィンドウにしています。 BOOL CMyWnd::Create() { LPCTSTR lpszClassName; CRect rect( 0, 0, 300, 200); HCURSOR hCursor = ::LoadCursor( NULL, IDC_ARROW); DWORD dwStyle, dwExStyle; lpszClassName = AfxRegisterWndClass( CS_HREDRAW | CS_VREDRAW, hCursor); dwExStyle = 0; dwStyle = WS_POPUP; return CreateEx( dwExStyle, lpszClassName, _T("TopLevelWindow"), dwStyle, rect, NULL, NULL, NULL); } すると、この差し替えたメインウィンドウをWM_CLOSEやWM_DESTROYメッセージを 送るなりして破棄すると、アプリケーションは正常終了しているように 見えたのですが、デバックさせるとメモリーリークが発生してしまいます。 デバックでメモリーリーク発生もとのコードは、CxxAppクラスInitInstance内の CMyWnd* pMyWnd = new CMyWnd; の部分となっています。 どうして、メモリーリークが発生してしまうのでしょうか? メインウィンドウ終了前に、子ウィンドウ全てにWM_DESTROYを送ったりして 色々と試したのですが回避できません。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.