で、ATLのモードレス・ダイアログを表示している場合、親ウィンドウにて長い時間の描画が行われている時に、またまた、WM_WINDOWPOSCHANGING -> WM_WINDOWPOSCHANGED -> WM_WINDOWPOSCHANGING のサイクルが発生し、イベントの無限ループに陥ってしまった。
よくよく観察していると、ATLのモードレス・ダイアログのタイトルに「(応答なし)」という文字が表示されて、ダイアログの位置が、右下にピョコッと動いて、元の位置にピョコッと戻る。こいつが、親ウィンドウの再描画を促して、延々とイベントの無限ループ・・・。
レイアウト固定のツールバーなんで、もしかして、WM_WINDOWPOSCHANGING, WM_WINDOWPOSCHANGED の通知、無視した方がいいんじゃね?と思い。ハンドラを記述した。
BEGIN_MSG_MAP(CFooToolBar)...MESSAGE_HANDLER(WM_WINDOWPOSCHANGING, OnWindowPosChanging)MESSAGE_HANDLER(WM_WINDOWPOSCHANGED, OnWindowPosChanged)...END_MSG_MAP()...LRESULT OnWindowPosChanging(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);LRESULT OnWindowPosChanged(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);...LRESULT CFooToolBar::OnWindowPosChanging(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) {bHandled = TRUE;return 0;}LRESULT CFooToolBar::OnWindowPosChanged(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) {bHandled = TRUE;return 0;}
とりあえず、こんな措置で回避できた。
0 件のコメント:
コメントを投稿