コンボボックスで一行ごとにフォントを変えるには

[戻る]
Qoo-nita 2001/10/09(火) 15:39:24
コンボボックス内の項目ごとにフォントを変えて
表示するにはどのようにすればよいのでしょうか。
(MS-WORD2000にあるようなフォント選択コンボボックス
を作りたいのです)
TrueTypeフォント名を列挙するまでは出来たのですが、
SetFontを使うと全て変わってしまいます。
宜しくお願いします。

Qoo-nita 2001/10/09(火) 15:42:01
書き忘れましたが、開発環境はVC++6.0です。

sugar 2001/10/09(火) 18:02:08
これは、オーナードローで実現するしかないのではないでしょうか。

Qoo-nita 2001/10/10(水) 08:14:07
オーナードローとは何の事でしょうか。
初歩的な質問ですみません。出来れば
具体的なコードなどを教えていただければ
嬉しいです。宜しくお願いします。

sugar 2001/10/10(水) 09:48:11
オーナードロー:Owner Draw...自分で描く。
コントロールの見てくれを、自分で描くテクニックです。
人によっては、「オーナー描画」「カスタムドロー」と呼ぶ場合もあります。

とりあえず、Qoo-nitaさんの要件では、行ごとに書体の違うコンボボックスという事ですよね。
ダイアログエディタに貼り付けたコンボボックスのプロパティに「オーナー描画」という
項目が確認できますか?
これを「固定」か「可変」にして下さい(意味はヘルプを参照してくださいね)。
これで、コンボボックスにCBS_OWNERDRAW***というスタイルを追加した事になります。

そうすると、親ウィンドウにはWM_DRAWITEMというメッセージが送られるようになります。
メッセージのlParamに、DRAWITEMSTRUCT構造体が渡されてきますので、
この構造体の情報を手がかりに、コントロールの見てくれを描画してやります。

基本的な流れは、以上です。
まずは、調べながらトライしてみてください。
で、行き詰まったら、また質問を上げてください。

尚、具体的なコードをとありますが、多岐にわたり、書ききる事ができません。
ご了承くださいませ。

Qoo-nita 2001/10/11(木) 13:55:55
[[解決]]
DRAWITEMSTRUCTからデバイスコンテキストを取得
SelectObjectでフォントを設定し
TextOutで描画するという形で解決しました。

オーナードローなんて初めてやったので
かなり勉強になりました。
どうもありがとうございました。

古いスレッドには追加発言できません。