teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追記

2020/12/29 07:06

投稿

KoichiSugiyama
KoichiSugiyama

スコア3041

answer CHANGED
@@ -14,4 +14,46 @@
14
14
  :
15
15
  :
16
16
  ```
17
- デバッガで止めてみて、どのような値が入っているか確認してみてください。
17
+ デバッガで止めてみて、どのような値が入っているか確認してみてください。
18
+
19
+ **追記**
20
+ コメントから513という値が返ってきていた、とのことで、この見方を書いておきます。
21
+ まず513という値を16進数で表示します(Windows付属の電卓でやるなり、VisualStudioの機能で16進表示するなりしてみてください)。
22
+ そうすると、
23
+ ```
24
+ 513 = 0x201
25
+ ```
26
+ であることがわかると思います。次に、commctrl.hのCDIS_GRAYED辺りを調べると、
27
+ ```c
28
+ // itemState flags
29
+ #define CDIS_SELECTED 0x0001
30
+ #define CDIS_GRAYED 0x0002
31
+ #define CDIS_DISABLED 0x0004
32
+ #define CDIS_CHECKED 0x0008
33
+ #define CDIS_FOCUS 0x0010
34
+ #define CDIS_DEFAULT 0x0020
35
+ #define CDIS_HOT 0x0040
36
+ #define CDIS_MARKED 0x0080
37
+ #define CDIS_INDETERMINATE 0x0100
38
+ #if (NTDDI_VERSION >= NTDDI_WINXP)
39
+ #define CDIS_SHOWKEYBOARDCUES 0x0200
40
+ #endif
41
+ #if (NTDDI_VERSION >= NTDDI_VISTA)
42
+ #define CDIS_NEARHOT 0x0400
43
+ #define CDIS_OTHERSIDEHOT 0x0800
44
+ #define CDIS_DROPHILITED 0x1000
45
+ #endif
46
+ ```
47
+ という記述が見つかると思います。つまり0x201は上記状態フラグで言うと
48
+
49
+ ```
50
+ 0x201 = CDIS_SELECTED + CDIS_SHOWKEYBOARDCUES
51
+ ```
52
+ であることがわかります。つまり選択されているということと、キーボードキューであるという複数の状態が含まれています。
53
+ 選択状態の時に、フォーカスが無くても色をグレーに変えたくなければ、
54
+ ```C++
55
+ if (lplvcd->nmcd.uItemState & CDIS_SELECTED) {
56
+ :
57
+ :
58
+ ```
59
+ のように条件を変えて、背景青の文字色白で描き直してやれば良い、ということになります。特に色を変える必要がない場合、標準の処理を通るように記述するか、ご自身でデフォルトの色で描いてやらないと色が戻らないかもしれません。この辺りは実際に動かしてみて調整してください。

1

追記

2020/12/29 07:06

投稿

KoichiSugiyama
KoichiSugiyama

スコア3041

answer CHANGED
@@ -13,4 +13,5 @@
13
13
  if (lplvcd->nmcd.uItemState & CDIS_GRAYED) {
14
14
  :
15
15
  :
16
- ```
16
+ ```
17
+ デバッガで止めてみて、どのような値が入っているか確認してみてください。