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から編集する方法はないのだろうか?
「日記・コラム・つぶやき」カテゴリの記事
- 「グロリア・スコット号」の訳(2011.09.18)
- (2010.06.11)
- ぐったり中(2010.03.15)
- ThinkPadがこの先生きのこるためには(2010.03.15)
この記事へのコメントは終了しました。
コメント