トップ回答者
menu の選択でAlternateの場合 Checkを入れる

質問
回答
-
しかし、こちらが作った他の項目ではそれが入りません。どうしたら 交互にチェック印を入れられますか?
そのように実装しなければなりません。
Visual C++ 6.0 でも OnUpdateUIState か何かでメニューの状態を更新するためのハンドラを追加できたはずです。このハンドラの中で、独自の要素を表示している・していないを判定し、メニューアイテムの状態を更新することができるはずです。
(申し訳ありませんが、Visual C++ 6.0 での追試はしていません。)
解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。- 回答としてマーク 高橋 春樹 2009年12月17日 8:45
-
そのハンドらをどこにいれるのでしょうか?該当するPopUpmenu のClasswizardを開いて メッセジーをみたのでsが
メインの PC には Visual C++ 6.0 が入っていませんでしたので、サブ PC にて確認しました。
みあたりません。みどころがわるいのかもしれません。
レベルを落として 教えていただけませんでしょうかおねがいします。
ClassWizard の メニュー ID に対応するメッセージとして UPDATE_COMMAND_UI に対するハンドラを追加して下さい。
検索してみたところ、こちらのページが近いイメージでしょうか。
http://www.geocities.jp/tweedamp2004/vc/vc4_3.html
チェックを ON にすべきか、OFF にすべきかは自分で何らかのメンバー変数を使う等して条件分岐をする必要があります。
解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。- 回答としてマーク 高橋 春樹 2009年12月17日 8:45
-
void CAboutDlg::OnUpdateViewDrawImages(CCmdUI* pCmdUI) {
構文エラーは構文エラーです。
// TODO: この位置に command update UI ハンドラ用のコードを追加してください
pCmdUI->SetCheck(1) // on <-コピしたもの
pCmdUI->SetCheck(0) // off <-コピしたもの
}
このままでは 2行目で構文エラになりました。言われるように If () then else 文が必要でしょうか?
if 制御構造を入れる・入れないとは全く関係ありません。
本当に上記のままコピペされているのであれば、セミコロンが足りていません。
そこで
そのやり方をするのであれば、pCmdUI は使えません。(OnUpdateViewDragImages の引数を OnViewDragImages で使えないことはお分かり頂ければと思います)
// TODO: この位置に command update UI ハンドラ用のコードを追加してください
if(m_drawMode == 1){ pCmdUI->SetCheck(1) }// on
else pCmdUI->SetCheck(0) }// off
としたのですが 変数が定義されていないとなります。
まず この方向でよいでしょうか そして 定義として 共通には どうするのでしょうか?>
このやり方は設定するときに状態を反映する手法ですが、UPDATE_COMMAND_UI は表示されるときに状態を反映する手法です。
設定するときに状態を反映するのであれば、CheckMenuItem メソッド等を調べて下さい。
ところで、今回の回答から、C++ 関する知識・経験に不安を覚えます。
趣味で少しずつ触っているのであれば問題ないと思いますが、業務の一環であるのであれば(余計なお世話かもしれませんが)上司や研修担当者とよく報告・連絡・相談して下さい。
解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。- 回答としてマーク 高橋 春樹 2009年12月17日 8:45
-
その上で どのような分岐のコードを加えるのか おしえてください。
考えるのはご自身でお願いします。
考えたことを説明して頂いた上で、「この部分だけが分からない」とするところにアドバイスはできるかもしれません。
今の時点で抱いている感想としては、なぜ、CButton なのかが分かりません。どこかで状態を変更し、その状態を保持するだけなら BOOL で良いですよね。
何か理由があってそうしているのであれば、それを説明してもらえないと伝わりません。
あるいは 上の方法がだめなら
CMenu MFC CheckMenuItem 等をキーワードとして組み合わせて検索し、その結果を吟味し、必要に応じてさらに絞り込んだり、新たなキーワードで検索し直したりして調べて下さい。
CheckMenuItem の方法をもうすこし 具体的におしえていただけませんか
(自分である程度とっかかりを得られるようになって下さい)
正直なところ、フォーラムベースで事細かに教えることはできません。
23 日で連休も終わりますし、その後もこの調子だと、私は回答できませんのであしからずご了承下さい。
解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。- 回答としてマーク 高橋 春樹 2009年12月17日 8:45
-
\Kolam C++\KolamDesigner.cpp(125) : error C2664: 'DDX_Control' : 3 番目の引数を 'int' から 'class CWnd &' に変換できません。 (新しい機能 ; ヘルプを参照) nbsp; 'const' に対してではない参照は 非 lvalue へバインドできません。
そのエラーが出るのは当然です。
とエラーになりました。
なぜかは、DDX が何をするものかきちんと調べて下さい。
適当に書き換えたら通るなんてことはないので、コードの意味を少しずつでも理解して下さい。
解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。- 回答としてマーク 高橋 春樹 2009年12月17日 8:45
すべての返信
-
しかし、こちらが作った他の項目ではそれが入りません。どうしたら 交互にチェック印を入れられますか?
そのように実装しなければなりません。
Visual C++ 6.0 でも OnUpdateUIState か何かでメニューの状態を更新するためのハンドラを追加できたはずです。このハンドラの中で、独自の要素を表示している・していないを判定し、メニューアイテムの状態を更新することができるはずです。
(申し訳ありませんが、Visual C++ 6.0 での追試はしていません。)
解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。- 回答としてマーク 高橋 春樹 2009年12月17日 8:45
-
そのハンドらをどこにいれるのでしょうか?該当するPopUpmenu のClasswizardを開いて メッセジーをみたのでsが
メインの PC には Visual C++ 6.0 が入っていませんでしたので、サブ PC にて確認しました。
みあたりません。みどころがわるいのかもしれません。
レベルを落として 教えていただけませんでしょうかおねがいします。
ClassWizard の メニュー ID に対応するメッセージとして UPDATE_COMMAND_UI に対するハンドラを追加して下さい。
検索してみたところ、こちらのページが近いイメージでしょうか。
http://www.geocities.jp/tweedamp2004/vc/vc4_3.html
チェックを ON にすべきか、OFF にすべきかは自分で何らかのメンバー変数を使う等して条件分岐をする必要があります。
解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。- 回答としてマーク 高橋 春樹 2009年12月17日 8:45
-
コード編集で これが表示されて 参考のURLの内容をこぴーしましたvoid CAboutDlg::OnUpdateViewDrawImages(CCmdUI* pCmdUI){// TODO: この位置に command update UI ハンドラ用のコードを追加してくださいpCmdUI->SetCheck(1) // on <-コピしたものpCmdUI->SetCheck(0) // off <-コピしたもの}このままでは 2行目で構文エラになりました。言われるように If () then else 文が必要でしょうか?void CChildView::OnViewDrawImages() // alternate to change drawMode of edgeChain{// TODO: この位置にコマンド ハンドラ用のコードを追加してくださいm_drawMode = 1 -m_drawMode; //ToggleSwitch to 0: draw KoMaTile, 1: edgeChainm_drawImages = TRUE;Invalidate();}があるのでそこで// TODO: この位置に command update UI ハンドラ用のコードを追加してくださいif(m_drawMode == 1){ pCmdUI->SetCheck(1) }// onelse { pCmdUI->SetCheck(0) }// offとしたのですが 変数が定義されていないとなります。まず この方向でよいでしょうか そして 定義として 共通には どうするのでしょうか?>
-
void CAboutDlg::OnUpdateViewDrawImages(CCmdUI* pCmdUI) {
構文エラーは構文エラーです。
// TODO: この位置に command update UI ハンドラ用のコードを追加してください
pCmdUI->SetCheck(1) // on <-コピしたもの
pCmdUI->SetCheck(0) // off <-コピしたもの
}
このままでは 2行目で構文エラになりました。言われるように If () then else 文が必要でしょうか?
if 制御構造を入れる・入れないとは全く関係ありません。
本当に上記のままコピペされているのであれば、セミコロンが足りていません。
そこで
そのやり方をするのであれば、pCmdUI は使えません。(OnUpdateViewDragImages の引数を OnViewDragImages で使えないことはお分かり頂ければと思います)
// TODO: この位置に command update UI ハンドラ用のコードを追加してください
if(m_drawMode == 1){ pCmdUI->SetCheck(1) }// on
else pCmdUI->SetCheck(0) }// off
としたのですが 変数が定義されていないとなります。
まず この方向でよいでしょうか そして 定義として 共通には どうするのでしょうか?>
このやり方は設定するときに状態を反映する手法ですが、UPDATE_COMMAND_UI は表示されるときに状態を反映する手法です。
設定するときに状態を反映するのであれば、CheckMenuItem メソッド等を調べて下さい。
ところで、今回の回答から、C++ 関する知識・経験に不安を覚えます。
趣味で少しずつ触っているのであれば問題ないと思いますが、業務の一環であるのであれば(余計なお世話かもしれませんが)上司や研修担当者とよく報告・連絡・相談して下さい。
解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。- 回答としてマーク 高橋 春樹 2009年12月17日 8:45
-
はい 知識不足です。と言って 相談などできる相手がいないので こちらを頼っていますので ぜひ よろしくおねがいします。> ClassWizard の メニュー ID に対応するメッセージとして UPDATE_COMMAND_UI に対するハンドラを追加して下さい。検索してみたところ、こちらのページが近いイメージでしょうか。コピ元は以下の如くでしたので セミコロンの欠落を見失いました。void CTEST00SDIView::OnUpdateMenu1(CCmdUI* pCmdUI){pCmdUI->SetCheck(1) // onpCmdUI->SetCheck(0) // off}セミコロンをつけて コンパイラは通りました。さて>チェックを ON にすべきか、OFF にすべきかは自分で何らかのメンバー変数を使う等して条件分岐をする必要があります。そこで m_Switchを追加しました。以下になりました// CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialog{public:CAboutDlg();// Dialog Data//{{AFX_DATA(CAboutDlg)enum { IDD = IDD_ABOUTBOX };CButton m_Switch; // for 4.0 menu のDrawMode や FudeModeのCheck印のため//}}AFX_DATA略void CAboutDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CAboutDlg)DDX_Control(pDX, IDOK, m_Switch); // for 4.0 menu のDrawMode や FudeModeのCheck印のため//}}AFX_DATA_MAP}その上で どのような分岐のコードを加えるのか おしえてください。あるいは 上の方法がだめならCheckMenuItem の方法をもうすこし 具体的におしえていただけませんか
-
その上で どのような分岐のコードを加えるのか おしえてください。
考えるのはご自身でお願いします。
考えたことを説明して頂いた上で、「この部分だけが分からない」とするところにアドバイスはできるかもしれません。
今の時点で抱いている感想としては、なぜ、CButton なのかが分かりません。どこかで状態を変更し、その状態を保持するだけなら BOOL で良いですよね。
何か理由があってそうしているのであれば、それを説明してもらえないと伝わりません。
あるいは 上の方法がだめなら
CMenu MFC CheckMenuItem 等をキーワードとして組み合わせて検索し、その結果を吟味し、必要に応じてさらに絞り込んだり、新たなキーワードで検索し直したりして調べて下さい。
CheckMenuItem の方法をもうすこし 具体的におしえていただけませんか
(自分である程度とっかかりを得られるようになって下さい)
正直なところ、フォーラムベースで事細かに教えることはできません。
23 日で連休も終わりますし、その後もこの調子だと、私は回答できませんのであしからずご了承下さい。
解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。- 回答としてマーク 高橋 春樹 2009年12月17日 8:45
-
>なぜ、CButton なのかが分かりません。その状態を保持するだけなら BOOL で良いですよね。BOOL m_Switch; // for 4.0 menu のDrawMode や FudeModeのCheck印のためとしたら\Kolam C++\KolamDesigner.cpp(125) : error C2664: 'DDX_Control' : 3 番目の引数を 'int' から 'class CWnd &' に変換できません。 (新しい機能 ; ヘルプを参照)'const' に対してではない参照は 非 lvalue へバインドできません。とエラーになりました。以下現状です。void CAboutDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CAboutDlg)DDX_Control(pDX, IDOK, m_Switch);// for 4.0 menu のDrawMode や FudeModeのCheck印のため//}}AFX_DATA_MAP}void CAboutDlg::OnUpdateViewDrawImages(CCmdUI* pCmdUI){// TODO: この位置に command update UI ハンドラ用のコードを追加してください//エラになるのではずし// if( m_Switch == 1) pCmdUI->SetCheck(1); // on// else pCmdUI->SetCheck(0); // off}void CAboutDlg::OnUpdateViewDrawFude(CCmdUI* pCmdUI){// TODO: この位置に command update UI ハンドラ用のコードを追加してください// if( m_Switch == 1) pCmdUI->SetCheck(1); // on// else pCmdUI->SetCheck(0); // off}
-
\Kolam C++\KolamDesigner.cpp(125) : error C2664: 'DDX_Control' : 3 番目の引数を 'int' から 'class CWnd &' に変換できません。 (新しい機能 ; ヘルプを参照) nbsp; 'const' に対してではない参照は 非 lvalue へバインドできません。
そのエラーが出るのは当然です。
とエラーになりました。
なぜかは、DDX が何をするものかきちんと調べて下さい。
適当に書き換えたら通るなんてことはないので、コードの意味を少しずつでも理解して下さい。
解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。- 回答としてマーク 高橋 春樹 2009年12月17日 8:45
-
フォーラムオペレーターの高橋春樹です。
Azuleanさん、いつもお世話になっております。
沢山のアドバイスを投稿して頂き、ありがとうございました。Shonan Hannyaさん、こんにちは。
MSDNフォーラムのご利用ありがとうございます。Azuleanさんからアドバイスを頂いたと思うのですが、その後如何でしょうか?
今回Azuleanさんから投稿が、有用なアドバイスだと思いましたので、
勝手ながら、回答マークを付けさせて頂きました。
もし、何かしら疑問点がありましたら、詳しい状況をお伝えして頂ければと思います。今後ともMSDNフォーラムをよろしくお願いします(^_^)
マイクロソフト株式会社 フォーラム オペレーター 高橋春樹