• 締切済み

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

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

  • リストコントロールのスクロールバーを操作無効にするには

    お世話になります、fujicafeと申します。 現在、VC++でMFCのダイアログベースのアプリケーションを作成し、そこでリストコントロールを配置させています。 リストコントロールは自動的に垂直方向のスクロールバーを表示させるようにしています。 そこで質問なのですが、現在、リストコントロールの垂直方向のスクロールをスクロールバーの操作ではなく、キー操作によって行おうと思っているのですがどのようにすればスクロールバーの操作を無効にできますでしょうか? ポイントとしては ・リストコントロールの自動的に表示させる垂直スクロールバーはそのまま表示させたい(スクロールバーは全体行での現在の行の位置を示すだけ) ・リストコントロールの垂直方向の移動はキー操作でしたい。 これを実現するには、やはりリストコントロールのスクロールバー表示を無しにし、別でスクロールバーを設置させるしか方法はないでしょうか? 現状で、キー操作でのリストコントロールのスクロールバーの操作は実現できていますので、出来ればリストコントロールのスクロールバーの操作の無効のみが出来ればいいなと思っております。 ご意見がありましたら、よろしくお願いいたします。 尚、開発環境は Windows CE 6.0 Visual Studio 2005 です。

  • スクロールバーでのピクチャーコントロールやリストビューの移動

    お世話になります。 今回お聞きしたいことは MFCでダイアログ上にリストコントロールとスクロールバー、またはピクチャーコントロールとスクロールバーを設置した際に、スクロールバーの移動に伴って、リストコントロール内の列や、ピクチャーコントロールに表示されている画像の見えている箇所を移動させることが出来るかどうか。 です。 まだ、本格的にプログラムを作り始めてるわけではないのですが、事前にこのような動作が実現可能かどうかお聞きしたく、質問させて頂きました。 もしご存知の方がいましたら、参考になるHPや方法を教えていただければと思っています。参考になるHPがなくても、実現可能かどうかだけ教えて下さるだけでも結構ですので、宜しくお願い致します。 開発環境は Windows CE 6.0 Visual Studio 2005 です。

  • 反転させた文字列を右クリックからWEB検索したい

    反転させた文字列を右クリックからWEB検索したい 反転させた文字列を右クリックからWEB検索できるようにするソフトは ありませんか?(できればフリーソフトで) ブラウザ上ではアドオンでそのような機能を持たせることができますが いま欲しいのは、ワード文書だろうとメモ帳だろうとフォルダ名だろうと とにかくブラウザ以外の文字列を反転右クリックからWEB検索できるようにする ソフトを探しています ご存知の方、よろしくお願いします

  • ダイアログとリストコントロールのサイズ変更

    VC++でダイアログベースのプログラミングをしています。 初心者です。 ダイアログの枠をドラッグしてサイズ変更ができるようにしたくて、 先週からネットや本を読み漁っていたのですが、 先日リソースのプロパティで枠の種類を[サイズ変更枠]にすると、 可変にできることがわかりました。 ただ、ダイアログの大きさは変更できるようになったものの、 ダイアログに配置してあるリストコントロールのサイズは固定のままです。 これを、ダイアログの枠のサイズに合わせて可変にすることはできないでしょうか。 また今回の内容に限らず、ダイアログやコントロールを作成する時に、 参考になるような本やサイトでオススメのものがありましたら、 ぜひ教えて頂きたいです。 ちなみに私が今参考にしている本はこの3冊です。 「図解でわかるVisualC++2005 Express Edition」 「VisualC++逆引き大全 500の極意」 「VisualC++.NET 逆引き大全 500の極意」

  • タブコントロール上のリストコントロール(再描画されない)

    VS2005 SP1のMFCでプログラムを作成しています。 OSはWindows XP SP3です。 タブコントロールを使用したダイアログベースです。 タブの切り替えによりコントロールを配置した子ウィンドウ(実際はダイアログ)を表示させたり、非表示にさせたりしています。 ■配置と親子関係 ダイアログ:(1)  ↓(の上に) タブコントロール:(2)((1)が親)  ↓(の上に) ダイアログ:(3)((1)が親)  ↓(の上に) リストコントロール:(4)((3)が親) ■現象 本プログラムを別のウィンドウで隠し、ALT+TAB等で、フォアグラウンドに持ってきた場合に、(4)のリストコントロールが再描画されません。 ※リストコントロールでアイテムを選択した状態でないと発生しない模様 ただし配置と親子関係で示した構成は2組あり、1組はリストコントロールのリソースプロパティで、TransparentをTUREにすることにより現象が解消されました。(たぶん最後にリストコントロールが描画されるようになった) しかし、2組目は同じ対策をとっても現象が起こってしまいます。 画面切り替わり時によくみていると、リストコントロールが一瞬みえてから消えてるので、別の何かが上書き描画により消えていると思われます。 対策として、 OnPaint()にてリストコントロールをInvalidate()すれば解消されることはされるのですが、ツールバーにツールチップが表示するだけで、リストコントロールの再描画が発生してチラつきます。 説明が長くなってしまいましたが、どなたか良い解決策をご教授お願いします。 最後まで読んで頂き、有難う御座います。

  • MFCでのリストコントロール

    現在VisualStudio.NET2005を使ってダイアログベースでプログラムを組んでいます。 その中でリストコントロールを配置しており、表形式で表示しています。 普通だったら実行してリスト上にあるデータをクリックすると背景が青になり、選択された状態になりますよね? それをクリックしても選択されないようにしたいのです。 プロパティで簡単にできるかと思ったらそうでもなさそうで・・・。 SetExtendedStyleでも使うのかな?と思って、 調べたのですが、ちょっとわからなかったので、 教えて頂きたいのです。 よろしくお願いします。

  • VC++ VS2005 タブコントロールに貼り付けたリストコントロールが消える

    こんばんは。 早速ですが質問です。 VC++ .NET MFCプロジェクトで リソースエディタでダイアログにタブコントロールを貼り付け(1)、 そこに同じようにリソースエディタでリストコントロールとボタンを 貼り付けたダイアログを作りました(2)。 1のタブコントロール上に2をソースで貼り付け 表示させ、2のInitDialogとボタンクリックのイベントを作成して Listコントロールに値を入れるということをしたのですが リストコントロールの表示が消えてしまいます。 マウスでリストコントロールが貼りついている位置にカーソルを当てるとその部分がでてきます。 原因のお分かりになるかたご回答よろしくお願いします。

  • リストボックスの文字列の取得

    VC++でダイアログのリストボックスに文字列を入れました。この文字列を別のエディタボックスに同じ内容を表示したいのですが、その方法がわかりません。誰か教えてください。お願いします

  • Win32のリストコントロールで縦スクロールはできませんか?

    こんにちは。Win32のリストコントロールについて質問です。 リストコントロールでアイコン表示で使用しています。 リストコントロールでアイコンをたくさん表示させると、縦幅に入る範囲で アイコンが複数行表示され、入らないアイコンは横スクロールさせることで 表示できますが、これを縦スクロールベースにはできないものでしょうか ?

  • リストコントロールの列幅を固定にする

    VC++、MFCでエクスプローラのようなダイアログを作成しています。 その中で、リストコントロールの列幅(ヘッダの幅)を 一部の列だけ固定にしたいのですが、 その方法がまったくわかりません。 幅の初期値を設定する方法はいくつかあるのですが、 そのままではマウスで幅を自由に変更できてしまいます。 手がかりだけでもいいので、よろしくお願いします。

専門家に質問してみよう