最近のトラックバック

J League Division 2 Matchday 49

  • Img_0102
    90分のユアスタ優勝劇場 フェアで力強い,このチームのサポーターである喜び。

« 雑多 | トップページ | 続 雑多 »

WindowsでGUIなプログラミングの道(まだまだ最初の一歩)

時間をみつけてお勉強。ふだんBSD上でコンソールプログラミングしかしない自分がどのようにWindowsでGUIなプログラミングができるか

環境Visual Studio .net Version 2003

CDialogクラスから派生したクラスで,そのダイアログウィンドウ上で,Enterキーを押すとIDOKが返ってきて,その際にCDialog::OnOK()が実行されてダイアログが終了してしまう。でも,メソッドOnOKをオーバライドしてCDialog::OnOK()が実行されないようにしても,期待した動作にならなかった。

で,CDialogクラスから派生したクラスのソースを見ると,こんな箇所があった。

BEGIN_MESSAGE_MAP(ChildDialog, CDialog)
                                ON_BN_CLICKED(IDC_SPECIAL, OnBnClickedSpecial)
                                ON_BN_CLICKED(IDOK, OnBnClickedOk)
                                ON_BN_CLICKED(IDC_OK, OnBnClickedOk)
END_MESSAGE_MAP()

マクロ BEGIN_MESSAGE_MAP 〜 END_MESSAGE_MAP の内容はまだちゃんと読んでいないが,おそらくダイアログ上でのイベントの返り値にどんなメソッドをわりあてているところだろう。

ON_BN_CLICKED(IDOK, OnBnClickedOk)をコメントアウトしたら,Enterキーを押してもダイアログが閉じられることはなくなった。

BEGIN_MESSAGE_MAP(ChildDialog, CDialog)
                                ON_BN_CLICKED(IDC_SPECIAL, OnBnClickedSpecial)
                                //ON_BN_CLICKED(IDOK, OnBnClickedOk)
                                ON_BN_CLICKED(IDC_OK, OnBnClickedOk)
END_MESSAGE_MAP()

ON_BN_CLICKED(IDOK, OnOK)とした方がより正しい気がするので,そうした。また,直接子クラスのメソッドを指定した。

BEGIN_MESSAGE_MAP(ChildDialog, CDialog)
                                ON_BN_CLICKED(IDC_SPECIAL, OnBnClickedSpecial)
                                ON_BN_CLICKED(IDOK, ChildDialog::OnOK)
                                ON_BN_CLICKED(IDC_OK, ChildDialog::OnBnClickedOk)
END_MESSAGE_MAP()

このような操作を直接ソースを編集するのではなく,IDEから編集する方法はないのだろうか?

« 雑多 | トップページ | 続 雑多 »

日記・コラム・つぶやき」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/509/14565811

この記事へのトラックバック一覧です: WindowsでGUIなプログラミングの道(まだまだ最初の一歩):

« 雑多 | トップページ | 続 雑多 »

2013年12月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
無料ブログはココログ