:
case WM_NOTIFY:
if (((LPNMHDR)lParam)->hwndFrom == GetDlgItem(hwnd, IDC_List2) && ((LPNMHDR)lParam)->code == NM_CUSTOMDRAW)
{
int result = CDRF_DODEFAULT;
LPNMLVCUSTOMDRAW lplvcd = (LPNMLVCUSTOMDRAW)lParam;
switch (lplvcd->nmcd.dwDrawStage)
{
case CDDS_PREPAINT:
result = CDRF_NOTIFYITEMDRAW;
break;
case CDDS_ITEMPREPAINT: //never gets executed
lplvcd->clrText = RGB(255, 0, 0);
result = CDRF_NEWFONT;
break;
}
//SetWindowLongPtr(hEdit, DWLP_MSGRESULT, result);
//return TRUE;
return result;
}
break;
これらは、ListViewコントロールのプロパティは次のとおりです。
この
は私がメッセージに応答する方法ですもちろん私は
return the values accordinglyする必要があります。問題は、ウィンドウに間違った変数を使用したことです(この場合は
hEdit
)。誰もが気にならば
これは修正版です:
case WM_NOTIFY:
if (((LPNMHDR)lParam)->hwndFrom == GetDlgItem(hwnd, IDC_List2) && ((LPNMHDR)lParam)->code == NM_CUSTOMDRAW)
{
int result = CDRF_DODEFAULT;
LPNMLVCUSTOMDRAW lplvcd = (LPNMLVCUSTOMDRAW)lParam;
switch (lplvcd->nmcd.dwDrawStage)
{
case CDDS_PREPAINT:
result = CDRF_NOTIFYITEMDRAW;
break;
case CDDS_ITEMPREPAINT:
lplvcd->clrText = RGB(255, 0, 0);
result = CDRF_NEWFONT;
break;
}
SetWindowLongPtr(hDialog, DWLP_MSGRESULT, result);
return TRUE;
}
break;
あなたが詳細は(LVS_REPORTを)ビューを使用する場合、あなたはカスタムドローサブ項目をする必要があります、より複雑です。そのためにはCDRF_NOTIFYSUBITEMDRAW | CDDS_PREPAINTステージからのCDRF_NEWFONT。 [ここで言及](https://msdn.microsoft.com/en-us/library/windows/desktop/ff919573(v=vs.85).aspx) –
私は今は行全体を色づけすることはできますが、私のプログラムではそれを動作させることさえできません。私は少しのテストを行い、ウィンドウプロセスで通知を処理した仮想リストビューを持つ新しいテストプロジェクトを作成しました(ダイアログは表示されません)。おそらくモーダルダイアログボックスのために動作しないのでしょうか? – ptim
[ダイアログプロシージャから値を返す](https://blogs.msdn.microsoft.com/oldnewthing/20031107-00/?p=41923) – IInspectable