c++ - 虚拟 ListView 没有得到 CDDS_ITEMPREPAINT c++

标签 c++ listview winapi

我正在尝试根据我在文本框中键入的内容更改 ListView 项的颜色。当用户根据我使用的某些逻辑键入一些文本时,我有以下代码 ListView_SetItemState(hList, wordid, LVIS_FOCUSED | LVIS_SELECTED, LVIS_FOCUSED | LVIS_SELECTED);

然后在我的 WM_NOTIFY block 上有这个;

case WM_NOTIFY:
{

    NMHDR *pNMHDR= (NMHDR*)lParam;

    switch(pNMHDR->code){
           case LVN_GETDISPINFO:
                OnGetdispinfo(pNMHDR);
                break;
            case NM_CUSTOMDRAW:
               wmnot= OnDraw(pNMHDR);
               return wmnot;
                break;
         }

    return 0;

}

OnGetdispinfo 函数使用 Sqlite 填充我的虚拟 ListView 。在我的 ondraw 函数中我有这个

int OnDraw (NMHDR* pNMHDR){
    int nIndex,state;
    int result;
    NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>( pNMHDR ); 

if (pLVCD->nmcd.hdr.hwndFrom==hList)
{
    switch (pLVCD->nmcd.dwDrawStage)
    {
    case CDDS_PREPAINT:
        result= CDRF_NOTIFYITEMDRAW;
        break;
    case CDDS_ITEMPREPAINT:
        result=CDRF_NOTIFYSUBITEMDRAW;
        break;
    case CDDS_SUBITEM|CDDS_ITEMPREPAINT:
        nIndex=pLVCD->nmcd.dwItemSpec;
        state=ListView_GetItemState(hList,nIndex,LVIF_TEXT |LVIF_PARAM);
        if(state&LVIS_SELECTED==LVIS_SELECTED)   
        {
            pLVCD->clrTextBk=RGB(124,34,78);
            return CDRF_NEWFONT;
        }
        result= CDRF_DODEFAULT;
        break;
    default:
        result=CDRF_DODEFAULT;
        break;
    }
}
    return result;  // CDRF_DODEFAULT



}

我收到 CDDS_PREPAINT 消息,但我根本没有收到 CDDS_ITEMPREPAINT 消息。

根据 Spy++,我的 Listview 有这种样式

Windows 样式 (5021580D)

WS_CHILDWINDOW WS_VISIBLE WS_VSCROLL WS_TABSTOP LVS_REPORT LVS_SINGLESEL LVS_SHOWSELALWAYS

扩展样式 (00000204)

WS_EX_LEFT WS_EX_LTRREADING WS_EX_RIGHTSCROLLBAR WS_EX_NOPARENTNOTIFY WS_EX_CLIENTEDGE

最佳答案

如果您的控件在对话框中,您必须使用以下方法返回结果代码:

SetWindowLongPtr(hWnd, DWLP_MSGRESULT, result);

然后从 DlgProc 本身返回 TRUE

关于c++ - 虚拟 ListView 没有得到 CDDS_ITEMPREPAINT c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26510616/

相关文章:

java - C++ 和 Java 中的溢出

c++ - 如果 key 不存在,我可以从 std::map 获取值而不会崩溃吗?

android - 如何使用适用于 Android 的 MVP 模式控制 ListView

android - 从对话框更新 Activity 的 ListView

c++ - 使用 WASAPI 录制音频流

multithreading - WaitForSingleObject while debugging(调试期间一般缓慢)

c++ - 超高清 tx_waveforms

c++ - 如何防止打印最后一个 vector 项目?

java - 如何创建一个 ListView ,以便单击每个列表项将打开不同的 Activity ?

c++ - 将 SNMP OID 转换为 Win32 上的描述性名称