リストビューで1行おきに背景色を変えたくて、
http://homepage3.nifty.com/mitui707/VisualC/VCli …
を参考にさせて貰らい、データを次々に追加していくと、サンプル通りに5行目の背景色と文字色は変わりました。
が、起動時の何もデータが無い状態の空のリストビューで1行おきに背景色を変えたいのです。
色々と試してますが、まだ初心者のため間違っているのかうまくいきません。
どなたか助言をお願いします。
VC++6.0を使用しています。
No.1ベストアンサー
- 回答日時:
こんばんは。
回答が未だ持ってないのであえて投函いたします。
質問者様の質問意図は十分に伝わっております。
ある程度試してみましたが、これは正攻法では不可能かもしれません。
かく言う私も、リストビューに着色した事がありますが、追加されたアイテム分のラインにしか着色しませんでした。
リストビューにアイテムが追加されたりするたびにWM_DRAWITEM又はそれに対応したメッセージハンドラがコールバックされ、そこでようやく一行分を着色する処理が発生するためです。
以下は私ならばこうするかも、というアイデアを記します。
(1)ダミーのアイテムを一つだけ常に存在させます。これは何かしらのデータでダミーである事を判定できるようにしておきます。
(2)一つアイテムが存在すれば、何か有るたびWM_DRAWITEMがコールバックされる筈です。
(3)コールバックをキャッチしたら、リストビューのハンドルに対してTreeView_GetItemHeightを使って、アイテムの縦幅を取り出し、
LPDRAWITEMSTRUCT::rcItem::topを基準に逆算して、LPDRAWITEMSTRUCT::hDCに向かってFillRectあたりで交互着色していく事になるでしょう。
何故このような逆算が必要かというのは、リストビュー自体が右端にある垂直スクロールバーによって、スクロールしている可能性があるからです。
スクロールされていると、アイテムのLPDRAWITEMSTRUCT::rcItem::topが大きくて、中途半端な数字を示す筈です。
可視領域の一番上がtop = 0とは限らないということです。
・・・とまぁ、そんなこんなで、標準コントロールに入り組んだ着色をするには正攻法では達成できない事があるのです。
最後に付け加えるとすれば、ここまでのものを望んだ場合、CreateWindowExなどをクラスにラップして、独自のリストビューを実装してしまった方が早いかもしれません。
私の場合は、標準コントロールに大きな限界を感じたときは、最終決断として、独自のコントロールをクラスで作成してきました。
そちらの方が、痒い所に手が届きますし、機能追加も容易だからです。
御健闘お祈りいたします。
回答、ありがとうございます。
とりあえず、可視領域行数分、ダミーを挿入して着色し、実データを挿入する際にダミーを1行づつ削除するという姑息な手段を取りました。
まだ、新VisualC++6.0入門の「スーパービギナー編」,「ビギナー編」,「シニア編」の3冊で勉強した程度ですので、助言頂いた内容を理解するには未熟者でして...。
もう少し学習し、内容を理解できるようになったら、やって見ます。
(回答して頂いて、うれしかったです。)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) ACCESS2019 ナビゲーションウィンドウの色 1 2022/05/10 17:15
- Excel(エクセル) こんなことできますか?例えば、sheetに貼り付けた図形のタイトルを、セルA1の文字で表示する。 5 2022/04/22 15:25
- その他(ブラウザ) zoomのバーチャル背景が選べない 4 2022/12/08 12:38
- Visual Basic(VBA) マクロ実行時、自動で背景色を変えたい。 C列にあるチェックボックスをチェックするとB列に「TRUE」 4 2022/11/08 11:14
- Photoshop(フォトショップ) MacでPhotoshopに使い方 教えて! 2 2023/07/08 08:24
- Visual Basic(VBA) 昨日、質問した件『VBA にて、条件付き書式で背景色を設定しているセルの範囲で、背景色付きのセルをカ 4 2022/04/07 14:39
- Visual Basic(VBA) エクセルから、パワーポイントのスライドを複数作成する。 1 2022/07/08 09:40
- その他(Microsoft Office) エクセル 表の移動 2 2023/04/05 20:29
- 恋愛占い・恋愛運 カテ違いだったらすいません。心理について聞きたいです! 2 2022/04/18 14:26
- Windows 95・98 タスクバーの背景の色だけを変えたい。 2 2022/07/13 14:44
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コントロールの書式設定で、“コ...
-
DateTimePickerでに年月までし...
-
エクセルのコントロールツール...
-
フォームでPDFを表示させた...
-
WM_SIZEを発生させる方法
-
警告表示を非表示にしたい
-
文字色を変えたい(ACCESS VBA)
-
CEdit の内容が変わった時にメ...
-
VBAでリストボックス内で↑↓の操...
-
ActiveXコントロールを.NETにイ...
-
連続で印刷すると画像が更新さ...
-
VB.NETのTabControlについて
-
VisualBasic 2010でVB6で使って...
-
コンボボックスでコントロール...
-
EXCELVBA リストボックスで選択...
-
VC++6.0 エディットボックス、...
-
スピンボタンを右クリックして...
-
C++とWin32APIでタブコントロー...
-
ダイアログボックスのボタンコ...
-
TabControlとToolBarの背景色変更
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コントロールの書式設定で、“コ...
-
エクセルのコントロールツール...
-
フォームでPDFを表示させた...
-
スピンボタンを右クリックして...
-
DateTimePickerでに年月までし...
-
C++6.0でのresource.hについて
-
連続で印刷すると画像が更新さ...
-
ActiveXコントロールを.NETにイ...
-
警告表示を非表示にしたい
-
エクセル - リストボックスのマ...
-
コモンダイアログコントロール...
-
EXCELVBA リストボックスで選択...
-
TabControlとToolBarの背景色変更
-
ワードのドロップダウンリスト
-
文字色を変えたい(ACCESS VBA)
-
CEdit の内容が変わった時にメ...
-
リストボックスの同期
-
VB6.0のデザイン時 コントロー...
-
WM_SIZEを発生させる方法
-
VBAでリストボックス内で↑↓の操...
おすすめ情報