【发布时间】:2014-05-02 21:59:53
【问题描述】:
我正在使用自定义绘图来尝试创建透明树视图(现在我正在测试启用视觉样式时)。
我的CDDS_PREPAINT 处理程序工作正常,树的父级背景位图绘制正确。
我尝试在使用SetBkColor( ((LPNMCUSTOMDRAW)lParam)->hdc, TRANSPARENT ); 的地方添加CDDS_ITEMPREPAINT 处理程序并返回CDRF_NEWFONT,但失败了。节点使用默认的白色背景绘制。
如何使项目的文本背景透明?
谢谢。
最好的问候。
下面是说明性代码sn-p:
switch( ((LPNMCUSTOMDRAW)lParam)->dwDrawStage )
{
case CDDS_PREPAINT:
{
DrawThemeParentBackground(
((LPNMCUSTOMDRAW)lParam)->hdr.hwndFrom,
((LPNMCUSTOMDRAW)lParam)->hdc,
&((LPNMCUSTOMDRAW)lParam)->rc );
// since tree is in dialog box we need below statement
SetWindowLongPtr( hDlg, DWLP_MSGRESULT, (LONG_PTR)CDRF_NOTIFYITEMDRAW );
return TRUE;
}
break;
case CDDS_ITEMPREPAINT : // how to properly handle this ???
{
SetBkMode( ((LPNMCUSTOMDRAW)lParam)->hdc, TRANSPARENT );
SetWindowLongPtr( hDlg, DWLP_MSGRESULT, (LONG_PTR)CDRF_NEWFONT );
return TRUE;
}
break;
}
【问题讨论】:
-
您是否尝试将
lParam转换为LPNMTVCUSTOMDRAW并将clrTextBk成员设置为CLR_NONE? -
@user1793036:是的,我试过了,背景颜色变成黑色,正如我所料。感谢您尝试提供帮助。最好的问候。
-
退回白色画笔时会发生什么?返回 (INT_PTR)CreateSolidBrush(RGB(255,255,255));
-
@Eejin:白刷应该去哪里退?
标签: c++ winapi treeview custom-draw