• ベストアンサー

メニューリソースのオプションのGRAYEDについて

IDR_MENU1 MENU { POPUP "ファイル(&F)" { MENUITEM "新規作成(&N)",IDM_NEW MENUITEM "終了(&X)",IDM_EXIT,GRAYED } POPUP "ヘルプ(&H)",GRAYED { MENUITEM "バージョン情報(&V)",IDM_VERSION } } このコードでGRAYDに指定しているコマンド"終了"の文字が灰色にならず、選択可能になります。どうしたらGRAYEDの設定が反映されるでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

MFCでコーディングなさっているのでしょうか? # 開発環境のバージョンやエディッション MFCなどクラスライブラリーのバージョンなどを明記しましょう IDM_EXITに対応するイベントハンドラをメッセージマップに登録してあるため『GRAYED』のリソース設定が生きないのだと思います ON_COMMAND( IDM_EXIT, OnExit) といった記述に ON_COMMAND_UPDATE_UI(IDM_EXIT, OnUpdateExit) を追加して このハンドラの中でメニュー項目を無効にしましょう XXXXXX::OnUpdateExit(CCmdUI *pCmdUI) {   // 無効にするなら FALSEを 有効にするならTRUEを与えましょう   pCmdUI->Enable( FLASE ); } といった具合です

oeilvert
質問者

お礼

お返事ありがとうございます。 開発環境はVisualStudio2008でMFC9.0のバージョンで開発しています。 すべてのMEMUITEM項目である IDM_NEW IDM_EXIT IDM_VERSION はメッセージマップに登録しています。 これらの項目にはGRAYEDを設定しても効果がありません。 逆にPOPUP項目である ファイル ヘルプ にはGRAYEDの効果が現れます。 もしかして、メッセージマップに登録済みの項目にはGRAYEDは適用でぎず、その他紹介いただいた方法で類似する機能をつくるべきなのでしょうか?

その他の回答 (1)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

メニューの項目とツールバーのボタンを同期して制御するという仕組みを使っているのでCCmdUIクラスを使ってやるほうがいいように思います ファイル、ヘルプなど メニューの親項目自体をツールバーに設定できないため『GRAYED』が有効になるように思います # 根拠はありませんが ・・・

oeilvert
質問者

お礼

お返事ありがとうございます。 メニューリソース自体は比較的単純に設定しておいて、メニューのオプション部分はCCmdUIクラスで実現したほうがよさそうですね。

関連するQ&A

  • メニューの書式

    下の終了(&E)という文字を非活性にしたいのですが、リソースでそのようなスタイルっぽいことは指定できるのでしょうか? MENUITEM "終了(&E)", IDM_EXIT, DISABLED のような書式はないのでしょうか? #include "example.h" PROGRAM MENU DISCARDABLE BEGIN POPUP "ファイル(&F)" BEGIN MENUITEM "開く(&A)...", IDM_OPEN MENUITEM SEPARATOR MENUITEM "終了(&E)", IDM_EXIT END POPUP "ヘルプ(&H)" BEGIN MENUITEM "バージョン情報(&A)", IDM_ABOUT MENUITEM "ヘルプを表示(&H)", IDM_HELP END END

  • メニューバーのメニューメッセージについて

    メニューバーのメニューの上にマウスが乗った時にWM_MENUSELECT が送られてくるのはわかったのですが、下記のリソースファイルで※1や※2のところで同じようにマウスが乗った時かどうかを調べるにはどうしたらいいですか? ステータスバーに文字を表示したいのですが、※1や※2のところの場合はどうしたらいいのかわかりません。 //リソースファイル IDR_ID1 MENU BEGIN  POPUP "ファイル"//※1  BEGIN    MENUITEM "新規" IDM_1     POPUP "オプション"//※2     BEGIN       MENUITEM "項目1"  IDM_2     END  END END // あと、VisualStudio2010で開発していて、MFCは使用していません。 よろしくお願いします。

  • メニューからブラウザを起動するには?

    GUI上のメニューバーから、ブラウザを起動してhtmlページを表示したいのですが、どうもどういった命令を使えばいいのかが分かりません。 検索して調べるにも適当な検索ワードがなかなか思いつかず… 具体的には、 JMenuBar menuBar = new JMenuBar(); JMenu menuHelp = new JMenu("ヘルプ"); menuBar.add(menuHelp); menuItem = new JMenuItem("操作マニュアル"); menuHelp.add(menuItem); このソースの"操作マニュアル"を選択すると、ブラウザを起動してhtmlファイルを表示したいのです。 環境はOSがFedora Core 4、ブラウザはMozzilaもしくはFirefoxですが、Windowsでもそのまま動くことが必要です。 〆切の近い卒業研究のことなので、どなたか助言をお願いします。

    • ベストアンサー
    • Java
  • Java MenuShortCut に関して

    こんにちわ。 Javaのメニューに関して伺いたいことがあります。  以下のコードを作成して、メニューアイテムの  ショートカットは作成できました。  Menu m1=new Menu("file");  MenuShortcut ms = new MenuShortcut             (KeyEvent.VK_N, false);  m1.add(new MenuItem("new",ms));  が、メニュー自体のショートカット作成に  悩んでいます。  Alt+Fでfileメニューを開くようにしたいんです。 どなたかご存知の方がいれば、アドバイスを よろしくお願いします。

    • ベストアンサー
    • Java
  • 複数のセレクトメニューを制御するとき・・・

    どなたかお手すきでしたら、稚拙な質問にお付き合いお願い致します。 ネットで探した方法で、セレクトメニュー1の項目を選択したときにセレクトメニュー2の項目を変化させる制御をしています。 このフォームでDBにvalue値(1,2など数値で)を送信するようにしたいのですが この方法ですとセレクトメニュー2のvalue値が0(NULL)となってしまい上手く送信できません。 配列に文字列を入れていますし、DBの型をintにしているので0になってしまっていると思うのですが、 文字列としては送信したくはありません。 どのような方法でしたら文字列ではなく、上手くvalueに数値を入れることが出来るでしょうか。 どうかよろしくおねがいします。 以下使用しているコードです。 <html> <head> <title>テストテスト</title> <script language="JavaScript"><!-- menuItem = [ [], ["あああ","あああ2","あああ3","あああ4","あああ5"], ["いいい"], ["ううう","ううう2"], ["えええ","えええ2","えええ3","えええ4"] ]; function clearOption(len){ var i; for (i=0; i<len; i++){ document.aaa.bbb.options[i] = null; } } function setMenuItem(n){ optlen = document.aaa.bbb.options.length; while(optlen > 0){ clearOption(optlen); optlen = document.aaa.bbb.options.length; } if (menuItem[n].length > 0){ for (i=0; i<menuItem[n].length; i++){ document.aaa.bbb.options[i] = new Option(menuItem[n][i],menuItem[n][i]); } } } // --></script> </head> <body> <form name="aaa"> <select name="Maker" onChange="setMenuItem(this.selectedIndex)"> <option value="" selected>--- 選択してください ---</option> <option value="1">ひとつ</option> <option value="2">ふたつ</option> <option value="3">みっつ</option> <option value="4">よっつ</option> </select> <select name="bbb"> <option value="" selected>--- 選択してください ---</option> </select> </form> </body> </html>

  • addとremoveActionListener

    以下のプログラムは作っているプログラムの簡易版で、他のクラスからaddActionListenerを追加しようとしているですが、やり方が分かりません。 どうプログラミングすればいいか教えてください。 あと、removeActionListenerを使いたいのですが、これについて書かれているサイトが少なく、使い方がよくわからないので、こちらも教えて欲しいです。 import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; public class Test1 extends JFrame { public Test1(){ super("test1"); Set set=new Set(this); setBounds(100,100,806,659); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setResizable(false); add(set); JMenuBar menubar = new JMenuBar(); JMenu menu1=new JMenu("メニュー"); menubar.add(menu1); JMenuItem menuitem1=new JMenuItem("終了"); menu1.add(menuitem1); setJMenuBar(menubar); } public static void main(String[] args){ new Test1().setVisible(true); } } class Set extends JPanel{ Set(final JFrame frame){ /*ここにaddを入れたかった frame.menuitem1.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ System.exit(0); } });*/ //removeActionListener 使用方法不明 } }

    • ベストアンサー
    • Java
  • コマンドバーに配置したコマンド(ボタン?)をコマンド入力でHIDDENにしたい

    現在、eMbedded Visual C++ 3.0を使い、PocketPc用のアプリケーションを作っています。 MFCは使わずにAPIオンリーです。 ターゲットはCASSIOPEIA E800 ちょっとマイナー?ですが、産業用PDAです。 アプリケーションの下部にコマンドバーを配置し、バージョン情報などを表示させています。 二つ作ったコマンドのうち一つを開発段階のデバッグ用に使用したいと思っています。 デバッグ用コマンドのほうは普段(一般ユーザに)は見えなくなっていて 隠しコマンド入力で表示されるようにしたいのです。 メニューアイテムプロパティーの中にある非表示チェックボタンをチェックすると デバッグ用コマンドの表示が消え、リソースファイル"| TBSTATE_HIDDEN" が追加されます。 従って、ソースコード内でTBSTATE_HIDDENを操作すればいいとは思いますが、 その操作方法について調べてもわかりませんでした。 やりかたを教えてください。よろしくお願いします。 因みに、リソースファイルは下記になっています。 /****************************************************************************/ IDM_MENU SHMENUBAR MOVEABLE PURE BEGIN IDM_MENU, 3, I_IMAGENONE, IDM_MAIN_COMMAND1, TBSTATE_ENABLED, TBSTYLE_DROPDOWN | TBSTYLE_AUTOSIZE, IDS_HELP, 0, 0, I_IMAGENONE, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0, 0, NOMENU, I_IMAGENONE, IDM_MAIN_COMMAND2, TBSTATE_ENABLED | TBSTATE_HIDDEN, ←--ここ TBSTYLE_DROPDOWN | TBSTYLE_AUTOSIZE, IDS_DEBUG, 0, 1, END /****************************************************************************/

  • メニューの選択項目に応じて、もう1つのメニューの内容を変更する方法

    メニューの選択項目に応じて、もう1つのメニューの内容を変更する方法 2つのコンボがります。 1個目は、メーカーを選択します。 2個目は、機種を選択します。 下記ソースでは、valueの値が取得でいないようです。 (例) makerでドコモを選択したらvalueに1をセット sendwayでドコモ機種(2)を選択したらvalueに2をセット このようなことを実現したいのですが... よろしくお願いします。 <script language="JavaScript"><!-- menuItem = [["ドコモ機種(1)","ドコモ機種(2)"]["ドコモ以外機種"]]; function setMenuItem(n) { len = document.myForm.sendway.options.length; for (i=len-1; i>=0; i--) { document.myForm.sendway.options[i] = null; } for (i=0; i<menuItem[n].length; i++) { document.myForm.sendway.options[i] = new Option(menuItem[n][i],menuItem[n][i]); } } // --></script> <select name="maker" onChange="setMenuItem(this.selectedIndex)"> <option value="1" <?= $val?>>ドコモ</option> <option value="2" <?= $val?>>ドコモ以外</option> </select> <select name="sendway" > <option value="1" <?= $val?>>ドコモ機種(1)</option> <option value="2" <?= $val?>>ドコモ機種(2)</option> <option value="3" <?= $val?>>ドコモ以外機種</option> </select>

  • staticではないメソッドadd(Comp・・・

    コンパイルエラーが出ました。 かたほうのソース”A”では、add(p)で通るんですが、もう一方のソース”At”は、通りませんなぜでしょうか? 教えて下さい ↓”A”(通るほう) import javax.swing.*; import java.awt.event.*; import javax.swing.JMenuBar; import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.swing.border.LineBorder; import java.awt.*; public class A extends JFrame implements ActionListener { public static void main(String args[]) { A a = new A(); a.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); a.setBounds(200,200,400,200); JMenuBar menubar = new JMenuBar(); LineBorder border = new LineBorder(Color.black,2, true); menubar.setBorder(border); JMenu menu1 = new JMenu("ファイル"); JMenu menu2 = new JMenu("エディット"); JMenu menu3 = new JMenu("編集"); JMenu menu4 = new JMenu("ヘルプ"); menubar.add(menu1); menubar.add(menu2); menubar.add(menu3); menubar.add(menu4); JMenuItem menuitem1 = new JMenuItem("新しく作る"); JMenuItem menuitem2 = new JMenuItem("続きから作る"); JMenuItem menuitem3 = new JMenuItem("ヘルプの表示"); menu1.add(menuitem1); menu1.add(menuitem2); menu4.add(menuitem3); a.setJMenuBar(menubar); a.setVisible(true); } A() { super("A"); JLabel l = new JLabel(""); JButton b = new JButton("PUSH"); b.addActionListener(this); JPanel p = new JPanel(); p.setBackground(Color.green); p.add(b); p.add(l); add(p);       ←ここ } public void actionPerformed(ActionEvent e) { System.out.println("A"); } } ___________________________________________________________________________________________________________________________________________________ ↓”At” import javax.swing.*; import java.awt.*; import java.awt.event.*; public class At extends JFrame { public static void main(String args[]) { At at = new At(); at.setBounds(200,200,400,200); at.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); at.setVisible(true); JButton b1 = new JButton("JButton1"); JButton b2 = new JButton("JButton2"); JButton b3 = new JButton("JButton3"); JPanel p = new JPanel(); p.setBackground(Color.red); b1.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent e) { JLabel l = new JLabel("JBUTTON!1"); } } ); p.add(b1); p.add(b2); p.add(b3); add(p);         ←ここ } }

    • ベストアンサー
    • Java
  • セレクトメニュー選択でもう一つセレクトメニューを出す

    「ブロック名」のセレクトメニューを選択すると、選択した項目によってもう一つ「部署名」のセレクトメニューが出て選択するようにしたいと思い、途中まで作成しました。 しかし、「ブロック名」を「Aブロック」選択しても「部署名」が「Bトップ~」が出てしまいます。 何がおかしいのか分からないので、ぜひ教えてください。 よろしくお願いいたします。 menuItem = [  ["Aトップ","A本部","B本部","C本部"], ["Bトップ","1本部","2本部","3本部"], ["Cトップ","あ本部","い本部","う本部"],         ["Dトップ","●本部","▲本部","◆本部"] ]; function setMenuItem(n) { len = document.form2.BUSYO.options.length; for (i=0; i<len; i++) { document.form2.BUSYO.options[i] = null; } document.form2.BUSYO.style.visibility = "visible"; for (i=0; i<menuItem[n].length; i++) { document.form2.BUSYO.options[i] = new Option(menuItem[n][i],menuItem[n][i]); } ---------------------------------------------------------------- <SELECT size="1" name="Block" onChange="setMenuItem(this.selectedIndex)"> <OPTION selected value="0">選択してください</OPTION> <OPTION value="a-block">Aブロック</OPTION> <OPTION value="b-block">Bブロック</OPTION> <OPTION value="c-block">Cブロック</OPTION> <OPTION value="d-block">Dブロック</OPTION> </SELECT> <SELECT size="1" name="BUSYO" style="visibility:hidden"> <OPTION selected value="0">選択してください</OPTION> </SELECT>

専門家に質問してみよう