どのようにMDI子ウィンドウは、その兄弟の上に滞在するには?
-
09-09-2019 - |
質問
この質問はhref="https://stackoverflow.com/questions/591508/user-interface-best-way-to-toggle-mdi-frames-on-top-status">に私の前にの
私は1つのドキュメントの場合と異なるビューを働くいくつかのMDI子ウィンドウを持つMFC(VC6)MDIアプリケーションを持っています。
それは他人の上に滞在するために、これらのフレームの1つを設定することは可能ですか?
私が呼ぶことを試みた。
SetWindowPos(
&GetParentFrame()->wndTopMost,
0, 0, 0, 0,
SWP_NOMOVE | SWP_NOSIZE);
と
ModifyStyleEx(0, WS_EX_TOPMOST);
のCMDIChildWndからではなくどちらも動作するように表示されます。
解決
あなたのCMDIChildWndクラス(通常はCChildFrame)では、静的HWND m_hTopWnd
を追加します。あなたが一番上に常になりたい子供のHWNDに等しい、それを設定します。
WM_WINDOWPOSCHANGED
でハンドルCChildFrame
。ハンドラでは、現在のm_hWnd == m_hTopWnd
かどうかを確認します。そうでない場合は、コール
::SetWindowPos(m_hTopWnd, HWND_TOP, 0, 0, 0, 0,
SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
すべてのMDI子ウィンドウの位置が設定されるたびにこの方法で、「常に一番上に」ウィンドウがトップに戻るプッシュされます。
またWM_CLOSE
を処理し、トップウィンドウが閉じているとき、m_hTopWnd = NULLを設定します。
も参照してください: CodeProjectの記事と
他のヒント
あなたはそれが他の人の上に子ウィンドウを維持するための良いUIデザインだと確信していますか?これは、別々の一番上のフレームになるべきではないでしょうか。またはコントロールバー?
所属していません StackOverflow