社区
界面
帖子详情
CHeaderCtrl 自绘丢失 XP 风格
DavidHsing
2008-06-07 11:00:09
各位大哥,
参考别人写的程序,自己扩展派生了一个类,基于 CListCtrl,包含一个 CHeaderCtrl。
为了排序需要,重载了 CHeaderCtrl 虚函数 DrawItem,用于显示上下箭头,现在有个问题:
自绘之后的 CHeaderCtrl 丢失了正常状态下的 XP 风格(变成了 win2000 样式),
各位看看有没有什么办法解决?
谢谢!
...全文
430
11
打赏
收藏
CHeaderCtrl 自绘丢失 XP 风格
各位大哥, 参考别人写的程序,自己扩展派生了一个类,基于 CListCtrl,包含一个 CHeaderCtrl。 为了排序需要,重载了 CHeaderCtrl 虚函数 DrawItem,用于显示上下箭头,现在有个问题: 自绘之后的 CHeaderCtrl 丢失了正常状态下的 XP 风格(变成了 win2000 样式), 各位看看有没有什么办法解决? 谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
如图:
Clist
Ctrl
+ C
Header
Ctrl
+ ScrollBar重绘
Clist
Ctrl
重绘 C
Header
Ctrl
重绘 ScrollBar 重绘
C
Header
Ctrl
与CList
Ctrl
派生类
C
Header
Ctrl
与CList
Ctrl
派生类
自绘
CList
Ctrl
的
Header
Ctrl
今天参考http://www.vckbase.com/document/viewdoc/?id=1855 关于改变 CList
Ctrl
、C
Header
Ctrl
高度、字体、颜色和背景的代码。想实现一个改变
Header
的表头颜色的类, 自己手工根据提示Copy了主要代码如下: 但是在...
MFC列表List Control
自绘
类Demo
1.基于MFC的CList
Ctrl
和C
Header
Ctrl
类,进行重绘。 2.支持表头字体,颜色,宽度,背景设置。 3.支持行列数据的字体颜色,背景,大小,对齐,可编辑设置。 4.支持网格线,整体背景色设置。 可以基于"
Header
Ctrl
Ex.h,...
改变 CList
Ctrl
、C
Header
Ctrl
高度、字体、颜色和背景
改变 CList
Ctrl
、C
Header
Ctrl
高度、字体、颜色和背景的示例程序共享资料
界面
15,979
社区成员
115,896
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章