软件的选项设置需要项目比较烦多,属性表是很好的选择。但是外观上、操作上都赶不上列表控制的属性表。C瓜哥最近做了一个Demo,给大家分享一下心得。
先看一下效果:
设置了背景位图
(demo和源码下载见页面底端)
这个漂亮的列表导航框,是靠自绘了个列表控件(CListBox)实现的。
类名是CTabList,此类的信息如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | //基类:CListBox //功能:1、专门用来导航的列表类,用于切换属性表的各个子页面; // 2、支持鼠标滑过效果; // 3、支持渐变分隔线; // 4、支持更改列表背景、列表光标、列表选中颜色等多种属性 // //…… // //注意: 1、本类提供的所有函数只能在列表框未显示之前调用; // 2、最好动态创建此类的对象,这样比较好控制。不过若要先在资源里设计好,再 // 关联CTabList的成员变量的话,一定要把控件的属性设置正确:WS_CHILD、 // WS_VISIBLE、LBS_OWNERDRAWVARIABLE、LBS_NOTIFY、LBS_HASSTRINGS // 3、SetFont函数必须在Create之前调用才能生效; // 4、列表的AddString,之后必须要调用SetIconInfo,之后方能AddIcon(当然也 // 必须要增加每项的图标,且数目与文本项目数应一致); // 5、做好前3步之后,不调用其它函数即可运行了.不过要DIY的话,就要自己选择了~ |
具体实现请大家下载源码自己研究下,方法还是自绘控件(用OwnerDraw)的经典方法、经典步骤。调用此类比较简单了,而且我也注释得比较充分,如果还有什么问题,请大家留言,我会耐心解答的。
然后剩下要解决的就是属性对话框的子页面问题。
我在资源里面新增了IDD_PAGE1~IDD_PAGE7七个对话框资源作为演示。把它们的Style设置成Child,Border设置成None,创建它们各自的类,基类都设置成CPage类(具体办法见后)。这个类是派生于CDialog的,主要目的就是方便更改这七个子对话框的共同的一些属性,比如更改背景颜色。当然还可以多在这个类里面花些功夫,自绘对话框,实现更复杂的界面效果。
CDialog构造必须需要一个资源ID,但是这个类不是直接来实现界面的,所以我们不填ID,忽略掉ClassWizard的警告!现在就需要把构造函数改成类似CDialog的那种了,因为是对CDialog的拓展。
声明:CPage(UINT nIDTemplate, CWnd* pParent = NULL);
实现:
1 2 3 4 5 6 7 | CPage::CPage(UINT nIDTemplate, CWnd* pParent/* = NULL*/) : CDialog(nIDTemplate, pParent) { //{{AFX_DATA_INIT(CPage) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } |
DoDataExChange不需要了,因为它上面没有具体的控件。把头文件和cpp文件里面的部分都注释掉!
设置那七个子页面类时,在BaseClass里面看不到CPage?没关系,先设置成CDialog,然后再替换一下即可!
最后的事情就是,在主对话框类中创建CTabList的一个实例(推荐动态创建。不过用关联控件成员变量的方法也可,要注意勾选对对应属性。这在前面已经说过),设置好相应的属性。然后创建7个子页面的实例,把其指针加到CPtrArray对象中去,这样便于管理。
主干部分已经叙述完了,细节详见代码~
————————–




数模场地你们在哪?怎么样,都什么时间开发
在B区的一个机房里,有数个队,而且只有一个上网端口。条件比模拟时差太多了
这个不错,但是很久没碰代码了,都还老师了!
你也学过VC++?
博主貌似很牛啊
因为我是一个VC++白痴,除了这个其它的也折腾过,不过也只是半罐水
你写的东西太专业了。呵呵。{smile:36}
VC++是严谨的,有点bug就不能通过,我就喜欢它这一点!
谢谢啦!!!!
第一个下载源码的人,我应该感谢你才是。帮我推广下,可以到处发源码,不过请保留版权注释
什么东东?
下载Demo运行一下就知道了,呵呵
楼主历害
你也会VC++?
研究研究
之前以“看看”作为昵称的也是你吗?
西瓜哥果然强。
为什么要用“果然”?
感觉效果不错
这只是搭了一个框架。要实现更好的效果,丰富这个框架就行了
看下如何。
到底觉得如何?
哈,稍微说下(仅个人观点):
1.代码风格不甚好,可以看看codeproject上那些人的代码…
2.做界面前途很多人不看好…
3.要效果,codeproject上有很多…
1、代码风格还在跟进当中,毕业到了公司再来实现规范
2、喜欢做这个不可以吗?我的u14soft.com(有意思软件)就是做我喜欢的软件(完全免费),而且更加注重的是用户体验!
工作需要的东东由老板决定,等我有了老板再决定吧!
3、你自己不会做,很难用别人的代码的
C瓜哥 是我学习的榜样!
不敢当啊, 不敢当!
3.呵呵,我不是初学者..我的意思是idea也许更重要
我就是有很多idea啊,可是都找不到直接实现我idea的代码,所以就只有自己写啰!
我觉得只有基础扎实了,才可能灵活应用。尤其是想在某一块上学精的,拿来主义不是一个好办法。个人觉得这只适合工作的时候缩短软件开发周期……
PS.其它方面的东东我也在学啊,我也不单只搞界面。
回复112:能给我说下我的代码不规范主要体现在哪些方面吗?举几个例子看看{smile:rolleyes}
了解下了
不错,不错!
学习一下
好东西,分享一下。
瓜哥好人,好人工作顺利,好人一生开心,难得有把自己的好东西分享的人。