最近琢磨着把之前做的一个小工具,从命令行版本升级到带界面的版本。以前写MFC界面,总觉得有点老气,做出来跟好几年前的软件似的。虽然不追求多炫酷,但至少得看着舒服,用起来顺手不是?
本站为89游戏官网游戏攻略分站,89游戏每日更新热门游戏,下载请前往主站地址:www.gm89.icu
刚开始动手,我就是直接拖控件,一个按钮,一个文本框,堆一块儿。结果就是,功能一多,界面上密密麻麻全是东西,自己看着都头疼,更别说给别人用了。不行,这肯定不行,得好好研究研究怎么把界面做得清爽点。
琢磨着怎么分区,发现了个好东西:制表控件!
我这工具,有几个不同的功能模块,比如“配置管理”、“数据处理”、“日志查看”。如果都塞到一个界面里,那屏幕得多大才够?我最开始想的是,是不是做几个子窗口,点一个按钮弹一个。后来一想,这玩意儿弹来弹去的,用户体验也太差了。就在琢磨的时候,突然想起来很多软件都有那种“选项卡”一样的界面,点一下就切换到不同内容。
赶紧去翻教程,一查,,这玩意儿叫CTabCtrl,中文名字叫制表控件或者选项卡控件。这不就是我想要的吗!我马上就把它拖到我的主对话框上。
怎么用? 拖上去之后,这玩意儿光秃秃的,得给它加“页”。我先给主对话框弄了三个子对话框,就当是每页的内容容器。然后回到主对话框,找到
CTabCtrl的属性,发现可以手动给它添加标签页,我就把“配置管理”、“数据处理”、“日志查看”这三个名字加上去了。关联内容: 关键是怎么把那三个子对话框跟这三个标签页关联起来?我在主对话框的
OnInitDialog里头,写了几行代码。主要是创建那三个子对话框的实例,然后把它们的位置调整到CTabCtrl里面去。再监听CTabCtrl的切换消息,每次切换标签页的时候,就把当前页对应的子对话框显示出来,其他页的就隐藏掉。这么一搞,哇,效果立马就出来了,整个界面一下子就规整了!
我点着那几个标签页,心里美滋滋的,这一下,我的几个功能模块就分得清清楚楚了,界面看着一点都不乱。那种把乱糟糟的东西整理得井井有条的感觉,真是舒服。
要看大量数据?列表控件绝对是神器!
我的“数据处理”和“日志查看”模块,那可都是要展示一大堆数据的。什么文件列表,处理结果,运行日志,如果只是用一堆编辑框去显示,那简直是灾难。我一开始就是这么想的,结果光是看那几行代码,就觉得头大。数据一多,滚动条拉到手抽筋,还不好找。
然后我就想起了资源管理器里那种显示文件列表的界面,一格一格的,还能排个序啥的。又是一顿查,找到了CListCtrl,列表控件!我的天,这简直就是为我这种需求量身定做的。
布置列头: 拖一个
CListCtrl到我的“数据处理”子对话框里。得给它加列头,比如“文件名”、“大小”、“修改日期”什么的。我在代码里用InsertColumn一点点把它们加上去,还能设置列宽。填充数据: 接下来就是往里头塞数据了。用
InsertItem插入一行,然后用SetItemText给每一列填内容。我把之前从文件里读出来的数据,一行行地填进去,瞬间就变得清晰明了。而且CListCtrl还有好几种显示模式,比如报表模式(就是一格格的)、大图标模式、小图标模式。我选了报表模式,最适合看详细数据。交互功能: 更牛的是,它还自带了排序功能,点一下列头就能排序。虽然这个得自己写点代码处理,但基础框架都在那儿了。我还给它加了双击事件,双击某一行,就能弹出详细信息,这简直是太方便了!
当我看着那些之前乱七八糟的数据,现在整整齐齐地躺在CListCtrl里,感觉整个工具的“档次”都上来了。用户想看一目了然,还能自己筛选排序,这体验感一下子就提升了不止一个档次。
让工具更有人情味:进度条安排上!
有些数据处理,它需要点时间。以前就是傻等着,屏幕一动不动,我都不知道程序是卡死了还是在干活。这不行,用户得知道我在干嘛
这时候,CProgressCtrl,也就是进度条控件,就派上用场了。
拖拽和初始化: 我在需要长时间操作的界面上,拖了一个
CProgressCtrl。然后在开始处理数据之前,给进度条设置最大值和最小值,一般是0到100。然后让它显示出来。更新进度: 在数据处理的循环里,每处理完一部分,我就调用
SetPos更新一下进度条的当前位置。看着那个蓝色的条条一点点往前走,心里踏实多了。处理完了,再把进度条隐藏掉。
虽然只是一个小小的进度条,但它给用户带来的那种“我知道你在忙”的反馈,真的是太重要了。用户不会觉得程序“假死”了,整个等待过程也变得不那么煎熬。这个小小的优化,让我的工具变得更“友好”了。
说到底,MFC的控件库虽然看着有点古老,但只要用心去琢磨、去搭配,利用好这些现成的“积木”,一样能搭出功能强大、用起来顺手的界面。这回折腾下来,我对MFC的界面设计又有了新的体会。这些控件,真的很好用,能解决大问题!