• 締切済み

リストコントロールのクリック操作による文字列反転について

VisualC++2005(MFC)でダイアログベースのプログラムを作成しています。そして、ダイアログにリストコントロールを配置して、文字列を一行単位に出力しています。そのリストコントロールの文字列箇所をクリックしても反転しないようにするためにはどのようにしたら良いのでしょうか?、お教えください。 ※DisabledプロパティをTRUEにしたら、クリックしても、文字列箇所が反転しないようになったのですが、縦スクロールバーまで使用出来なくなってしまいました。

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

ダイアログクラスにWM_DARWITEMメッセージのハンドラを追加します この関数の引数 lpDrawItemStructが DRAWITEMSTRUCT構造体のポインターです この構造体には どのコントロールから呼ばれたのかとか どのアイテムを どのように描画するのかなどの情報が入っています lpDrawItemStruct->CtlTypeでどのコントロールのタイプなのかを判断します ListView(リストコントロール)なら ODT_LISTVIEWと比較します itemActionメンバーにアイテムの表示、選択状態、フォーカスのみなどの表示方法が指示されてて来ます ここで lpDrawItemStructに渡されてきた hDCからCDCオブジェクトを構築してDrawTextやTextOutで項目を描画しましょう このとき 背景色を変更しなければ 非選択状態のように見せることが可能だと思います VC++付属のMSDNの『List Box Controls』 ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.WIN32COM.v10.en/dnwui/html/msdn_listbox.htm などが参考になるかも

galveston
質問者

お礼

redfox63さん、ご連絡が大変遅くなりすみませんでした。 丁寧な情報ありがとうございます。現在、お教え頂いた件について勉強しながら実現に向けて作業を進めているところです。後々結果をご報告したいと思います。

すると、全ての回答が全文表示されます。
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

ごめんなさい m(__)m 勘違いしてました それだと オーナー描画で自前でやるしかないかと思います 『Owner Draw Fixed』をTrueにして WM_DRAWITEMメッセージを処理するようにしてやるといった具合だと思います

galveston
質問者

お礼

redfox63さん、ご連絡が遅くなりすみませんでした。 お教えいただいた『Owner Draw Fixed』、WM_DRAWITEMメッセージについて調べてみましたが、初心者の自分には、それを利用してどのように実現するのかがわかりませんでした。 せっかくお教えいただいたのにすみませんでした。

すると、全ての回答が全文表示されます。
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

Disableでは無く『Selection』を「なし」に設定しましょう これならコントロール自体は有効ですからスクロールもしますよ

galveston
質問者

お礼

redfox63さん、ご回答ありがとうございます。 ご指摘の『Selection』プロパティについて調べてみたのですが、Listbox Controlには存在しましたが、List Controlには存在しませんでした。 言葉足らずでしたら申し訳ありませんでした。自分が言っているリストコントロールは、後者のList Controlです。 情報をお持ちでしたら、よろしくご教授ください。

すると、全ての回答が全文表示されます。

関連するQ&A