DOBON.NET DOBON.NETプログラミング掲示板過去ログ

メインメニューについて

環境/言語:[.NET Framework 1.1]
分類:[.NET]

お世話になります。
VC++
フォームアプリケーション(.NET)

フォーム上にmainMenuを付けていますが、矢印キーで左へ動かして行った場合、フォームを閉じるなどのメニューが出てしまいます。自分で設定したメニュー以外だしたくないのでこのフォームを閉じるなどのメニューを表示させたくないのですが、どのようにしたら表示しないように設定できるのでしょうか。
2005/03/06(Sun) 09:12:26 編集(投稿者)

こんにちは、じゃんぬねっと です。

■No9604に返信(kensさんの記事)
> フォーム上にmainMenuを付けていますが、矢印キーで左へ動かして行った場合、
> フォームを閉じるなどのメニューが出てしまいます。
> 自分で設定したメニュー以外だしたくないのでこのフォームを閉じるなどのメニューを
> 表示させたくないのですが、どのようにしたら表示しないように設定できるのでしょうか。

実際に現象が起きるのは MainMenu ではなく、MenuItem ですね。
ちなみに、Windows のウィンドウはそういう動きが "普通" なのですが...
MenuItem が PopUp された時に、DeleteMenu() API を使ってメニューを消すと可能でしょう。
再度 AppendMenu することも忘れないようにしてください。

カスタム コントロールで ProcessCmdKey() をオーバーライドできそうですが、微妙です。
どうもありがとうございます。


> 実際に現象が起きるのは MainMenu ではなく、MenuItem ですね。
> ちなみに、Windows のウィンドウはそういう動きが "普通" なのですが...
> MenuItem が PopUp された時に、DeleteMenu() API を使ってメニューを消すと可能でしょう。
> 再度 AppendMenu することも忘れないようにしてください。

APIのDeleteMenuを使おうと思ったのですが、その第一引数としてHMENUが必要なのですが、これは.NETではどのように渡せばいいのでしょうか。たとえばmenuItem1を渡そうとしてmenuItem1->Handleとしたのですが、「System::IntPtr' から 'HMENU' に変換できません。」とコンパイルエラーがでてしまいました。
初歩的な質問で申し訳ありませんが、よろしくお願いいたします。
こんにちは、じゃんぬねっと です。

■No9630に返信(kensさんの記事)
> これは.NETではどのように渡せばいいのでしょうか。
> たとえばmenuItem1を渡そうとしてmenuItem1->Handleとしたのですが、
> 「System::IntPtr' から 'HMENU' に変換できません。」とコンパイルエラーがでてしまいました。

そこで何故 MenuItem が出てくるのでしょうか?
当該の処理対象は、"システム" メニューのハズですよね?
そう、貴方が「出てきて欲しくない」と仰っていたメニューの方です。

> 初歩的な質問で申し訳ありませんが、よろしくお願いいたします。

GetSystemMenu() を使って、"システム" メニューのハンドルを取得します。
そのハンドルを、DeleteMenu() および、AppendMenu() に渡してあげてください。

猫プロあたりを参照すると、わかりやすいかもしれません。
http://www.kumei.ne.jp/c_lang/sdk/sdk_12.htm

# 関数名がわかっていれば Google などで調べると、すぐヒットします。
GetSystemMenu(this->Handle, 0);
でシステムメニューのハンドルを取得しようとしているのですが、this->Handleでは、'IntPtr'から'HWND'に変換できません。となってしまいます。どう型を変えてやればいいのでしょうか。

DOBON.NET | プログラミング道 | プログラミング掲示板