LISTCRTL 控件 的OnCustomDraw 函数不执行,怎么修改,如何解决

lixiang li 40 信誉分
2024-06-21T12:47:08.8+00:00

这段代码消息没响应,函数不执行,怎么让消息映射,函数执行

ON_NOTIFY(NM_CUSTOMDRAW,IDC_MYLISTBOX, &CMainWindow::OnCustomDraw)

afx_msg void OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult);

void CMainWindow::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult)

{

NMCUSTOMDRAW* pcd = (NMCUSTOMDRAW*)pNMHDR;

switch (pcd->dwDrawStage)

{

    FillRect(pcd->hdc, &pcd->rc, m_myCustomBrush);

    *pResult = CDRF_SKIPDEFAULT;

    return;

}

*pResult = CDRF_DODEFAULT;

}

Visual Studio
Visual Studio
一系列 Microsoft 集成开发工具套件,用于生成适用于 Windows、Web 和移动设备的应用程序。
107 个问题
C++
C++
一种通用的高级编程语言,作为 C 编程语言的扩展而创建,除了用于低级别内存操作的功能外,还具有面向对象、泛型和功能性等特点。
147 个问题
0 个注释 无注释
{count} 票

1 个答案

排序依据: 非常有帮助
  1. Minxin Yu 12,086 信誉分 Microsoft 供应商
    2024-06-24T06:57:26.2333333+00:00

    您好,

    上面的代码switch语法有错误。
    OnCustomdraw(NMHDR* pNMHDR, LRESULT* pResult)

    {

    LPNMLVCUSTOMDRAW pNMLVCD = reinterpret_cast<LPNMLVCUSTOMDRAW>(pNMHDR);
    	*pResult = CDRF_DODEFAULT;
    	switch (pNMLVCD->nmcd.dwDrawStage)
    	{
    	case CDDS_PREPAINT:
    		*pResult = CDRF_NOTIFYITEMDRAW;
    		break;
    	case CDDS_ITEMPREPAINT:
    	{
    		pNMLVCD->clrTextBk = RGB(200, 200, 255);
    		pNMLVCD->clrText = RGB(0, 0, 200);
    		*pResult = CDRF_NOTIFYSUBITEMDRAW;
    	}
    		break;
    	case CDDS_ITEMPREPAINT | CDDS_SUBITEM:		
    	{	
    		pNMLVCD->clrTextBk = RGB(200, 200,255);
    		pNMLVCD->clrText = RGB(0, 0, 200);
    	}
    		break;
    	}
    }
    

    如果答案是正确的,请点击“接受答案”并点赞。 如果您对此答案还有其他疑问,请点击“评论”。 注意:如果您想接收相关电子邮件,请按照我们的文档中的步骤启用电子邮件通知 此线程的通知。

    0 个注释 无注释

你的答案

问题作者可以将答案标记为“接受的答案”,这有助于用户了解已解决作者问题的答案。