ドナドナされるプログラマのメモ

Windows用アプリのプログラミングメモ

ダイアログバー上のエディットボックスから文字列を取得する方法

ダイアログバー上のエディットボックスから文字列を取得するのにちょっと苦労したのでメモ。

問題の背景

ダイアログを作る場合、通常はCDialog等を継承した、そのダイアログ固有のクラスを作成する。しかしMicrosoft曰く、CDialogBarは通常固有のクラスを作成しないらしい。これは、ダイアログバーはメインウィンドウの一部で、各コントロールからのメッセージはメインウィンドウのウィンドウプロシージャで処理するという設計だからだろう。このため、メッセージハンドラはCMainFrameに書く必要がある。*1

問題

しかし、固有のクラスを作らなかった場合、メッセージハンドラにてダイアログバー上のエディットボックスにはどうやってアクセスすればよいのだろうか?単純にCMainFrameからGetDlgItemText(ID_DlgBar_Edit)を呼び出しても失敗するし、固有のクラスを作っても上手く行かない。

解決方法

実は答えは単純で、CMainFrame上のメッセージハンドラから、ダイアログバーのオブジェクト(デフォルトだとm_wndDlgBarだと思う)に対しGetDlgItemText(ID_DlgBar_Edit)すればよい。

m_wndDlgBar.GetDlgItemText(ID_DlgBar_Edit, str);

その他の操作をしたい場合は、同様にGetDlgItem()すればよい。

*1:なお、リソースエディタはこの仕様に非対応なため、メッセージハンドラは手動で追加する必要があるようだ。