社区
界面
帖子详情
CHeaderCtrl 自绘丢失 XP 风格
DavidHsing
2008-06-07 11:00:09
各位大哥,
参考别人写的程序,自己扩展派生了一个类,基于 CListCtrl,包含一个 CHeaderCtrl。
为了排序需要,重载了 CHeaderCtrl 虚函数 DrawItem,用于显示上下箭头,现在有个问题:
自绘之后的 CHeaderCtrl 丢失了正常状态下的 XP 风格(变成了 win2000 样式),
各位看看有没有什么办法解决?
谢谢!
...全文
441
11
打赏
收藏
CHeaderCtrl 自绘丢失 XP 风格
各位大哥, 参考别人写的程序,自己扩展派生了一个类,基于 CListCtrl,包含一个 CHeaderCtrl。 为了排序需要,重载了 CHeaderCtrl 虚函数 DrawItem,用于显示上下箭头,现在有个问题: 自绘之后的 CHeaderCtrl 丢失了正常状态下的 XP 风格(变成了 win2000 样式), 各位看看有没有什么办法解决? 谢谢!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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 重绘
自绘
CList
Ctrl
(实现格子网状,去掉竖线)
本话题将深入探讨如何
自绘
CList
Ctrl
,以实现格子网状效果并去除竖线。 ###
自绘
CList
Ctrl
简介 CList
Ctrl
的默认样式包括了行与列之间的分隔线,这在许多情况下是必要的,但在某些设计需求中,可能需要去掉这些竖线以...
自绘
list
ctrl
- 在
自绘
过程中,可能还需要使用到C
Header
Ctrl
类,它是对
Header
Control的封装,用于处理列表的列头。 3. **List
Ctrl
的视图模式**: - List
Ctrl
有多种视图模式,如报告视图(Report View)、图标视图(Icon View...
C
Header
Ctrl
与CList
Ctrl
派生类
在Microsoft Foundation Class (MFC) 库中,`C
Header
Ctrl
` 和 `CList
Ctrl
` 是两个非常重要的类,它们分别用于处理Windows控件中的表头和列表视图。这两个类是基于Windows API中的`H
HEADER
CTRL
`和`LISTVIEW`控件进行...
改变 CList
Ctrl
、C
Header
Ctrl
高度、字体、颜色和背景
`CList
Ctrl
` 和 `C
Header
Ctrl
` 是其中两种常用的控件,分别用于实现列表视图和列头。这篇教程将深入探讨如何自定义这两个控件的样式,包括调整它们的高度、字体、颜色以及背景,以满足特定的UI需求。 **CList
Ctrl
**...
界面
15,980
社区成员
115,867
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章