メニューのチェックマークを新規作成で消した後、チェックマークがつかない – プログラミング – Home

メニューのチェックマークを新規作成で消...
 
通知
すべてクリア

メニューのチェックマークを新規作成で消した後、チェックマークがつかない


はにほ
 はにほ
(@はにほ)
ゲスト
結合: 22年前
投稿: 7
Topic starter  

SDIでメニュー欄に「チェック」を付けると文字を表示させるものを作成しました。
「チェック」をつけ、画面に文字を表示した後に新規作成ボタンを押すと、画面はクリア
され、メニューのチェックマークも消えます。その後、チェックマークがメニューに付か
なくなってしまいました・・。なぜ?

UPDATE_COMMAND_UI を使い新規作成の場合はチェックマークを消します。

void CVcmenu3View::OnUpdateFileNew(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(flgDog=0);
pCmdUI->SetCheck(flgCat=0);
}

このように新規作成した後、メニューバーにチェックマークが付かなくなりました・・。
チェックマークは付かないものの、文字は表示します・・。どうやったら、新規作成ボタ
ンを押した後もチェックマークがつくのでしょうか?


引用解決済
トピックタグ
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
 

pCmdUI->SetCheck(flgDog==0);
の間違いですか?

pCmdUI->SetCheck(flgDog=0);
これだと、SetCheck(0)ということなのでチェックはつきません。
引数を0以外にすれば、チェックできるはずです。


返信引用
はにほ
 はにほ
(@はにほ)
ゲスト
結合: 22年前
投稿: 7
Topic starter  

ごめんなさい。質問の書き方が悪かったかもしれません。

初期化の際に下記のコマンドを使用しました。
void CVcmenu3View::OnUpdateFileNew(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(flgDog=0);

これを行うと新規作成を行った際に文字表示がクリアされると同時にチェックもクリアさ
れます。問題はこの後です。この後、新たにDogやCatを選ぶと文字は表示されるのです
が、メニューにチェックマークが表示されないのです。


返信引用
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
 

> これを行うと新規作成を行った際に文字表示がクリアされると同時にチェックもクリアさ
> れます。問題はこの後です。この後、新たにDogやCatを選ぶと文字は表示されるのです
> が、メニューにチェックマークが表示されないのです。

あなたのソースは常にflgDog(とflgCat)をクリアし、
常にチェックを消すようになっています。

この関数が呼ばれるタイミングはわかりますか?


返信引用
はにほ
 はにほ
(@はにほ)
ゲスト
結合: 22年前
投稿: 7
Topic starter  

呼ばれるタイミング・・・?
私あまりにも初心者で、どう説明して良いのかわからないので、コードをおきますね。
申し訳ありません。

void CVcmenu3View::OnMenuitemDog()
{
// TODO: Add your command handler code here
CClientDC mydc(this);
if(flgDog==0)
{
mydc. TextOut(100,200, );
mydc. TextOut(100,100,Won Won);
flgCat=0;
}
else
mydc. TextOut(100,100, );
flgDog = !flgDog;
}

void CVcmenu3View::OnMenuitemCat()
{
CClientDC mydc(this);
if(flgCat==0)
{
mydc. TextOut(100,100, );
mydc. TextOut(100,200,Miao Miao);
flgDog=0;
}
else
mydc. TextOut(100,200, );
flgCat = !flgCat;
}

void CVcmenu3View::OnUpdateMenuitemDog(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(flgDog);

}

void CVcmenu3View::OnUpdateMenuitemCat(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(flgCat);
}

void CVcmenu3View::OnUpdateFileNew(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(flgDog=0);
pCmdUI->SetCheck(flgCat=0);
}

わかりづらくて、ごめんなさい・・。


返信引用
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
 

OnUpdateFileNewは、クラスウィザードでUPDATE_COMMAND_UIを処理する関数を作成させたの
ですよね?
この関数に TRACE(OnUpdateFileNew\n); を追加して、いつ呼ばれているか確認してくださ
い。
プルダウンが表示するたびに呼ばれていると思います。
もしかして、初期化の処理のつもりで書いているなら、書く場所が間違ってます。

次に、この関数が呼ばれたら何が起こるかですが、先ほども書いたように、
flgDogとflgCatに0を代入して、(defaultなら)メニューの「新規作成」を無効にします。
はにほさんの意図とは違うのではありませんか?

とにかく、関数内にTRACEを追加して確認してください。
(TRACEの使い方がわからないならヘルプを見てね)


返信引用
はにほ
 はにほ
(@はにほ)
ゲスト
結合: 22年前
投稿: 7
Topic starter  

初期化処理のつもりで書いてました。
ってことは書く場所が違うってことですね。
どこに書けばよいのでしょうか?

私の会社、メモリーをケチってるのでHELPが入ってないんですよ・・。
TRACEの使い方は今探してます。はぁ・・。


返信引用
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
 

SDIなら、CHogeDocument::OnNewDocument()ですかね。
flgDog=0;flgCat=0;だけで結構です。

ヘルプもなしに開発するなど無謀もいいとこ。
ヘルプすら読まずに質問するのも問題です。(言い訳も御詫びも不要です)

http://www.microsoft.com/japan/msdn/library/default.asp


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました