2020年12月11日金曜日

[備忘録]ListViewCtrlでLVIS_SELECTEDなアイテムの色を変える方法

ListViewCtrlのアイテムの色を変える方法自体は、カスタムドロー(NM_CUSTOMDRAW)でできることは知っていて実際に使っていました。しかし、LVIS_SELECTEDで選択されたアイテムの色を変える方法、そして、そのListViewCtrlがフォーカスを外れても、同じ選択状態の色で表示する方法がどうしても分からなかったのですが、ようやくその方法が分かりました。それは、、、


カスタムドローのハンドラ内で、CDDS_ITEMPREPAINTイベントが来た時、

  lpCustomDraw->clrTextBk = RGB(x,y,z);

  lpCustomDraw->nmcd.uItemState = CDIS_DEFAULT;

とuItemStateの値を変更しておく、というものです。

この値を変更せずにそのままにしておくと、以降のカスタムドローイベントでデフォルト処理が走ってしまい、LVIS_SELECTEDなアイテム(ハイライトされたアイテム)はデフォルトのハイライト色で描画されてしまっていました。特に、フォーカスを失った時は選択表示でなくなってしまうか、LVS_SHOWSELALWAYSスタイルを付けていても薄いグレー表示になるので見にくかったですが、この方法で完全に選択された表示を維持できるようになりました。