VisualStudio2005, MFC, WindowsXP。
リストビューで選択した行のみの背景色を変更したいのですが、以下の書き方ではうま
くいきません。
NM_CUSTOMDRAWのイベントハンドラからOnCustomDraw関数を作成し、以下のようにしまし
た。
void CXXXView::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult)
{
LPNMLVCUSTOMDRAW lplvcd = (LPNMLVCUSTOMDRAW)pNMHDR;
switch(lplvcd->nmcd.dwDrawStage)
{
case CDDS_PREPAINT:
*pResult = CDRF_NOTIFYSUBITEMDRAW;
break;
case CDDS_ITEMPREPAINT:
*pResult = CDRF_NOTIFYSUBITEMDRAW;
break;
case CDDS_ITEMPREPAINT | CDDS_SUBITEM:
*pResult = CDRF_DODEFAULT;
CData mdata = GetDocument()->m_defcell;
CListCtrl& list = GetListCtrl();
POSITION pos = list.GetFirstSelectedItemPosition();
int i = list.GetNextSelectedItem(pos);//※
if (lplvcd->nmcd.dwItemSpec == i)
lplvcd->clrTextBk = RGB(255, 200, 150);
}
}
※の箇所をint a = 2に変更で3行目の色が変更された。
選択した行の背景色を指定した色に変更できるようによろしくお願いします。
NMLVCUSTOMDRAW構造体のnmcd.uItemStateで判定できないでしょうか?
選択状態になっているのであれば、CDIS_SELECTEDになっていると思うので
わざわざ一致判定をしなくても大丈夫ではないかと思うのですが。
if (nmcd.uItemState & CDIS_SELECTED)を条件としてみましたが、選択行ではなく全体
の色が変更されてしまいました。
もう少し調べてやってみたいと思います。
随分前にどこかの掲示板でリストコントロールの選択色を変えたいと言うのが
あったんですが、もしかしてそれを言われてますか?
確か、選択色はカスタムドロウでは変更できないと言う話だったような。
一行選択できるようにしているなら多分、その行の色は変えられないと思います。
どうしてもやりたいならオーナードロウで全て自分で描画するしかなかったような
気がします。
実行したかったのは、一度選択された行の色の変更でした。
現在選択している行を変えたいというわけではありません。
データのlplvcd->nmcd.dwItemSpec番目の中のデータの中に選択されたフラグをたてるこ
とで解決しました。
伝わりづらい質問ですいませんでした。