ChoiceListButton Control

元サイト

この記事は Christian Skovdal Andersen の投稿です。

概要

私はユーザーが何かを選択できるようなボタンが欲しかった。
もちろんオーナードローのドロップダウンボックスを用いることも出来る。この方法の問題は、ドロップダウンがつぶれたとき、最後に選ばれたアイテムが表示されるということだ。
こういうわけで自分で解決することにした。

ITCLib

オプションとして、コントロールは Interface technologies, Inc のフリーライブラリ "ITCLib"を使うことが出来る。これは良いライブラリなので、MFCデベロッパは見てみると良い。本当に時間を節約してくれるだろう。

ITCLib はボタン上に小さな矢印を描画することだけに用いられ、コントロールに統合された一部ではない。そういうわけで ITCLib については最初、プリプロセッサーの文により無効にしている。だからサンプルはライブラリ無しでコンパイルできる。

ITCLib を有効にするには:

矢印などを描くのに自分のボタンクラスを使いたいのなら、CButtonITCImageButton などのかわりに自分のクラスからCChoiceWindowBtn を継承できる。

 

コントロールの使い方

コントロールを使うには、プロジェクトを作り、下記のファイルを追加してほしい。

ChoiceWindow.h
ChoiceWindow.cpp
ChoiceWindowBtn.h
ChoiceWindowBtn.cpp
drop_arrow.bmp (or another bitmap)

ビットマップにリソース名 "DROP_ARROW" を割り当てよ。整数値IDとしてではなく文字列としてである。

次にダイアログにボタンを追加し、WM_INITDIALOG ハンドラからメンバ関数を使う。

ダイアログクラスに CChoiceWindowBtn オブジェクトを追加。ヘッダーをインクルードするのも忘れずに

例:プリプロセッサー定義に注意

// TODO: Add extra initialization here

#ifdef _ITCDLL	 	
	m_btnDropDown.SubclassControl(IDC_OPTIONS, this);
	m_btnDropDown.AddImage("DROP_ARROW", -1, RGB(255,0,255));
	m_btnDropDown.SetImageAlign(DT_RIGHT|DT_VCENTER);
#else
	m_btnDropDown.SubclassDlgItem(IDC_OPTIONS, this);
#endif

	m_btnDropDown.AddChoice("Name", TRUE);
	m_btnDropDown.AddChoice("Address", TRUE);
	m_btnDropDown.AddChoice("Notes", FALSE);
	m_btnDropDown.AddChoice("Telephone", TRUE);

 

インターフェース

CChoiceWindowButton クラスを通してコントロールはアクセスされる。これは少しのメンバ関数しかない。

 

CChoiceWindowButton::AddChoice

void AddChoice(LPCTSTR szText, BOOL bChecked=FALSE)

戻り値
   なし
パラメータ
   szText:   選択用に表示されるテキスト
   bChecked: 最初にチェックされているかチェックされていないか
コメント
   リストに新しいアイテムを追加します

 

CChoiceWindowButton::Reset

void Reset()

戻り値
   なし
パラメータ
   なし
コメント
   リストから全てのアイテムを削除


CChoiceWindowButton::GetCheck

BOOL GetCheck(int iItem)

戻り値
   BOOL型 - iItem により特定されたアイテムの状態
パラメータ
   nItem: アイテムの0で始まるインデックス
コメント
   アイテムがチェックされていれば TRUE を返し、そうでなければ FALSE を返す

 

CChoiceWindowButton::SetCheck

void SetCheck(int iItem, BOOL bCheck=TRUE)

戻り値
   void
パラメータ
   iItem: アイテムの0で始まるインデックス
   bCheck: BOOL値。TRUE ならアイテムはチェックされる。

CChoiceWindowButton::GetItemCount

int  GetItemCount()

戻り値
   リスト中のアイテムの数
パラメータ
   なし

 

CChoiceWindowButton::GetListCtrl

CListCtrl&  GetListCtrl()

戻り値
   基礎にあるCListCtrl オブジェクトへの参照
パラメータ
   なし
コメント
   コントロールに次のようにアクセスできます。
   CListCtrl& list = btnChoiceList.GetListCtrl();

 

CChoiceWindowButton::RemoveAt

void  RemoveAt(int iIndex)

戻り値
   なし
パラメータ
   リストから削除するアイテムのインデックス

 

CChoiceWindowButton::m_bDisableIfEmpty

BOOL m_bDisableIfEmpty

コメント
   BOOL値。リストがアイテムを含んでないのなら、ボタンが無効かどうかを指定する。デフォルトでは TRUE である

 


Downloads

Download demo project - 25 KB

History

Date Posted: July 31, 1999