MFC C++ アプリの Windows メニューにはどのように表示されますか
質問
MFC のドキュメント/ビュー アプリに提供される標準メニューの 1 つは、Windows メニューです。これは、タイリング ウィンドウやカスケード ウィンドウなどを提供し、現在利用可能なビューの列挙リストをメニューの最後に追加します。問題は、時々そうでないことですが、その理由を知りたいのです。具体的には、このリストを GUI 自動化ツールで使用したいので、更新する方法を知りたいです。通常、リストは存在しますが、時々存在しないことがあります。理由を知っている人はいますか?私の推測では、これを処理する関数が CFrameWnd クラスの奥深くにあると思いますが、それが見つからないようです。
編集: 私は GUI に Stingray ライブラリも使用していますが、これが問題に関係している可能性があります。
解決
メニューとウィンドウ タイトルの更新は 2 つの方法で別々に処理されます。
CFrameWnd::OnUpdateFrameMenu(..)
フレームメニューのみを実現します。CFrameWnd::OnUpdateFrameTitle(..)
フレームの名前のみを更新します。
呼び出し順序がどこか間違っていて、タイトルの更新がメニューの更新よりも遅くなるのではないかと思います。結局のところ、ウィンドウメニューのタイトルは時々空の文字列のままになります。
修復する最も簡単な方法は、 GetActiveFrame()->ActivateFrame()
メソッド呼び出し。実際のフレーム ウィンドウと所有されているウィンドウ メニューもすぐに更新されます。CDocument と CView を作成した後に使用できます。それを呼ぶのに最適な場所は終わりです OnFileNew
, OnFileOpen
アプリケーションの (CWin)App クラスのオーバーライドされたメソッド。
所属していません StackOverflow