2

派生 CView クラスのメソッド内で、CWnd の MessageBox メソッドを呼び出しています。これはドッキング ビューであり、MDI の子ではありません。MessageBox から戻ると、フォーカスはドッキングされたビューではなく、Active MDI の子に移動します。

これは MFC の動作の「異常」であると考えて、コードを変更して Win32 ::MessageBox を使用し、ビューの GetSafeHwnd() を親 HWND パラメーターに渡すようにしましたが、MessageBox の破棄時にビューがフォーカスされません。ですが、MFC 呼び出しと同様に、Active MDI の子がフォーカスを取得します。

また、MessageBox だけでなく、ビューからの CDialog ベースのウィンドウでも同様の動作が見られます。

MessageBox から戻った後に SetFocus() を呼び出すことで回避策を実行しましたが、うまくいきました。ただし、プログラムで常にフォーカスを戻す必要はありません(ビューまたはその子の1つがダイアログ/メッセージボックスの前にフォーカスを持っていない状況があるため、実際にそれをテストする前にテストする必要がありますダイアログ/メッセージボックス、DoModal/MessageBoxへの呼び出しの後、フォーカスがあった場合にのみフォーカスを復元します)。

これは MDI Windows の動作のバグですか? これはバグではなく、MDI アプリの「望ましい機能」ですか? 私は何か間違ったことをしていますか?アイデアやコメントはありますか?

4

0 に答える 0