#pragma twice

KAB-studio > プログラミング > #pragma twice > 067 Version 5.02 リストボックスを使おう

#pragma twice 067 Version 5.02 リストボックスを使おう

前のページへ 表紙・目次へ 次のページへ

 Version 5.02
リストボックスを使おう

じゃ、今回はリストボックスを簡単に使ってみましょう
おー!!
さて、どうすればいいと思う?
分かんない
……
……
じゃーとりあえず方針。【表示】ボタンを押すと、テキトーな文字がリス
トボックスに表示されるようにしましょう
ってゆーか、リストボックスってどんなのだっけ。フォルダみたいなの?
ううん、ただ単語を縦にずらっと並べるの
なんか単純
だって最初の練習用だもの。いきなりすごいのにしたら
難しいわけねー
じゃ、まずは【表示】ボタンを押したときのハンドラ関数を作って
ボタンのだから、テストアプリ作ったときのと同じ方法でいいんだよね
そう。詳しくは Ver 4.01 ( No.051 )を見てくださいってことで
イベントハンドラとかって前にかなーり色々したよね
ちょっと忘れちゃった?
ちょっと
んーと、何かが起きること、たとえばボタンが押されたりとかそーゆーの
をイベントって言います
で、イベントが起きた時に呼ばれる関数がイベントハンドラってゆーのよ

そうそう
で、ボタンのイベントハンドラは、右クリックメニューの【イベント】を
選んで、そのまんま【追加と編集】選べばいいんだよね
そうそう。そうすれば関数ができるから。どんな関数?
どんなって?
復習復習
あ、えーっと……

void CFileTestDlg::OnBtnShow() 
{
    // TODO: この位置に(以下略)
}

 void CFileTestDlg::OnBtnShow() ってなってるから、まず引数がなくて、
戻り値が void だからなし
そうそう
あと、えーっと、 CFileTestDlg がクラス名で、 OnBtnShow がそのメン
バ関数なんだよね
そうそう。結構憶えてるね
うん、なんとか
ま、この辺はまた後でしっかり見てく予定。さてボタンのイベントハンド
ラを作りました。実際にこのハンドラが呼ばれてるか確認するには?
んっと、ブレークポイント付ければ分かるんじゃない? あと TRACE() 
付けるとか
そうだね。まだイベントハンドラ作り慣れてないうちはチェックした方が
いいかもね
あたしはテストアプリ作り慣れてるもん
じゃあ飛ばして、このボタンを押したらリストボックスに文字を表示させ
たいわけだけど……こんなパターン、憶えてない?
計算機!! 【=】ボタン押したらエディットボックスに数字入ってるっ
てゆーの
そう! あれに似た方法で行きます。あのときはまずどうしたっけ
 Ver 3.10 ( No.035 )によると、まずクラスウィザードってのを……
 メニューの【表示】−【ClassWizard】を選ぶ。
これ、懐かしいなー
クラスウィザードは、クラスの機能とウィンドウズの機能を結びつけてく
れる便利なもの
? そうだっけ
今初めて言ったかも。【メンバ変数】のページを見て
ほいっと。うん、ボタンとかリストボックスとかのIDが並んでるね
リストボックスのID【IDC_LST_DATA】をダブルクリックして
ダブルクリック! ダイアログが出た
でまず一番上の【メンバ変数】を【m_cDataLstBox】に。真ん中の【カテ
ゴリ】を【コントロール】に。んで最後の【変数のタイプ】は、【CListBox】

あれ? 確か計算機の時は、カテゴリが【値】だったよね
そうそう。【値】も【コントロール】も、コントロールを変数として見な
す、っていう点は同じ
この例だと、ダイアログに貼っつけたリストボックスが m_cDataLstBox 
って変数と同じになるってことだよね
で、リストボックスっていっぱい文字列が入るでしょ。そうなると、エ
ディットボックスみたいには操作できないわけ
どして?
 int i に何種類も数字入れられる?
ううん、ひとつ。そっか、リストボックスにはいっぱい入ってるから、一
個の変数って見なせないんだ
そう。エディットボックスはデータがひとつしか入らない、そういう場合
には【値】ってして、ひとつの変数って見なすことができます
で、リストボックスにはいっぱい入ってるから……どうして【コントロー
ル】?
【コントロール】の場合には、コントロールを操作することができるから
操作?
たとえば〈2番目の値を取得〉とかね
あ、なるほど! 【コントロール】は細かい操作ができるから、いっぱい
データが入っててもうまくできるんだ
そういうこと。実際、エディットボックスやチェックボックスとか以外は
ほとんど【コントロール】にして、操作してくことになるから
ってことはつまり、そーゆーコントロールを使うには、その操作の方法が
分かればOKってことよね
そういうこと! んじゃ【OK】押して
作成! で、どうなったんだっけ
今ので、リストボックスを m_cDataLstBox ってメンバ変数から操作でき
るようになりました
メンバ変数って、クラスの中の変数だよね。でもどのクラス?
今のクラスウィザードのページに書いてあるでしょ
あ、【クラス名】 CFileTestDlg だって
じゃあこのクラスの中から、 m_cDataLstBox を作ってる場所を探しましょ
う!
げげ。えーっと、 Ver 3.18 ( No. 043 )を見ると、メンバ変数はクラ
スの本体の方にあって、その本体はヘッダーファイルにあるから…… C 取
って .h 付けて、 FileTestDlg.h ってファイルにあるのかな
そうそう。見てみ
じゃ、ファイルビューから

class CFileTestDlg : public CDialog
{
// 略
    CListBox    m_cDataLstBox;
// 略
};

これが、 m_cDataLstBox を作ってるとこだよね
そうそう。こういうメンバ変数は、同じクラスのどのメンバ関数からも呼
び出すことができます
それって、この前教わった、ローカルな変数と違うってこと?
そう。メンバ変数はローカルな変数と、アクセスできる範囲とか寿命とか
全然違うから。その辺はおいおいだね
ほいほい。で、どうするの?
どうすればいいと思う? 最初の方針はどうだっけ
【表示】ボタンを押したら、だよね。あ、さっき作ったハンドラの
CFileTestDlg::OnBtnShow() もこのクラスのメンバ関数なんだ
そう、同じダイアログの操作は、同じクラス、つまり
 CFileTestDlg の中でってことになるんだ。だから【表示】のハンドラも、
リストボックスのメンバ変数も、 CFileTestDlg が持ってるんだ
そういうこと。で?
えーっと、さっき水希ちゃんが〈 m_cDataLstBox を操作して、リストボ
ックスを操作できる〉みたいに言ってたんだから……

void CFileTestDlg::OnBtnShow() 
{
    m_cDataLstBox   // ……
}

……で、これのメンバ関数を呼べばいいんだろうけど……
このメンバ変数の型は?
 CListBox って書いてあるね。さっき、クラスウィザードで作るときに選
んだのだね
 CListBox は MFC のクラスのひとつ。リストボックスを操作するための
クラス
へー、そういうのが用意されてるんだ
ってことは?
 MSDN っ! えっと、 CListBox の上にカーソル置いて、 F1キー! 
うお、色々出た
どれ選ぶ?
えーっと、確か〈日本語っぽいの〉から選ぶんだよね。で、 
【CListBox::CListBox】ってのは分かんないけど、【CListBox クラスメン
バ】はたぶんメンバ変数とかメンバ関数がいっぱい見られるんだね。で、た
だの【CListBox】は、 CListBox の説明が載ってるっぽいから、これ!
そのページに CListBox の説明が載ってるから
……だけどチンプンカンプンなんですけど〜
そうかもしんない……。まーこの辺は、 MFC 解説書の方が詳しく書いて
あるかもね。それか、使いまくって習うより慣れろ、か
それ! じゃ、クラスメンバのページっと。ううっ、いっぱいある……
今回は、とりあえず適当な文字列を追加するのが目的だから
どれかなどれかな……あ、 AddString ってそれっぽくない?
当たり! んじゃ使ってみて
えっと、メンバ関数だから……

    m_cDataLstBox.AddString( );

引数が LPCTSTR ってなってるけど?
前にちょっと触れたけど、これが出てきたら "あいうえお" みたいな文字
列を渡せるから
あ、じゃあそんな感じに

void CFileTestDlg::OnBtnShow() 
{
    m_cDataLstBox.AddString( "あたし" );
}

じゃ、ビルドして実行!! ……なにも起きないよ?
【表示】ボタン押さなきゃ
あ、そうそう。ぼちっと、リストボックスに【あたし】って出た!
このメンバ関数を立て続けに呼べば、どんどんリストボックスに追加でき
るから
こんな感じ?

void CFileTestDlg::OnBtnShow() 
{
    m_cDataLstBox.AddString( "あたし" );
    m_cDataLstBox.AddString( "水希ちゃん" );
    m_cDataLstBox.AddString( "こんな感じ?" );
}

あ、ちゃんとリストボックスに3つ出た!
これが、リストボックスを操作する、ってこと。まとめると?
ダイアログにリストボックス貼り付けたら、クラスウィザードで CListBox
型のメンバ変数にくっつけて、あとはそのメンバ変数で操作!
基本はそんなところ、だね

/*
    Preview Next Story!
*/
なんだ、こんなのかんたんじゃん!
 LPCTSTR ってなーんだ
分かんない
その辺をしっかり潰していきましょう
というわけで次回
< Version 5.03 配列とポインタ >
につづく!
またつまんなくなりそう……
できることが増えれば、楽しくなるよ?
 
del.icio.us 登録する
Yahoo!ブックマーク 詳細を表示 users
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
RSSに登録
del.icio.us 登録する
Yahoo!ブックマーク 詳細を表示 users
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
 
このページは、Visual C++ 6.0を用いた C++ 言語プログラミングの解説を行う#pragma twiceの一コンテンツです。
詳しい説明は#pragma twiceのトップページをご覧ください。