2006-02-10

プルダウン付きのツールバー  [by miyachi]

え~先日から書いている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枚を買うと思えば買えなくも無い(^^;;
2006-02-10 12:52:04 - miyachi - - [プログラミング] -

伊福部昭 氏 逝く  [by miyachi]

あちこちのSFや特撮をネタにしているサイトでももちろん哀悼の意が述べられているし皆さんもご存知だとは思いますが、私が子供の頃のゴジラ等の映画で強烈に印象を残した音楽を作曲した伊福部昭氏が8日に亡くなられた。心からご冥福をお祈りします。

ゴジラや宇宙大戦争の曲が頭の中で蘇る。またちゃんと聴いてみたいと思ったら松浦さんが購入可能なCDなんかを紹介されている。「宙-伊福部昭 SF交響ファンタジー」を買ってみようかな。<先日アマゾン購入が楽だったので味もしめているらしい(^^;

何はともあれ子供時代の楽しい思い出をありがとうございましたm(_ _)m
2006-02-10 12:26:30 - miyachi - - [一般] -