[ウィンドウ]メニューのテキスト変更

[戻る]
ゆっち 2006/12/06(水) 20:02:46
開発環境 : WinXP SP2 VS2005 MFC使用 MDIアプリケーション

前回の「メインフレームのタイトルについて」に絡むことなのですが、子ウィンドウの
最大化時にタイトルを空白にしている為、[ウィンドウ]メニューに動的追加される
子ウィンドウのタイトルも連番の数字のみしか表示されません。なので削除したいと
考え、ためしに以下のようなコードを記述しました。

void CMyChildFrame::OnUpdateFrameMenu(BOOL bActive, CWnd* pActivateWnd, HMENU 
hMenuAlt)
{
    CMDIChildWnd::OnUpdateFrameMenu(bActive, pActivateWnd, hMenuAlt);

    CWnd* pMainWnd = AfxGetMainWnd();
    hMenuAlt = pMainWnd->GetMenu()->GetSafeHmenu();
    CMenu* wMenu = CMenu::FromHandle(GetMDIFrame()->GetWindowMenuPopup
(hMenuAlt));
    if (wMenu == NULL)
      return;

    UINT uDelItem = wMenu->GetMenuItemID(2);
    pMainWnd->GetMenu()->DeleteMenu(uDelItem, MF_BYCOMMAND);

    GetMDIFrame()->DrawMenuBar();
}

この方法で既存の[ウィンドウ]メニューは削除できたのですが、子ウィンドウのタイト
ルは削除できませんでした。
どのようにしたら削除できるのでしょうか?教えてください。

ゆっち 2006/12/06(水) 20:15:35
タイトルがおかしいですね(^^;)
やりたいのは”[ウィンドウ]メニュー内の子ウィンドウメニューの削除”です。
よろしくお願いします。

いろは 2006/12/07(木) 09:17:27
話を蒸し返すようですが、[メインフレームのタイトルについて]に解決がチェックされた後に、書き
込みをしていますが、見ていただけましたか?
(そっちのほうが根本解決できれば、今回の質問についての対応は不要かなと思ったので)

シャノン 2006/12/07(木) 09:45:33
CMDIFrameWnd::GetWindowMenuPopup をオーバーライドして NULL を返せば、子ウィンド
ウの一覧が「ウィンドウ」メニューに追加されなくなります。

#どちらの解決法を取るかはお任せします。

ゆっち 2006/12/07(木) 11:00:18
いろはさん。
レスありがとうございます。

>話を蒸し返すようですが、[メインフレームのタイトルについて]に解決がチェック
>された後に、書き込みをしていますが、見ていただけましたか?

はい、確認しました。子ウィンドウのタイトルは消えたのですが、[ウィンドウ]
メニューには追加されてしまっていたので・・・。

シャノンさん。
レスありがとうございます。

>CMDIFrameWnd::GetWindowMenuPopup をオーバーライドして NULL を返せば、
>子ウィンドウの一覧が「ウィンドウ」メニューに追加されなくなります。

試してみましたが、既存の[ウィンドウ]メニューである「重ねて表示」「並べて表示」
も消えてしまいました。できればこのメニューはそのままで、子ウィンドウのタイトル
のみ削除するようにしたいのですがどうすればよいでしょうか?

シャノン 2006/12/07(木) 11:58:11
>>CMDIFrameWnd::GetWindowMenuPopup をオーバーライドして NULL を返せば、
>>子ウィンドウの一覧が「ウィンドウ」メニューに追加されなくなります。

> 試してみましたが、既存の[ウィンドウ]メニューである
> 「重ねて表示」「並べて表示」も消えてしまいました。

Win2000 Server SP4 + VC++ 2003 ではちゃんと残ってますけどね。
後で XP + 2005 で試してみます。

古いスレッドには追加発言できません。