CHeaderCtrl 自绘丢失 XP 风格

DavidHsing 2008-06-07 11:00:09
各位大哥,

参考别人写的程序,自己扩展派生了一个类,基于 CListCtrl,包含一个 CHeaderCtrl。
为了排序需要,重载了 CHeaderCtrl 虚函数 DrawItem,用于显示上下箭头,现在有个问题:
自绘之后的 CHeaderCtrl 丢失了正常状态下的 XP 风格(变成了 win2000 样式),
各位看看有没有什么办法解决?
谢谢!

...全文
430 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
mtj520 2011-09-07
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 willson93639450 的回复:]
路过,看看 学习学习
[/Quote]
+1
DavidHsing 2008-06-11
  • 打赏
  • 举报
回复

邮件收到,非常感谢!

我在你的基础上进一步进行了完善,已经很完美的实现了效果。

我的思路是首先采用你的判断方法,
再看如果 COMCTL32.DLL 版本低于 6.0,
并且没有使用 XP 主题样式的,
就自绘箭头(不是采用 CImageList)。

CPen penLight(PS_SOLID, 1, GetSysColor(COLOR_3DHILIGHT));
CPen penShadow(PS_SOLID, 1, GetSysColor(COLOR_3DSHADOW));

这样自绘的好处是采用系统颜色,和系统一致,并且比较有立体感。
我也已经把那部分核心代码发给你了,请指教,呵呵

结贴给分啦!
willson93639450 2008-06-10
  • 打赏
  • 举报
回复
路过,看看 学习学习
DavidHsing 2008-06-09
  • 打赏
  • 举报
回复
噢?你有没有具体的例子?可否发过看看?
我的信箱 DavidHsing@163.com

我现在的做法是更改 HD_ITEM 格式为自绘
hdItem.fmt |= HDF_OWNERDRAW;
然后重载 DrawItem(),在这个函数里面调用
DrawFrameControl(lpDrawItemStruct->hDC, &lpDrawItemStruct->hDC, DFC_BUTTON, DFCS_BUTTONPUSH);
bug_forever 2008-06-09
  • 打赏
  • 举报
回复
我一般采用的是我所说的两种方法相结合的方法,判断程序运行是否使用的是6.0以上版本的dll,是的话就用系统自带的,不是的话就使用imagelist的方法。这样的好处是在vista下list排序的箭头会和系统的统一,也较为好看。
使用第一种方法你可以参看HDITEM这个结构,另外我觉得应该不会出现你所担心的问题
DavidHsing 2008-06-09
  • 打赏
  • 举报
回复
非常感谢 bug_forever!
1、对于 CHeaderCtrl,我知道本身有个虚函数 OnDrawSortArrow,但是不知道在哪里去触发它;对于 Win2k 来说,可能就不是很好,或者干脆就没有这个效果;
2、加 CImageList 也是个办法,但是我担心这样会把它自身本来的 ImageList 冲掉。比如已经设置了列标题的小图片,如果动态改变 CImageList 指针,恐怕会影响原来的小图片显示。不知道我的担心有没有道理?我原本计划是采用两个 CImageList 的,但是发现存在这个问题,所以线索又中断了 :(
DavidHsing 2008-06-08
  • 打赏
  • 举报
回复
已经试过 Default() 了,不管用。
菜牛 2008-06-08
  • 打赏
  • 举报
回复
既然自绘,当然是你自己来绘制喽。试试先调用基类的DrawItem。
tccqs 2008-06-08
  • 打赏
  • 举报
回复
up and mark,,
bug_forever 2008-06-08
  • 打赏
  • 举报
回复
如果你只要满足排序的需要的话,有两种简单直接的方法:
1、有一定的局限性,只能在xp以上的操作系统上面使用,就是listhead本身就有排序小箭头属性,具体你可以查下msdn,注意这个属性只有在程序调用comctrl32这个dll的6.0版本以上的时候才有效果
2、一个普遍的方法,就是listhead的属性里头是可以添加图片的,你将排序的图片做好,直接讲图片加上去就可以了。

这样的话你的head就不会丢失xp的风格了
DavidHsing 2008-06-07
  • 打赏
  • 举报
回复

如图:

15,979

社区成员

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

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