ツールバーのドロップダウンボタン(DDTB)


■ 概略説明
ツールバー上のドロップダウンボタンのサンプルです。ドロップダウンボタンとはIEの[戻る]ボタンの様にボタンの右にドロップダウンボタンが付いているものです。
ドロップダウンボタンの説明は、VC6.0のドキュメントに載っていましたが、わかりにくいのでサンプルにしてみました。これはVC6.0以降でないと動作しないかもしれません。
サンプルは、リッチテキストエディターの文字色を変更する機能として、ドロップダウンボタンを使用してみました。機能は丁度ワードのテキスト色変更ボタンに似ていますが、ドロップダウンリストは文字列だけでグラフィックサポートしていません。


■ プログラムの説明
まず、ドロップダウンボタンの説明ですが、CMainFrameの OnCreate内で、ツールバーの作成後にテキスト色変更ボタンの属性を変更します。次に CMainFrameに OnNotify関数をクラスウィザードで追加し変更を加えます。ドロップダウンリストですが、このサンプルではメインメニューの部分を流用していますが、もちろんドキュメントに有るように独立したメニューを作成しても可能です
ここまでは、ドキュメントに書いてある通りすんなりと行きました。最初の関門は、ドロップダウンリストの表示位置でした。CToolbar関係の関数をいろいろ見て一応ボタンの側に表示できるようになりました。
次に、各追加したメニューの処理を加えました。テキスト表示色の変更は、なかなか上手く行かなかったので Wordpadのサンプルを参考にしたら変更できるようになりました。
また、ドロップダウンボタンのビットマップを、選択したテキスト色に変更しないとカッコがつかないので、この機能を追加しようとしましたが、これが一番クセ者でした。どこを見回しても、指定したツールバーのビットマップを変更する関数が無いのであきらめかけたとき、これもサンプルの ctrlbarsに載っていたのを発見し真似しました。リソースでツールバーを使用していないのはこのためです。
あまりスマートな方法とは思えませんが、何か他の方法が有りましたら教えて下さい。
■ファイルのダウンロード
(MFC6.0プロジェクトファイル48KB)