CButtonは、ボタンコントロールのクラス・・・。
今回は、ボタンを2つ配置して、CButtonクラスのオブジェクトポインタを使って、ボタンを操作する・・・。
ここからは、MFCアプリケーションウィザードを使ってプロジェクトを作る・・・。
[VisualC++]-[MFC]の[MFCアプリケーション]でCButtonプロジェクト・・・。
しばらくは[ダイアログベース]で進める・・・。[スタティックライブラリでMFCを使用]にしておく・・・。
ここは[システムメニュー]を外して、何もない状態に・・・。
ここもActiveXなどを外して、無しの状態に・・・。
"CC~"ってクラス名は不自然なので、
CButtonAppの、
CButtonDlgと、クラス名を変更・・・。
このようにCButtonプロジェクトができて、ソースファイルも自動で追加される・・・。
まず、アプリケーションクラスは、CButtonAppでソースはCButton.hとCButton.cppにある・・・。(ちょっとわかりにくかったか・・・。)
CWinAppの派生で、コンストラクタとInitInstanceぐらい・・・。
CButton.cppのInitInstanceは、
"CButton"をレジストリ登録したら、CButtonDlgのインスタンスdlgをm_pMainWndとする・・・。
DoModalでメインウィンドウとなるダイアログが表示され、このダイアログが消えるまでアプリケーションは実行中となる・・・。
ダイアログクラスCButtonDlgのCButtonDlg.hは、
CDialog派生・・・。
CButtonDlg.cppは、
ごちゃごちゃあるけど、この辺はダイアログの体裁を整えるもので、今回はあまり関係ない・・・。
Button1, Button2を配置する・・・。
[リソースビュー]で[ツールボックス]から[Button]を選択・・・。
Button1をこんな感じで貼る・・・。
ハンドラは、
プロパティで雷アイコンを選択し、BN_CLICKEDの右のコンボボックスを押すと、このようになるのでOnBnClickedButton1をクリック・・・。
するとハンドラが生成されて飛ぶ・・・。
(配置したButton上でダブルクリックしてもハンドラが生成されて飛ぶ・・・。そちらのほうが楽・・・。)
void CButtonDlg::OnBnClickedButton1() { // TODO: ここにコントロール通知ハンドラ コードを追加します。 }
ここにButton1がクリックされた時の処理を書く・・・。
同様にButton2も、
こう貼って、
これでハンドラに飛ぶ・・・。
void CButtonDlg::OnBnClickedButton2() { // TODO: ここにコントロール通知ハンドラ コードを追加します。 }
このとき、
ちゃんとメッセージマップもある・・・。
そしてできたダイアログのリソースはCButton.rcにある・・・。
こちらもいろいろあるけど、重要なのはダイアログの部分だけ・・・。
DIALOGEXになってるけど、DIALOGの拡張版・・・。
さて、それぞれのハンドラに処理を書いていく・・・。
Button1は、
CWnd::GetDlgItemでButton1(IDC_BUTTON1), Button2(IDC_BUTTON2)のオブジェクトポインタを取得・・・。
CWnd::SetWindowTextでボタン名を変更する・・・。
これだけでもボタンの変化を見られるが、CButtonクラスのメソッドではないので、
CButton::GetButtonStyleでボタンのスタイル(UINTの値)を取得する・・・。
で、これは実際やってみるとわかるが、ボタンというのは最初はBS_PUSHBUTTONスタイルなのだが、押すとそのボタンをデフォルト(BS_DEFPUSHBUTTONスタイル)にしてしまう・・・。
そのため、2つのどちらのスタイルになっていてもメッセージボックスを出すようにしている・・・。
2つのボタンがある・・・。
Button1を押すと、
2つとも、ボタン名が"Clicked!(1)"になった・・・。
そして、まずBS_DEFPUSHBUTTONが出てきた・・・。
Button1は押されたのでスタイルがBS_DEFPUSHBUTTONになったということ・・・。
そのあと、
Button2は、BS_PUSHBUTTONスタイルであるとわかる・・・。
次に、右のButton2(という名前だったもの)を押すと、
2つともClicked!(2)になり、
Button1はBS_PUSHBUTTONスタイルに戻り、
Button2は、押されたのでBS_DEFPUSHBUTTONスタイルに変わったことがわかる・・・。
Sample/CButton.h at master · bg1bgst333/Sample · GitHub
Sample/CButton.cpp at master · bg1bgst333/Sample · GitHub
Sample/CButtonDlg.h at master · bg1bgst333/Sample · GitHub
Sample/CButtonDlg.cpp at master · bg1bgst333/Sample · GitHub
Sample/resource.h at master · bg1bgst333/Sample · GitHub
Sample/CButton.rc at master · bg1bgst333/Sample · GitHub
Sample/stdafx.h at master · bg1bgst333/Sample · GitHub
Sample/stdafx.cpp at master · bg1bgst333/Sample · GitHub