え~先日から書いているWin32での
ツールバーシリーズ(笑) 今日のお題はIEやFireFoxなんかでも使われているツールバーにプルダウンのリストなんかのボタン以外のパーツを置く方法。
MFCのツールバークラス CToolBarCtrl で標準で設定できるのは、ボタン(TBSTYLE_BUTTON)とチェックボタン(TBSTYLE_CHECK)とセパレータ(TBSTYLE_SEP)の3種類のみ。ではどうするかと言えばセパレータを1つ指定して横幅を変更してその上にプルダウン等のパーツ(例:CComboBox)を乗っけてしまう事で実現する。
この方法で問題は無いのだが、ベースになるのがセパレータなのでプルダウンの高さがツールバーより小さい場合は余計な縦棒が背景に表示されてしまう。これを防ぐ方法を検索したが見つからないので力技でツールバーとプルダウンの間に空のテキストウィンドウ(CStatic)を置く事でクリアした。
CToolBarCtrl m_TBar;
(ツールバーの初期化は省略/セパレータをcmdidで生成しておく)
// セパレータの幅を変更する
CRect rect;
const int nComboWidth = 110; // コンボボックスの幅
TBBUTTONINFO tbbi;
ZeroMemory( &tbbi, sizeof(tbbi) );
tbbi.dwMask = TBIF_SIZE;
tbbi.cbSize = sizeof(tbbi);
tbbi.cx = nComboWidth + 4;
m_TBar.SetButtonInfo( cmdid, &tbbi ); // cmdidはindexとは違う
// 縦棒を塗りつぶす為のテキスト領域
CStatic m_Base;
m_TBar.GetItemRect( index, &rect ); // ここはindex(何番目)で指定
m_Base.Create( "", WS_VISIBLE , rect, &m_TBar, 0 );
// コンボボックスの生成
CComboBox m_Combo;
rect.top += 4; // 適当に上からの位置を指定
rect.left += 2; // 開始位置もずらす
m_Combo.Create(
CBS_AUTOHSCROLL | CBS_DROPDOWNLIST | WS_VISIBLE | WS_TABSTOP,
rect, &m_TBar, 1 );
// 必要ならこの後でフォントやリスト文字列をセットする
以上参考になれば幸いです :-)
さて先日
「1ギガiPod nanoが登場―shuffleは値下げ」のアナウンスが。512MBのshuffleなら7900円か…う~む
ジム用に買ってしまいそうな値段になったぞ… CDを2~3枚を買うと思えば買えなくも無い(^^;;