回答編集履歴
2
追記
    
        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
追記
    
        answer	
    CHANGED
    
    | @@ -13,4 +13,5 @@ | |
| 13 13 | 
             
            if (lplvcd->nmcd.uItemState & CDIS_GRAYED) {
         | 
| 14 14 | 
             
                :
         | 
| 15 15 | 
             
                :
         | 
| 16 | 
            -
            ```
         | 
| 16 | 
            +
            ```
         | 
| 17 | 
            +
            デバッガで止めてみて、どのような値が入っているか確認してみてください。
         | 
