
リストビューで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も見ています
-
リストビューで選択行の背景を変える
C言語・C++・C#
-
リストボックスの特定行の背景色
Visual Basic(VBA)
-
VB6,リストボックスの特定行の色変更は可能?
Visual Basic(VBA)
-
-
4
VBAでListViewのフォントを変更する方法
Visual Basic(VBA)
-
5
vba listviewにおけるtextのAlingmentを中央にしたい
Excel(エクセル)
-
6
VBA ListViewの選択Itemを削除する
Excel(エクセル)
-
7
ListViewのカラムの色の変更
C言語・C++・C#
-
8
Excel VBA ListViewサブアイテムの文字色
その他(プログラミング・Web制作)
-
9
リストビューの水平スクロール抑止と文字列の表示位置
C言語・C++・C#
-
10
最大化と最小化ボタン
C言語・C++・C#
-
11
リストコンロールの一行だけを太文字に(VC++)
C言語・C++・C#
-
12
リストビューのカスタムドローについて
C言語・C++・C#
-
13
vba ListViewの選択色について教えてください
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コントロールの書式設定で、“コ...
-
フォームでPDFを表示させた...
-
エクセルのコントロールツール...
-
DateTimePickerでに年月までし...
-
アイテムを点滅させる
-
ActiveXコントロールを.NETにイ...
-
コモンダイアログコントロール...
-
スピンボタンを右クリックして...
-
TabControlとToolBarの背景色変更
-
regsvr32でActiveX登録を行ったocx
-
リストボックスの同期
-
ラジオボタンのグループ化の方法
-
VCのコントロール最大配置数は?
-
タブコントロールに貼り付けら...
-
.NETでチャートにスクロールバ...
-
VB.Net Tabコントロール中のす...
-
リストコントロール(MFC or API...
-
CEdit の内容が変わった時にメ...
-
hScrollBarのバックカラーを変...
-
VBAでリストボックス内で↑↓の操...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コントロールの書式設定で、“コ...
-
エクセルのコントロールツール...
-
スピンボタンを右クリックして...
-
DateTimePickerでに年月までし...
-
ActiveXコントロールを.NETにイ...
-
フォームでPDFを表示させた...
-
コモンダイアログコントロール...
-
連続で印刷すると画像が更新さ...
-
VScrollBarの点滅を何とかしたい。
-
エクセル - リストボックスのマ...
-
CEdit の内容が変わった時にメ...
-
空のリストビューで1行おきに...
-
リストコントロール(MFC or API...
-
TabControlとToolBarの背景色変更
-
タブコントロール上のリストコ...
-
アイテムを点滅させる
-
EXCELVBA リストボックスで選択...
-
regsvr32でActiveX登録を行ったocx
-
Accessのタブコントロールを2...
-
VB6.0のデザイン時 コントロー...
おすすめ情報