关于CListCtrl的重绘问题

山伟 2009-09-07 06:25:43
我现在要将一个CImageList放到一个继承自CListCtrl的列表视图中。
现在已经将读入的Image插入到CListCtrl中了,现在的效果就像windows中文件夹缩略图的样子,被选中后Image的rect按照BORDERSELECT属性出现一个边框。
但是我需要选中后的效果像Adobe\Reader9.0那样选中后Image的地方不变,而Image外有一个大的背景(类似图片被选中时出现的半透明效果),请大侠们给出出注意,我该怎么做?思路对了也给分!谢谢

另外:
在void CMyListCtrl::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLVCUSTOMDRAW lplvcd = (LPNMLVCUSTOMDRAW)pNMHDR;
switch(lplvcd->nmcd.dwDrawStage)
{
case CDDS_PREPAINT:
{
*pResult = CDRF_NOTIFYITEMDRAW; // ask for item notifications.
break;
}

case CDDS_ITEMPREPAINT:
{
*pResult = CDRF_NOTIFYITEMDRAW;
}
case CDDS_ITEMPOSTPAINT:
*pResult = CDRF_SKIPDEFAULT;
break;

default:
*pResult = CDRF_DODEFAULT;
break;
}
}
这里我不知道应该如何写
查询msdn后对于lplvcd->nmcd.dwDrawStage的几种绘制阶段看不明白,他们的执行顺序是什么?请高手讲解下OnNMCustomdraw
...全文
140 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ToCpp 2009-09-08
  • 打赏
  • 举报
回复
http://www.codeproject.com/KB/wtl/WTL_ListCtrl.aspx
这个应该可以,但是是WTL写的楼主可以参考下
muzizongheng 2009-09-08
  • 打赏
  • 举报
回复
if (CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage)

在这里处理。

注意: 最好根据当前listctrl的风格来自绘, 比如report是怎么画的, icon是怎么画的 ==。
xylicon 2009-09-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 shanwei355 的回复:]
引用 1 楼 xylicon 的回复:
执行顺序应该是 CDDS_PREPAINT -> CDDS_ITEMPREPAINT -> CDDS_ITEMPOSTPAINT

http://www.enet.com.cn/article/2004/0223/A20040223288527.shtml
这里有个比较容易理解的例子。


那我现在写一个DrawItem的函数,对pNMHDR内的信息进行修改重绘。应该放在CDDS_ITEMPREPAINT 里面对吗?
[/Quote]
可以在CDDS_ITEMPREPAINT 也可以在 CDDS_ITEMPOSTPAINT 中处理。

一般在CDDS_ITEMPREPAINT 中初始化一些DC的信息,例如设置DC的font之类,然后在CDDS_ITEMPOSTPAINT 中还原原来的font。

但也可以把所有的工作放在CDDS_ITEMPREPAINT 中处理,不需要处理CDDS_ITEMPOSTPAINT。
山伟 2009-09-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xylicon 的回复:]
执行顺序应该是 CDDS_PREPAINT -> CDDS_ITEMPREPAINT -> CDDS_ITEMPOSTPAINT

http://www.enet.com.cn/article/2004/0223/A20040223288527.shtml
这里有个比较容易理解的例子。
[/Quote]

那我现在写一个DrawItem的函数,对pNMHDR内的信息进行修改重绘。应该放在CDDS_ITEMPREPAINT 里面对吗?
oyljerry 2009-09-07
  • 打赏
  • 举报
回复
从字面就知道 Pre---是之前,Post---是之后
xylicon 2009-09-07
  • 打赏
  • 举报
回复
执行顺序应该是 CDDS_PREPAINT -> CDDS_ITEMPREPAINT -> CDDS_ITEMPOSTPAINT

http://www.enet.com.cn/article/2004/0223/A20040223288527.shtml
这里有个比较容易理解的例子。

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧