重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

メインウインドーに例えばA、Bという2個のモーダルダイアログを開くようにしていますが、Aのみで開いたり閉じたりするとメモリー消費が200kバイトづつ毎回増えてしまいます。
しかし、最初にBを一回開いて閉じておけば、その後は何回Aを開いてもメモリーは増えません。
また、メモリーの増えるタイミングはAのダイアログを開いた時ではなく閉じた時点で増えます。
解決策を教えてください。

//子ウィンドー作成
hwDialog_o = CreateWindowEx(0, "CDialog", "",
WS_OVERLAPPED| WS_SYSMENU| WS_CAPTION| WS_BORDER| WS_VISIBLE|
WS_CLIPCHILDREN| WS_EX_TOPMOST,//WS_CLIPCHILDRENでチラツキ防止
i, j, 660, 180,NULL, NULL, h_Inst, NULL);


ShowWindow(hwDialog_o, nWinMode);
UpdateWindow(hwDialog_o);

// メインウインドウを無効化してモーダルに
EnableWindow(hwnd,FALSE);

・   色々と処理

// メインウインドウを有効にしてモーダル解除
EnableWindow(hwnd,TRUE);
BringWindowToTop(hwnd);
return;

A 回答 (1件)

ふむふむ。



で、閉じたダイアログウィンドウはどこで破棄しているの?

DestroyWindowはどこでやってるの?

まさか「関数を抜けたら勝手に破棄される」とか思ってないよね?

この回答への補足

回答ありがとうございます。

>DestroyWindowはどこでやってるの?

色々の処理は・・・

while(msg.message!=WM_QUIT){
if (PeekMessage(&msg,NULL,0U,0U,PM_REMOVE)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
この中で処理しています。
}

ダイアログの閉じるボタンが押されると、ウィンドープロシージャーでWM_QUITが認識されます。
その時点でホイールがとけてここに来ます。

// メインウインドウを有効にしてモーダル解除
EnableWindow(hwnd,TRUE);
BringWindowToTop(hwnd);
return;

ここでダイアログが実際に閉じます。

もちろん、動的メモリーは解放しています。

補足日時:2014/03/04 15:56
    • good
    • 0
この回答へのお礼

原因を探します、ありがとうございました。

お礼日時:2014/03/10 14:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!