用VC写稍微漂亮的界面就是这么简单

来源:互联网 发布:淘宝企业店铺转个人 编辑:程序博客网 时间:2024/04/28 01:32

不是使用skinmagic,directui去动态加载皮肤,仅仅是使用VC/VS+MFC,再稍微写上几行代码,自己做一个稍微看得过去的界面,做的多的大牛就不看也罢了,呵呵

我就贴一个界面聊一个好了

main

我尽量的缩小了界面截图,大致可以看出是这样的一个界面就好,没有菜单,没有工具栏,状态栏。做东西自然是看客户需求,没事自己不用网上堆叠没用的东西,耗费自己开发的成本(时间,精力,越多的代码消耗的调试维护成本越高),就这样简简单单,凑合着看吧。

界面介绍:

上边一个标题栏,有最大化最小化按钮(当然有不同的状态,这里就显示默认状态normal好了)

中间一个背景图片

下边五个按键,响应客户点击然后进入子页面。

UI始终是用视觉相关的媒体文件(图片,动画或者视频)堆叠出来最后欺骗或者麻痹人的视觉的,比如我们平时看到的3D效果,如果要真的形成3D物件,显示设备就不能使简单的二维平面了,必须构建三维或者虚拟三维(美国大片里总是会有的)显示器,再比如简单的透明,不管是靠位掩生成的全透图,还是靠alpha混合搞出来的半透图,都是在同一个层面构造特殊的像素点,让人眼的宏观视觉感受到像是现实中的透明效果,不管怎么样,你的界面始终不会像玻璃,也不会是玻璃,没那样的物理特性,只好靠欺骗人眼啦,这也就是计算机抽象的源于生活高于生活,呵呵。

界面型软件不管是给客户做还是自己开发,界面先行没什么错,界面是整个软件的窗口,不管背后是简单抑或复杂,没人关心的,关心的是界面上是不是带来美的享受,效率上得让人受得了。差点扯跑题了,这会儿想说的是美工相关的东西,我们多少应该懂一点美工的,不管是Photoshop或者fireworks,总得懂点东西自己,不用做个按钮啥的也老是找人帮忙不是。先制定好具体的UI方案,比如整个软件界面的风格,需要构建哪些部分,划分出UI模块和子模块,UI的布局风格等,比如我们的标题栏,一般都是在窗体右边,如果哪天你遇到个左撇子的客户,那你得考虑是不是要把它往左边设计了。再说最下边的五个按钮,你可以选择方形的,也可以选择圆形的,也可以选择多边形的,你可以放最下边,也可以放中间,可以横着放,也可以竖着放,或者写个线性方程,按照某个路线放置,着都无所谓。当然为效果你可能会考虑切换方式,点击按键之后是直接刷新还是让界面像PPT中的那些切换风格一样切换(百叶窗,旋转,淡入淡出。。。),这些时候你可以借助第三方库,也可以自己写,不过要懂点图像数字处理上的基础东西啦。

还是先做几张图片吧,无论如何,所有的窗口都是矩形的,毋庸置疑,最初的设计就是这样的,如果你要构造稍微不规整的图形界面,哪怕是一个圆角矩形的,或者圆形,五角星,或者任意图像边缘决定的形状,你不得不去自己做具有掩色(透明色)的图片了,我们往往选择的透明色是软件界面上出现较少的,这个随意,看软件界面色彩风格啦。

比如这张图片,透明色#FF00FF,就是RGB(255,0,255),软件界面中没事不会用的太多的颜色。如果你想做它的其他状态,没问题,只需要选中中间的区域,色调,亮度变换下就可以了。如果你觉得边缘修剪的不够好,你可以一直CTRL + '+'放大图片,最后去逐个像素的修改。反正图片是你做的,透明区域也是你设定的,那么不透明的区域就是你的软件界面了,你可以任意设置任意形状啦,不过不太建议把文字写在图片上,除非是艺术字,否则如果你的按钮支持拉伸的话,文字拉伸会比较变态的。就这样,把图片贴到你想放的位置就可以了,当然如果你使用的是CButton或CBitmpaButton继承出来的按钮的话,更简单点了,就是设定下图片ID或者路径。

最后涉及到的就是标题栏了,如果你非要去用windowdc绘标题栏也无所谓,我们一般会选择没有标题栏的界面,然后贴上标题栏的图片,就可以了。标题栏不仅是用来显示标题的,可能更多的时候是让我们控制界面,最小化最大化,关闭,拖动等,修改后的标题栏是不能够拖动的,如果你想让那些区域可以使界面拖动的控制区域,只需要在NCHITTEST消息下边将这些区域映射为标题栏区域即可,没有什么的,你可以想象,界面拖动就是把这个桌面进行坐标平移,只是系统会判断你点击到哪些区域它才应该开始计算平移的起点和终点,NCHITTEST就是你来告诉它,哦,我点到这些区域的时候,你可以计算我拖动的起点终点了。(百度下NCHITTEST,ONHITTEST,太多了)。

 

当然,这些也许并不是你关注的,也许你是个循规蹈矩的控件使用者,你仅仅是想让自己的界面美化,这样的代价太大了,做图片,计算坐标,控制显示逻辑,你可以选择一些皮肤加载的解决方案,但是这些都看需求啦。下边再看个大家关注的好了,CListCtrl好了。

我们windows系统的开发自然也是用自己的东西,所以关注你使用的操作系统的细节,会帮助你很多,很多时候你想问自己,我可以不可以实现类似windows的XXX功能时,你几乎不用质疑,一般你想得到的都是可以的。比如你查看文件的时候多种模式(缩略图,详细信息,列表等),CListCtrl对应的就是这些个模式,简单的先看看图片列表,实现方式CListCtrl+CImageList.

实现上边的图片缩略图列表,你不需要自绘任何东西,MFC完全可以做到。首先CListCtrl设置为大图标模式,CImagelist添加位图图标,当然,需要实现你看到的上边的效果,VC6可能比较麻烦一点,主要是不同文件格式图像缩略图的生成和加载,确定的是VC6对bmp文件处理还好,换了其他的可能就不那么得心应手啦,还是随便弄个版本的VS,2005,2008任意选择一个吧,如果你的电脑配置还行,那VS2010也行,VS2010就是在配置不怎么好的电脑上体现出悲催到让人崩溃的慢。使用VS中的CImage加载不同类型的图片,实现内部放缩等功能。加载之后将数据或位图句柄绑定到CBitmap上,添加到Cimagelist,然后将你的CListCtrl和CImagelist关联起来并插入数据就可以啦。

当然,你可能还注意到这里的clistctrl有背景填充,设置背景图片是CLISTCTRL自带的功能,但是目前只支持的是使用图片路径,使用资源中的图片则是不行的,最简单的方式是你可以把资源中的图片解压到系统的某个路径,然后再从这个路径加载就可以了。

 

如果你只是想做一个小软件,你大可以去选择一些第三方库或者网上流传很广的N人写的控件,不用担心会出现BUG,如果到软件发布那天你还没测出因为这个控件产生的问题,以后遇到它引起的问题的可能性是很小的,况且大多数时间软件总会有BUG的,你在windows上写的桌面程序应该不可能会成为大型项目的服务器,不用担心太多的。不过不管时间是否紧迫,尽量花点时间去了解下你要用的东西,或者读源码,或者看userguide,如果 让你自己去做一个这样的东西几乎和他做的差不多的话,那你又有什么必要重复的去造轮子呢,你可能是语言或者设计的痴狂者,像boost库的那些作者一样,但是最好还是不要总是觉得别人的东西都很烂,还是自己的好,即使是武林高手,会用点已经做好的高科技武器没啥坏处的。当然,你可以自绘出更优秀的控件,或者写出更优秀的控件出来,分享给大家,如果你有时间的话。

再看看树和数据list吧,当然还有很多,VS新版本总会有新控件,不用多说,只要懂WINDOWS绘图原理和控件绘制的相关消息,设计能力不差的话,你可以绘制出自己想要的东西,否则,下载N人写好的控件吧。

 

 

 

 

雨都下了一天了,还不停,出去溜达溜达了,写东西也会写的缺氧。。。

 

 

 

 

 

 

原创粉丝点击