Visual C++ 学習日誌 No.6

1997年 9月07日
CD Player 開発再開

一時中断していた CD Player の開発を数日前から再開した。
今回は、リストボックスコントロールを使って、曲名を表示する場所を作る。

まずは、オンラインヘルプを読んで、自分が必要としているコントロールが何かを探すことから始めた
何せ、コントロールがたくさんあることはわかっていても、どれを使えばいいかよくわからないときている。
いろいろよく読んだ結果リストボックスを使うことにした。クラス名は CListBox
どうも、このクラスをそのまま使うよりも、派生クラスを使った方がいいらしい。
そこで、ClassWizardの「クラスの追加」のボタンを押し、「新規」を選ぶ、 ベースとなるクラスとして、CListBox を選択し、クラス名を CMusicTitleListBoxとした。
その後、コンストラクタを書き換え、クラスが構築されるのと同時に、リストボックスコントロールも構築されるようにする。
具体的には、Createメンバ関数をコンストラクタの中から呼び出した。
コントロールはそれ自体がチャイルドウインドウである。
だから、ウインドウスタイルをCreate関数の第一引数に設定しなければならない。
これも、オンラインヘルプとにらめっこしながら、一つ一つ引数を指定していく。WS_CHILDは当然として、リストボックス固有のスタイルも設定する。
親ウインドウのクラス(ここではビュークラス)へのポインタが必要だったので、コンストラクタの引数から渡すようにする。
そして、ビュークラスの中に、メンバ関数としてこのクラスのポインタを宣言した。

 CMusicTitleListBox* m_pMusicTitleListBox;

そして、ビュークラスのコンストラクタで念のため、このポインタをNULLに初期化する。
OnCreate関数の中で、

 m_pMusicTitleListBox = new CMusicTitleListBox(this);

と書いて、リストボックスコントロールを構築しようとした。が、実行しても出てこない。 なぜか知らないが、この時点ではまだウインドウの大きさが決まっていないらしく、 ウインドウの大きさからリストボックスの大きさを求めていた関係上、リストボックスの大きさがマイナスになってしまっていたらしい。
そこで、仕方なくm_pMusicTitleListBoxがNULLだった時にのみOnDraw関数(ウインドウの再描画関数)で、 リストボックスを構築するように変更した。今度は、問題なくリストボックスが表示された。

ここで、問題が起こった!
リストボックスの背景と文字色を変える方法がわからない!
またまた、オンラインヘルプとにらめっこ。本も2,3冊ひっぱてきてあちこち見てみる。
そのうち、オンラインヘルプの中に、例題として、コントロールの背景色の文字色を変えるというのがあった。
Windowsのメッセージの扱いがMFCの前のバージョンからどう変わったかがいろいろとかかれている。
どうも、コントロールから発生したメッセージは親ウインドウに送られるらしい。
そして、MFC 4.0 では、親ウインドウがそのメッセージを処理しないとき、それは「返送」されてきて、 コントロール側で処理できるらしい。
色を変えるには WM_CTLCOLOR というコントロールから親ウインドウに送られるメッセージの
返送メッセージである WM_CTLCOLOR_REFLECT を処理すればいいらしい。
ClassWizardには"=WM_CTLCOLOR"と表記されていた。早速このメッセージのハンドラをClassWizardを使って作成した。
その関数は次の通り
ちなみに、m_clrBkgnd, m_clrTextはCOLORREF型のメンバ変数で、コンストラクタで色のデータで初期化されている。
また、m_brBkgndは背景用のブラシで、やはりメンバ変数でコンストラクタで初期化されている。

HBRUSH CMusicTitleListBox::CtlColor(CDC* pDC, UINT nCtlColor)
{
	pDC->SetBkColor(m_clrBkgnd);
	pDC->SetTextColor(m_clrText);

	return m_brBkgnd;
}
これで、いろいろ試行錯誤の上、やっと望み通りのリストボックスがウインドウの中に現れた。
しかし、中身はからっぽである

この後、様々なコードを実装しなければならない、全部この日誌につけていると、こっちにかける時間の方がソフト開発の時間より長くなりそうである。
だから、これからは主なことだけを書いていこうと思う。

[BACK | NEXT]


back
Visual C++ Laboratoryのページへ戻る


E-Mail:wbs03748@mail.wbs.ne.jp
質問・感想などのメールはこちらへ。


Copyright(C) 1997 Shingo Nakagawa / e-mail:wbs03748@mail.wbs.ne.jp