CListCtrl重绘问题 重绘后的CListCtrl每个单元格都有不同的背景色,当拖动列宽时,会出现白色痕际,随之又恢复背景色,请问有没有办法去除拖动过程中出现的那种白色现象? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 那是因为ListCtrl窗口用白色画刷清除了一下背景,所以可以在WM_ERASEBKND里直接return true;就可以避免清除背景,这样就不会有白色痕际。 那个WM_ERASEBKND不行呀,反回TRUE后还是一样的,而且非数据项区还不能刷新了 *pResult = 0; LPNMLVCUSTOMDRAW lpvcd = reinterpret_cast<LPNMLVCUSTOMDRAW>(pNMHDR); if(CDDS_PREPAINT == lpvcd->nmcd.dwDrawStage) { *pResult = CDRF_NOTIFYITEMDRAW; } else if(CDDS_ITEMPREPAINT == lpvcd->nmcd.dwDrawStage) { if(1 == lpvcd->nmcd.dwItemSpec) { CRect rect; CListCtrl &list = GetListCtrl(); list.GetItemRect(lpvcd->nmcd.dwItemSpec, &rect, LVIR_BOUNDS); rect.DeflateRect(0, 1, 0, 1); CDC *pdc = list.GetDC(); CMemDC memdc(*pdc, this); CDC &dc = memdc.GetDC(); CBrush brush; brush.CreateSolidBrush(RGB(0x99, 0x99, 0x0)); dc.FillRect(&rect, &brush); CString str; str = list.GetItemText(lpvcd->nmcd.dwItemSpec, 0); dc.SetBkMode(TRANSPARENT); dc.DrawText(str, &rect, 0); brush.DeleteObject(); pdc->BitBlt(rect.left, rect.top, rect.Width(), rect.Height(), &dc, rect.left, rect.top, SRCCOPY); ReleaseDC(&dc); ReleaseDC(pdc); *pResult = CDRF_SKIPDEFAULT; return; } *pResult = CDRF_NOTIFYSUBITEMDRAW; } else if((CDDS_SUBITEM | CDDS_PREPAINT | CDDS_ITEM) == lpvcd->nmcd.dwDrawStage) { if(3 == lpvcd->iSubItem) { lpvcd->clrText = RGB(0xcc, 0, 0); //lpvcd->clrTextBk = RGB(0x99, 0x99, 0x0); } *pResult = CDRF_DODEFAULT; } MFC中使用外部软件打开图片,然后显示在图片控件中,怎么做?在线等谢谢 COleDateTime format 出错 一篇好很感人又可恨的文章 CFormView问题~~~~~~在线等待! 请教类型问题 请问::托盘图标弹出的菜单怎样才能响应助记键???? 设置编辑控件的部分字体的背景颜色的问题? link错误,请高手指点是否设置问题?? Directx中顶点缓存索引缓存是否有大小限制,创建512*512地形显示不全 寻求简单的打印方法 .. 控件坐标问题 MFC下动画运行一段时间后出现问题
LPNMLVCUSTOMDRAW lpvcd = reinterpret_cast<LPNMLVCUSTOMDRAW>(pNMHDR);
if(CDDS_PREPAINT == lpvcd->nmcd.dwDrawStage)
{
*pResult = CDRF_NOTIFYITEMDRAW;
}
else if(CDDS_ITEMPREPAINT == lpvcd->nmcd.dwDrawStage)
{
if(1 == lpvcd->nmcd.dwItemSpec)
{
CRect rect;
CListCtrl &list = GetListCtrl();
list.GetItemRect(lpvcd->nmcd.dwItemSpec, &rect, LVIR_BOUNDS);
rect.DeflateRect(0, 1, 0, 1);
CDC *pdc = list.GetDC();
CMemDC memdc(*pdc, this);
CDC &dc = memdc.GetDC(); CBrush brush;
brush.CreateSolidBrush(RGB(0x99, 0x99, 0x0));
dc.FillRect(&rect, &brush);
CString str;
str = list.GetItemText(lpvcd->nmcd.dwItemSpec, 0);
dc.SetBkMode(TRANSPARENT);
dc.DrawText(str, &rect, 0);
brush.DeleteObject();
pdc->BitBlt(rect.left, rect.top, rect.Width(), rect.Height(), &dc, rect.left, rect.top, SRCCOPY);
ReleaseDC(&dc);
ReleaseDC(pdc);
*pResult = CDRF_SKIPDEFAULT;
return;
}
*pResult = CDRF_NOTIFYSUBITEMDRAW;
}
else if((CDDS_SUBITEM | CDDS_PREPAINT | CDDS_ITEM) == lpvcd->nmcd.dwDrawStage)
{
if(3 == lpvcd->iSubItem)
{
lpvcd->clrText = RGB(0xcc, 0, 0);
//lpvcd->clrTextBk = RGB(0x99, 0x99, 0x0);
}
*pResult = CDRF_DODEFAULT;
}