質問

この質問は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の記事 MSDNナレッジベースの

他のヒント

あなたはそれが他の人の上に子ウィンドウを維持するための良いUIデザインだと確信していますか?これは、別々の一番上のフレームになるべきではないでしょうか。またはコントロールバー?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top