MFC C++ アプリの Windows メニューにはどのように表示されますか

StackOverflow https://stackoverflow.com/questions/2426562

  •  19-09-2019
  •  | 
  •  

質問

MFC のドキュメント/ビュー アプリに提供される標準メニューの 1 つは、Windows メニューです。これは、タイリング ウィンドウやカスケード ウィンドウなどを提供し、現在利用可能なビューの列挙リストをメニューの最後に追加します。問題は、時々そうでないことですが、その理由を知りたいのです。具体的には、このリストを GUI 自動化ツールで使用したいので、更新する方法を知りたいです。通常、リストは存在しますが、時々存在しないことがあります。理由を知っている人はいますか?私の推測では、これを処理する関数が CFrameWnd クラスの奥深くにあると思いますが、それが見つからないようです。

編集: 私は GUI に Stingray ライブラリも使用していますが、これが問題に関係している可能性があります。

役に立ちましたか?

解決

メニューとウィンドウ タイトルの更新は 2 つの方法で別々に処理されます。

  • CFrameWnd::OnUpdateFrameMenu(..) フレームメニューのみを実現します。
  • CFrameWnd::OnUpdateFrameTitle(..) フレームの名前のみを更新します。

呼び出し順序がどこか間違っていて、タイトルの更新がメニューの更新よりも遅くなるのではないかと思います。結局のところ、ウィンドウメニューのタイトルは時々空の文字列のままになります。

修復する最も簡単な方法は、 GetActiveFrame()->ActivateFrame() メソッド呼び出し。実際のフレーム ウィンドウと所有されているウィンドウ メニューもすぐに更新されます。CDocument と CView を作成した後に使用できます。それを呼ぶのに最適な場所は終わりです OnFileNew, OnFileOpen アプリケーションの (CWin)App クラスのオーバーライドされたメソッド。

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