
お世話になります。リストビューの選択行の背景色を変えたいと思い、カスタムドローを用い以下のようにしましたが、選択していない所も赤になってしまいます。
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
リストビューの選択状態を取得するメッセージはありますか?
C言語・C++・C#
-
リストビューのカスタムドローについて
C言語・C++・C#
-
空のリストビューで1行おきに背景色を変える
C言語・C++・C#
-
-
4
最大化と最小化ボタン
C言語・C++・C#
-
5
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
6
リストコンロールの一行だけを太文字に(VC++)
C言語・C++・C#
-
7
ListView 項目の選択/選択解除について
Visual Basic(VBA)
-
8
画面を強制的に再描画させる方法
C言語・C++・C#
-
9
ClistBoxでオーナードローがよくわかりません。
C言語・C++・C#
-
10
ListViewのカラムの色の変更
C言語・C++・C#
-
11
CStringのFindで文字列検索を行いたいのですが
C言語・C++・C#
-
12
ダイアログ内コントロールの位置取得について
C言語・C++・C#
-
13
CListCtrlで行の高さを指定したい。
C言語・C++・C#
-
14
リストビューをスクロールさせるには
Visual Basic(VBA)
-
15
ラベル(スタティックテキスト)内での改行。
C言語・C++・C#
-
16
メッセージをスルー
C言語・C++・C#
-
17
リストビュー内でのドラッグ&ドロップ
C言語・C++・C#
-
18
VC++のコンボボックスの各項目の背景色と文字色を変える方法
C言語・C++・C#
-
19
CFileDialogの最初のディレクトリ設定
C言語・C++・C#
-
20
MFCのエディットボックスについて
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PC内で速度を遅くした音源をCD...
-
拡張子「.IDJ」を、windo...
-
フラッシュの設置
-
A4の紙に印刷されている文字を...
-
再起動しないでiniファイルの変...
-
ファイル数と合計サイズの取得方法
-
個別に違う添付ファイルを付け...
-
e-taxで送信ファイルの拡張子が...
-
カメラのフラッシュは大丈夫?
-
スマホでtxtファイルを編集する...
-
指定したフォルダーを開いてフ...
-
SH7144へのフラッシュ書込みに...
-
画像をトリミングしてフォルダ...
-
RSSフィードと無断転載について
-
eclipseでタブ入力ができなくな...
-
エクセルのセルからフォーカス...
-
garagebandのLR Mixの方法について
-
エアコンの冷媒 R410Aの重...
-
メモリーリークの原因
-
ホームページビルダーのプレビ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
個別に違う添付ファイルを付け...
-
e-taxで送信ファイルの拡張子が...
-
エクセルで「特定の文字を含む...
-
複数のブックを新しいブックのS...
-
拡張子「.IDJ」を、windo...
-
A4の紙に印刷されている文字を...
-
PC内で速度を遅くした音源をCD...
-
2枚、マイクロSDカードを入...
-
GIMP separate+プラグイン クラ...
-
リストビューの選択状態を取得...
-
Accessのソースが見れない
-
eclipseでタブ入力ができなくな...
-
スマホでtxtファイルを編集する...
-
TextBoxにフォーカスを与えると...
-
ファイル数と合計サイズの取得方法
-
リストビューで選択行の背景を...
-
iPhoneの内蔵の記憶媒体は、HDD...
-
garagebandのLR Mixの方法について
-
クラリスインパクトに替わるソ...
-
エアコンの冷媒 R410Aの重...
おすすめ情報