Version 3.10
数字をやりとりしよう!
『計算機完成するってホント!?』
「いきなりだなー、ホントだって」
『料理番組みたいにいきなり〈はいこちらに完成品がありますので〉なんて
いうのはナシよ』
「なんで料理番組……ま、意外と簡単にできちゃうから大丈夫」
『じゃーなんで今まで完成しなかったの?』
「う”……じゃあさっそくとりかかりましょう」
『ぶーぶー』
「はい、ほら。まずダイアログエディタを開いて」
『は〜い。ワークスペース開いて、【ResourceView】選んで、……どっちの
ダイアログ?』
「【IDD_CALC_DIALOG】の方。もひとつの【IDD_ABOUTBOX】は〈バージョン
情報〉用のだからね」
『そう言えばそうね。で、ダブルクリック……はい、ダイアログが出たよ。
いつも使ってる【=】ボタンのあるのだね』
「このダイアログを計算機っぽくします」
『計算機っぽく! ってことは、1とか2とか+とかXとか』
「ってすごいのは作れないから、ただの足し算だけ」
『え〜?』
「無茶言わないの! んじゃまずは、エディットボックスを貼り付けようか」
『エディットボックス?』
「ここにツールバーがあるでしょ」
マウスカーソルがぐるぐる回る。その下にあるツールバーには、矢印カー
ソルやサボテンの絵、【Aa】や【ab】、【x】などが描かれたボタンが並ん
でいる。
「これを〈コモンコントロール〉っていいます」
『こもんって』
「ボケ不可。 common は英語で〈共用の〉って意味。コントロールはボタン
とかの〈操作するもの〉。これは〈コントローラー〉の方が分かりやすいか
もね」
『??』
「あ、えーとねー、ダイアログに貼り付いているボタンとかのことを、コン
トロールって言います」
『あ、それが、ダイアログを操作するコントローラー、ってことね』
「そうそう。で、ウィンドウズに初めから備わっているコントロールのこと
を〈コモンコントロール〉って言うわけ」
『共用のコントローラー……そう言えばアイコンとかウィンドウとかって
ウィンドウズのものって言ってたけど、それと関係あんの?』
「あるわけだね。こういったコントロールも、ウィンドウズに〈使わせても
らう〉って考え方かな」
『……もひとつ質問! コモンじゃないコントロールってあんの?』
「あるよ。たとえば〈文化オリエント〉って会社じゃいろんなコントロール
を売ってるから、必要ならそういうのを使えるけど、もちろん〈コモン〉
じゃないから」
『買わなきゃ使えない、ってことね。広告見ると、結構高いね……』
「ま、そんだけ〈コントロールを作るのは大変〉ってことかな。ウィンドウ
ズにそういうのが初めから揃ってるっていうことが、結構プログラマーにと
っては大きいかも」
『普通揃ってるんじゃないの?』
「他のOSだとそうも言えなくてねー。まぁそれはともかく〈エディット
ボックス〉はそのコモンコントロールのひとつで、文字を入力するためのコ
ントロール」
『そーゆーのってよく見るよね』
「そのよく見るのなの。コモンコントロールのあるツールバーの中に【ab】
っていうのがあるでしょ」
『これ? あ、カーソル持ってったら下に〈エディットボックス〉って出た』
「これをダイアログエディタのダイアログにドラッグ&ドロップして」
『ドロップっと。あ、白い四角ができた! ホント、よく見るのだね』
「つまり他のアプリのも、これと同じものを使ってるってわけ」
『それが〈コモン〉ってことねー。で?』
「このエディットボックスの上で右クリックメニュー出して【プロパティ】
選んで」
『プロパティっと。ダイアログ出たよ』
「この【一般】のページの【ID】に IDC_E_ANS って書き込んで」
『なに、このあいでぃーって』
「まえーに、一度話したけどね。Ver 1.5( No.008 )を読み返してみて」
『ホントだ、前にダイアログのIDって見たんだね。つまりこのエディット
コントロールの名前ってこと?』
「そういうこと。 IDC_E_ANS の ID は IDナンバー、C は コントロール、
E は エディットボックス、 ANS は、このエディットボックスを〈答〉用に
したいから」
『ふーん、そういう規則なんだ』
「別にテキトーでいいんだけどね」
『え、そーなの?』
「そーなの。僕がいつも使ってる命名方法がこうってだけだけどね。ただ、
ぱっと見で分かる方がいいでしょ?」
『それって、int 型変数の前に i を付ける、とかと同じこと?』
「そういうこと! 分かってきたねー」
『まー、もう4分の3年勉強してきてるわけだしー』
「年数で言うと〈そんだけやっててまだこんだけ?〉とか言われるかも」
『まぁ、のんびりだもんねー』
「そーそー。でID書き換えたらダイアログ閉じてビルドして実行!」
『閉じてビルドして実行! さっきのエディットボックス、ちゃんと貼り付
いてるね。ちゃんと文字とかも書き込めるし』
「うんうん」
『……で、どうするの? これだけじゃどーしよーもないじゃない』
「そう、そこからが問題。エディットボックスはあくまで〈ウィンドウズの
もの〉だから、プログラムから文字列とか数字を書いたり読んだりするため
には」
『APIとかハンドルを使わなきゃダメってこと?』
「基本的にはね。でもこれが面倒なんだわ」
『じゃ、それが簡単にできるラッパークラスがMFCにあるんだ!』
「まぁ、一応」
『なにそのキレの悪い答は』
「確かにMFCは〈簡単にコントロールとやりとりする〉方法を持ってるん
だけど、内部システムがちょっと複雑なんだよね」
『ラッパークラスみたいな感じじゃないってこと?』
「そういうこと。だからここは、仕組みは置いといて、とりあえずその〈簡
単なのの使い方〉を解説します」
『今までだって結局そーだったじゃん』
「う、確かにそうかも。でもさ、使い方の解説だけだと〈他の本と同じ〉と
か言われそうだし」
『他の本に書いてあることがタダで読めるってだけでいーんじゃないの?』
「ぅ”……」
『あら、いじけちゃった』
「確かに最近人気落ちてるような気がするし、他のメールマガジンに負けて
るような気がするし、やりがいってなんなんだろう……」
『うざいわねー、水希ちゃんのやりたいようにやりゃいーでしょ!!』
「そりゃそうだけど……」
『まぁ、なんだかんだ言っても、あたしは結構満足してるんだし……」
『か、かみちゃぁん』
『で!? で、どーすればいーの……』
「あ、えっとねぇ、とりあえず Calc ダイアログ閉じて」
『閉じたよ。そしたら?』
「そしたらメニューの【表示】−【ClassWizard】選んで」
『くらすうぃざーどっと、あ、そーゆーダイアログ出た』
「コントロールの操作にはクラスとの連携が不可欠。クラスウィザードは、
その連携のためのツール」
『ウィザードって〈魔法使い〉の?』
「そうそう。ま、プログラマーの中では〈凄い人〉って意味で使われてるけ
どね」
『すごいひと、かー』
「で、このダイアログの【メンバ変数】タブをクリックして」
『クリックっと』
「そしたら右上の【クラス名】を CCalcDlg にして」
『あ、下に色々出てきた』
【コントロールID】には……
IDC_B_EQUAL
IDC_E_ANS
IDCANCEL
IDOK
と表示されている。
『あ、IDC_E_ANS がある。あれ、確か IDC_B_EQUAL ってボタンのIDだよ
ね。……よく考えたらボタン作ったときにID書いてたんだね』
「Ver 2.0( No.011 )でね。でもあのときはIDの意味とか言わなかった
から」
『なんだ、こんときから〈使い方の〉解説しか……あ』
「ぅ”……」
『はいはいもういいから! そういえば IDCANCEL とかって?』
「まだ見てなかったけど、初めから貼り付いてる【キャンセル】ボタンと
【OK】ボタンのID」
『あ、なるほど』
「さて、メンバ変数って憶えてる?」
『憶えてるって、ついこの前じゃない教えてもらったの。クラスが持つ変数
だよね』
「そうそう。このクラスウィザードを使うと、コントロールとメンバ変数を
結びつけることができます」
『結びつける?』
「ま、これは実際に試した方が早いかも。 IDC_E_ANS をダブルクリックし
て」
『ダブルクリックっと。あ、ダイアログ出た』
「まず真ん中の【カテゴリ】を見て」
『【値】【Value】【コントロール】ってあるよ』
「【値】はコントロールを〈変数〉と見なすもの。今回はここに計算の答を
書き込むから、これにして」
『変えなくていいってことね。他のふたつは?』
「【Value】は難しいのだしそんな使わないからパス。【コントロール】は
結構重要。コントロールを操作したいときに選びます」
『操作って?』
「たとえば外から文字列をペーストできるようにしたり、ダブルクリック用
のイベントを追加したり」
『へー』
「MFCには CEdit ってエディットコントロール用のクラスがあるから、
その型のメンバ変数をこのクラスウィザードで関連づけたり……まぁ結構難
しいんだけどね」
『うん、チンプンカンプン』
「ま、それはまた今度ってことで、今度は一番下、【変数のタイプ】。これ
は〈数字を書き込む〉から int を選んで」
『int って int 型の?』
「そうそう。ここで選んだ型のメンバ変数を作ってくれるから。他にもいろ
んな型があるんだけど、まだ紹介してないしね」
『うん、これもチンプンカンプン』
「じゃ、最後は一番上の【メンバ変数】。これはメンバ変数名だから」
『ってことは int m_? みたいになるってこと?』
「そうそう。じゃあどういう変数名つければいいかな」
『あ、そういうのってなかったね。水希ちゃんがいつもしてる方法だと、
int m_iAns みたいな?』
「ま、そういうことかな。これも基本的に自由だけど」
『ぱっと見で分かるように、ね』
「そういうこと。そしたら【OK】押して、ダイアログ閉じて、同じく【OK】
押してクラスウィザードも閉じて」
『ハイ両方とも閉じて?』
「そしたらいつもの【=】ボタンを押したときのメンバ関数を」
void CCalcDlg::OnBEqual()
{
UpdateData( TRUE );
TRACE( "%d\n", m_iAns );
}
「って書き換えて」
『UpdateData() は初見だよね。TRACE() はアウトプットに数字表示するの、
m_iAns はさっき作ったの?』
「そ。ま、とりあえず試してみて」
『はーい。ビルドして実行……? 【=】押しても0がアウトプットに出て
くるだけだよ』
「あ、そうそう、さっき貼り付けたエディットボックスに数字書き込んでか
ら押してみて」
『はーい、123 って入れてから【=】っと、あ、アウトプットに 123 って
出てきた!』
「って感じに、エディットボックスの数字を、メンバ変数に入れることがで
きるわけです」
『……ねぇ、』
「ぎく……」
/*
Preview Next Story!
*/
『嘘つきウソツキうそつきぃ!!』
「ま、3ヶ月延びるのも1週延びるのも同じってことで」
『うおコイツ開き直るし』
「というわけで次回」
< Version 3.11 計算機完成!! >
『につづく!!』
「来週はちゃんと完成します!」
『ねー水希ちゃん、〈週間少年ジャンプ〉って知ってる?』