回答編集履歴

2

追記

2020/12/29 07:06

投稿

KoichiSugiyama
KoichiSugiyama

スコア3041

test CHANGED
@@ -31,3 +31,87 @@
31
31
  ```
32
32
 
33
33
  デバッガで止めてみて、どのような値が入っているか確認してみてください。
34
+
35
+
36
+
37
+ **追記**
38
+
39
+ コメントから513という値が返ってきていた、とのことで、この見方を書いておきます。
40
+
41
+ まず513という値を16進数で表示します(Windows付属の電卓でやるなり、VisualStudioの機能で16進表示するなりしてみてください)。
42
+
43
+ そうすると、
44
+
45
+ ```
46
+
47
+ 513 = 0x201
48
+
49
+ ```
50
+
51
+ であることがわかると思います。次に、commctrl.hのCDIS_GRAYED辺りを調べると、
52
+
53
+ ```c
54
+
55
+ // itemState flags
56
+
57
+ #define CDIS_SELECTED 0x0001
58
+
59
+ #define CDIS_GRAYED 0x0002
60
+
61
+ #define CDIS_DISABLED 0x0004
62
+
63
+ #define CDIS_CHECKED 0x0008
64
+
65
+ #define CDIS_FOCUS 0x0010
66
+
67
+ #define CDIS_DEFAULT 0x0020
68
+
69
+ #define CDIS_HOT 0x0040
70
+
71
+ #define CDIS_MARKED 0x0080
72
+
73
+ #define CDIS_INDETERMINATE 0x0100
74
+
75
+ #if (NTDDI_VERSION >= NTDDI_WINXP)
76
+
77
+ #define CDIS_SHOWKEYBOARDCUES 0x0200
78
+
79
+ #endif
80
+
81
+ #if (NTDDI_VERSION >= NTDDI_VISTA)
82
+
83
+ #define CDIS_NEARHOT 0x0400
84
+
85
+ #define CDIS_OTHERSIDEHOT 0x0800
86
+
87
+ #define CDIS_DROPHILITED 0x1000
88
+
89
+ #endif
90
+
91
+ ```
92
+
93
+ という記述が見つかると思います。つまり0x201は上記状態フラグで言うと
94
+
95
+
96
+
97
+ ```
98
+
99
+ 0x201 = CDIS_SELECTED + CDIS_SHOWKEYBOARDCUES
100
+
101
+ ```
102
+
103
+ であることがわかります。つまり選択されているということと、キーボードキューであるという複数の状態が含まれています。
104
+
105
+ 選択状態の時に、フォーカスが無くても色をグレーに変えたくなければ、
106
+
107
+ ```C++
108
+
109
+ if (lplvcd->nmcd.uItemState & CDIS_SELECTED) {
110
+
111
+ :
112
+
113
+ :
114
+
115
+ ```
116
+
117
+ のように条件を変えて、背景青の文字色白で描き直してやれば良い、ということになります。特に色を変える必要がない場合、標準の処理を通るように記述するか、ご自身でデフォルトの色で描いてやらないと色が戻らないかもしれません。この辺りは実際に動かしてみて調整してください。

1

追記

2020/12/29 07:06

投稿

KoichiSugiyama
KoichiSugiyama

スコア3041

test CHANGED
@@ -29,3 +29,5 @@
29
29
  :
30
30
 
31
31
  ```
32
+
33
+ デバッガで止めてみて、どのような値が入っているか確認してみてください。