お世話になります。リストビューの選択行の背景色を変えたいと思い、カスタムドローを用い以下のようにしましたが、選択していない所も赤になってしまいます。
if (lplvcd->nmcd.dwDrawStage == CDDS_ITEMPREPAINT) {
// 選択行の背景色を変更
if (lplvcd->nmcd.uItemState & CDIS_SELECTED) {
lplvcd->clrTextBk = RGB(255, 0, 0);
lplvcd->nmcd.uItemState &= ~CDIS_SELECTED;
} else {
lplvcd->clrTextBk = RGB(255, 255, 255);
}
return CDRF_NOTIFYSUBITEMDRAW;
}
デバッグモードで見ると、else以降の分は解釈されていないようです。
リストビューは
g_hList = CreateWindowEx(0 , WC_LISTVIEW , 0 ,
WS_CHILD | WS_VISIBLE | LVS_REPORT | LVS_NOSORTHEADER | LVS_SHOWSELALWAYS,
1 , 1 , width , lv_height , g_hMain , (HMENU)1 ,
g_hInst , NULL);
dwStyle = ListView_GetExtendedListViewStyle(g_hList);
dwStyle |= LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | LVS_EX_SUBITEMIMAGES;
ListView_SetExtendedListViewStyle(g_hList, dwStyle);
ListView_SetBkColor(g_hList, RGB(240,240,240));
のようにしています。宜しくお願いします
No.1ベストアンサー
- 回答日時:
★『CDIS_FOCUS』定数を付けてみて下さい。
・つまり
>if ( lplvcd->nmcd.uItemState & CDIS_SELECTED ){
↑
ここの部分を
int check = (CDIS_SELECTED | CDIS_FOCUS);
if ( (lplvcd->nmcd.uItemState & check) == check ){
とします。
・リストビューやツリービューでは選択された場所を CDIS_SELECTED と CDIS_FOCUS 定数の
両方のビットが立っているときです。CDIS_SELECTED 定数だけでは判定するのに不十分です。
他にも LVNI_SELECTED、LVNI_FOCUSED 定数も同じ考えで2つ指定してから判定します。
・以上。
この回答への補足
ありがとうございます、できました。
ただ複数行選択の場合にフォーカスがある行しか反映されません。この場合はどうしたらいいでしょうか。
色々いじったのですが分かりませんでした・・・
//行毎の描画
if (lplvcd->nmcd.dwDrawStage == CDDS_ITEMPREPAINT) {
// 選択行の背景色を変更
int check = (CDIS_SELECTED | CDIS_FOCUS);
if ((lplvcd->nmcd.uItemState & check) == check){
lplvcd->clrTextBk = RGB(0,0,0);
lplvcd->clrText = RGB(255,255,255);
lplvcd->nmcd.uItemState &= ~CDIS_SELECTED;
}
return CDRF_NEWFONT;
}
No.3
- 回答日時:
複数選択時にフォーカスのある行だけ反映されてしまうのは、 CDIS_FOCUS を追加してるからですよ。
LVS_SHOWSELALWAYS これはフォーカスがなくても選択状態を表示するオプションですですから、それを意図して組んでらっしゃるのだと思いますが。
その部分に関しては最初のソースが正しいと思います。
それでは。
No.2
- 回答日時:
if (lplvcd->nmcd.dwDrawStage == CDDS_PREPAINT) {
return CDRF_NOTIFYITEMDRAW;
}
if (lplvcd->nmcd.dwDrawStage == CDDS_ITEMPREPAINT) {
if (lplvcd->nmcd.uItemState & CDIS_SELECTED) {
lplvcd->clrTextBk = RGB(255, 0, 0);
lplvcd->nmcd.uItemState &= ~CDIS_SELECTED;
} else {
lplvcd->clrTextBk = RGB(255, 255, 255);
}
return CDRF_NEWFONT;
}
これでいいんでは?
CDDS_PREPAINT の場合の処理と CDRF_NEWFONT を返すようにする部分が、抜けていたのでは。
この回答への補足
回答ありがとうございます。両方ともつけています。
どうもCDIS_SELECTEDのみだと選択していないものも検知してしまうようで、全てが赤になってしまいます。
当初の質問はNo.1さんの回答で解決したのですが、今度は複数選択時に苦戦しています。。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- その他(ブラウザ) zoomのバーチャル背景が選べない 4 2022/12/08 12:38
- ホームページ作成・プログラミング ウィンドウズ11にしたら背景画面が黒くなり直せません 1 2023/04/15 21:55
- Visual Basic(VBA) マクロ実行時、自動で背景色を変えたい。 C列にあるチェックボックスをチェックするとB列に「TRUE」 4 2022/11/08 11:14
- Visual Basic(VBA) リストビューに条件による表示 1 2022/06/01 20:19
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- PHP 【PHP/MySQL】コード上で生成したクエリを基に集計クエリを作りたい 1 2022/07/28 15:06
- ノートパソコン AMDディスプレイ設定 暖色見にくい 2 2023/07/18 17:24
このQ&Aを見た人はこんなQ&Aも見ています
-
カンパ〜イ!←最初の1杯目、なに頼む?
飲み会で最初に頼む1杯、自由に頼むとしたら何を頼みますか? 最初はビールという縛りは無しにして、好きなものを飲むとしたら何を飲みたいですか。
-
人生最悪の忘れ物
今までの人生での「最悪の忘れ物」を教えてください。 私の「最悪の忘れ物」は「財布」です。
-
初めて自分の家と他人の家が違う、と意識した時
子供の頃、友達の家に行くと「なんか自分の家と匂いが違うな?」って思いませんでしたか?
-
牛、豚、鶏、どれか一つ食べられなくなるとしたら?
牛肉、豚肉、鶏肉のうち、どれか一種類をこの先一生食べられなくなるとしたらどれを我慢しますか?
-
お風呂の温度、何℃にしてますか?
みなさん、家のお風呂って何℃で入ってますか? ぬるめのお湯にゆったり…という方もいれば、熱いのが好き!という方もいるかと思います。 我が家は平均的(?)な42℃設定なのですが、みなさんのご家庭では何℃に設定していますか?
-
リストビューの選択状態を取得するメッセージはありますか?
C言語・C++・C#
-
CString から LPCTSTRの型に変換
C言語・C++・C#
-
ボタンの表示の色、フォントを変更したい
C言語・C++・C#
-
-
4
画面を強制的に再描画させる方法
C言語・C++・C#
-
5
CWnd::EnableWindow()の扱い方
C言語・C++・C#
-
6
リストビューのスクロールバーを非表示にしたい
C言語・C++・C#
-
7
MFCのCListCtrlでスクロールを検出
C言語・C++・C#
-
8
VC++でコントロールの境界線を描画する方法
C言語・C++・C#
-
9
リソースエディタでスタティックテキストの文字サイズの変更
C言語・C++・C#
-
10
MFCでOnPaintのタイミング
C言語・C++・C#
-
11
リストコンロールの一行だけを太文字に(VC++)
C言語・C++・C#
-
12
CListCtrlで行の高さを指定したい。
C言語・C++・C#
-
13
テキストボックスからフォーカス外す
C言語・C++・C#
-
14
ClistBoxでオーナードローがよくわかりません。
C言語・C++・C#
-
15
DWORDの実際の型は何でしょうか
C言語・C++・C#
-
16
deleteで開放するとエラーになる原因がわからない
C言語・C++・C#
-
17
リストの行ごとの設定変更について
C言語・C++・C#
-
18
ボタンのオーナードローについて
C言語・C++・C#
-
19
リストコントロールの列幅を固定にする
C言語・C++・C#
-
20
LVM_SETITEMSTATEでListViewのアイテムを選択するには?
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
個別に違う添付ファイルを付け...
-
VBS フォルダ内にあるすべての...
-
エアコンの冷媒 R410Aの重...
-
複数のブックを新しいブックのS...
-
拡張子「.IDJ」を、windo...
-
C#のout修飾子経由のOutOfMemor...
-
Accessのソースが見れない
-
2枚、マイクロSDカードを入...
-
ファイル数と合計サイズの取得方法
-
エクセルで「特定の文字を含む...
-
リストビューで選択行の背景を...
-
vba メモリ節約
-
iosのshortcutアプリでmp3を連...
-
PC内で速度を遅くした音源をCD...
-
ホームページビルダー18で
-
SDカードを挿してるのに挿入し...
-
garagebandのLR Mixの方法について
-
e-taxで送信ファイルの拡張子が...
-
RSSフィードと無断転載について
-
スマホでtxtファイルを編集する...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
個別に違う添付ファイルを付け...
-
スマホでtxtファイルを編集する...
-
PC内で速度を遅くした音源をCD...
-
A4の紙に印刷されている文字を...
-
iPhoneの内蔵の記憶媒体は、HDD...
-
2枚、マイクロSDカードを入...
-
e-taxで送信ファイルの拡張子が...
-
拡張子「.IDJ」を、windo...
-
エクセルで「特定の文字を含む...
-
ガラケーからPCへの写真の取り込み
-
エアコンの冷媒 R410Aの重...
-
TextBoxにフォーカスを与えると...
-
ビデオファイルのプロパティの...
-
VBS フォルダ内にあるすべての...
-
garagebandのLR Mixの方法について
-
VBA:カウンターの i の値が開放...
-
ファイル数と合計サイズの取得方法
-
リストビューで選択行の背景を...
-
stdio.hの中身
-
GIMP separate+プラグイン クラ...
おすすめ情報