掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
拡張DLLのダイアログへ、特定の状況でメッセージが届きません。 (ID:71522)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
お世話になっております。 その後簡単なプロジェクトを作って試していた所、 一応自己解決しましたのでお知らせします。 CMainFrame::OnClose() { m_pMyThread->m_socket.m_dlg.SendMessage(WM_CLOSE); // ←成功 m_pMyThread->PostThreadMessage(WM_DLG_CLOSE, 0, 0); //←失敗 (受け取り先でm_dlg.SendMessage(WM_CLOSE);) } あまり詳しく理解していませんが、 OnCloseでPostThreadMessageを呼んだ時点で スレッドが内部でメンバのDLLダイアログをクローズしていたのだと思います (実際はクローズできていない)。 デバッガで追ったところ、SendMessage内部のASSERT(::IsWindow(m_hWnd));で落ちていました。 (ウインドウはまだあるのに) スレッドのダイアログをDLLの物ではなく、通常のダイアログに変えても同様の結果だったのですが 通常のダイアログはOnClose内部でGetSafeHwnd()が0を返しました。 (DLLダイアログの場合はCreate時と同じ正しい値を返す。) 更に通常のダイアログは特に明示しなくても勝手にクローズしましたので、 そのあたりから推測しました。 解決としますが、この辺りの処理についてご教示頂けるとうれしいです。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.