VC++程序员如何作好界面

本屌丝在新春放假期间闲来无事,在各大编程论坛溜达了一圈。发现年前的帖子中,有VC++程序员在界面开发方面遇到了不少苦恼,有抱怨界面工做很差作的,有抱怨用错了界面库的,也有紧急求得技术问题帮助的。看到这些,想起了五年前的我。我那时正好在一家互联网公司担任技术总监一职,手下有三我的。那是一家刚创办的公司,老板是我初中同窗,他在美国呆了几年拿到EMBA后到国内创业。在一次同窗聚会上了解到彼此工做方向。后面凭借对将来的向往一块儿创业,他负责营销和资金,我负责技术研发。咱们的目标是开发一款企业用的即时聊天软件(IM),那时尚未企业QQ和IMO。咱们感受市场是空白的,而企业需求则是很是刚性的。因而咱们开始了美好的梦想之旅!
我以前一直是作服务器后台底层编码的,弄过阿里巴巴的阿里旺旺的后台,因此后台部分基本都是现成的技术和框架,不须要占用我太多的时间。老板让我招几个技术人员以辅助个人工做。我在老板的眼里是技术牛人一个(也许我在他面前把本身吹的过高了),他常常以“大师”称呼我。(虽然我表现的很谦虚,不过心理仍是感受良好,被别人承认的感受真好!)。因而我就招了三个懂点MFC的程序员进来一块儿作IM的客户端部分。
说实在的,那时我对VC++开发界面真没有什么经验,这三位小弟好像与我挺投缘的,都一致认为作界面嘛MFC就足够了。当时,我关注过QT,虽然QT作出来的效果然不错,但有两个问题直接致使我放弃了它。
第1、发布出来的程序竟然要带上十几兆的QT支持库(QTCore.dll,QTGUI.dll等);第2、QT的调用真是奇怪,和MFC彻底不同的,特别是事件响应,再加上三个小弟对QT也不太熟。因此最终你们都绝不犹豫地抛弃了它。

MFC作界面很容易,在窗口资源上摆上一个一个控件是所见即所得的,很直观的。大概作了三个月,登陆界面、主界面、聊天界面和设置界面都相继问世了。灰灰的窗口背景,虽然有点丑,但不影响功能的展现。我拿着这个版本向老板汇报了。老板看后感受很满意,他很高兴地告诉我,再弄一个月,把体积搞小点,界面效果作到QQ的样子就能够上线了。我信心百倍地表示,必定按时完成任务。咱们当即开始了体积的缩小工做。发现WTL在界面和体积上都比MFC要有优点的多。因而咱们边学边改代码。花了一周时间,把WTL都换上了。体积确实如期所愿缩小了不少,依赖库也少了几个MFC*.dll。不过要把界面作成QQ那样子,咱们几个不知道从何下手。从网络上查了查有不少,有破解的,有免费的,有收费的。说实在的,老板刚创业也没有钱,有免费的确定不会选择收费的了(除非脑子“进水”了!!!)。看到网络上的评价BCGControlBar挺不错的,因而Down了一个9.0的版本,还带源代码,太令我激动了!

研究了它的Demo和代码,发现与咱们聊天软件不太同样,也找不到用它作IM界面的例子。有个手下提醒我了,他说BCGControlBar是作管理型软件比较适合,好比Office之类的软件。如今想来他说的还真是对的。继续Google上找,发现有一款SkinMagic的换肤软件,还带可视化的皮肤设计工具。

不太小激动了几下后发现,这个设计工具只能编辑同一类型的控件外观,用这个工具换肤出来效果是:全部同类型的控件都长成一个样子。对聊天软件来讲,有不少控件都须要长不一样的样子。后来终于搞明白它是换肤类界面库,而咱们须要的是开发界面的工具。换肤类界面库的意思是咱们把界面用MFC先作好了,而后用它去换肤,至关于把软件换层皮,但对自定义的控件和控件的各类布局都没法支持。通过这么一段时间的摸索后,感受网络上界面库初看上去还不错,但真正用起来会发现不少问题。一晃一个月过去了,老板来问我开发进度了,心中顿生很大的压力,开始感受到界面没有我以前想象的那么简单!在界面上没有大的进展,我让老板再给我一个月时间。虽然说我以前没有太多的界面开发经验,但我感受本身的技术功底是比较扎实的,加上这几周对界面库的调研后发现,界面库的东西其实也蛮好理解的,并且也不存在什么特别高深的东西,不就是绘制图片嘛,我心中有一种莫名的冲动:我也开发个界面库出来,把这些网络上的无能之辈通通“打倒”!想当年我参加全国计算机编程竞赛还得过名次滴,我还不信搞不定它了!
在Windows上作界面,说白了就是作控件自绘。我安排手下三我的各作5个标准控件的自绘工做,我负责窗口标题栏、菜单栏和工具栏的自绘。刚接手作的时候,真的还挺麻烦的,看了很多的资料。

幸亏在CodeProject上面找到了不少控件的自绘的类,还找到了不少的文章,好比滚动条如何自绘等等。这些文章写的都是很是有技术含量,后面用在程序中发现还比较稳定的。咱们4我的通过1个月的奋斗终于出了一个草稿版,窗口、控件都实现出了QQ的样子,不过在某些程序交互操做上还存在一些瑕疵,但咱们4我的看看还说的过去。老板如期而至,用了一下咱们的类QQ版IM。他体验完后给个人评价是若是不操做界面感受还行,但一操做就感受有不少问题:界面卡、闪烁厉害、控件很别扭、位置错乱…… 我向老板解释了其中的原因,不过他好像并无听进去。从一开始对我那么高的指望,如今一会儿有点失落的感受。说实在的有种对不住老板发的工资,还有种辜负他指望的感受。回到家里连续几夜都没有睡踏实。以前的豪言壮语都已经烟消云散了。若是继续沿着咱们本身开发的这个界面库,在短期内解决掉这些问题是不太可能的,由于里面有不少的界面细节,并且Windows控件自绘方式的界面要作到彻底不闪烁是很难的。知道前路艰险,因此向老板提出了离开的想法,老板在几回挽留后赞成了个人请求。
以前的失败教训告诉我:第1、不作本身不擅长的,让专业的人作专业的事;第2、不搞我的英雄主义,成也“英雄”,败也“英雄”。
前两年又找了一家互联网公司,他们家以前就用了开源库Duilib,效果要比我以前作的界面要好不少。

不过他们也是遇到了界面升级难的问题。公司想要作自动化测试这块,可是DUILib是DirectUI界面库的一种,窗口上没有控件的句柄,你们都不知道如何让自动化测试工具找到窗口上的控件和他们的函数。另外Duilib在多主题、多语种和多色调上面都不支持,咱们团队没有时间去开发这样的新功能,我第一时间想到的就是找开源库做者来增长这样的功能。可是最后的结果是那个做者不肯意配合咱们作这项工做,不事后来想一想也是,他没有收咱们的费用凭什么为咱们服务。可是公司的计划不容拖延,我必须迎头遇上。团队有人提出咱们本身修改Duilib的代码,我否认了这个方案,由于界面的复杂度很高,弄很差又要重蹈覆辙,对公司对团队都很是很差,并且咱们本身的团队更应该关注本身业务的开发,不能分散精力,让专业的事情让专业的人来作才对。后面我又了解到迅雷有一款Bolt的界面库,效果然心地不错,也让咱们迷恋了一段时间。

最后放弃Bolt界面库的缘由有四个:
第1、Bolt界面库没有现成的控件,若是咱们要作一个自定义的Listview则须要好多天的代码编写;
第2、Bolt的学习时间长,成本过高,还须要学习Lua脚本;
第3、Bolt不提供源代码,对互联网公司来讲,若是用在软件里的界面库没有源代码很容易被别人控制,虽然迅雷公司一再地声称信誉和商业道德。但对更多企业来讲,这点没有真正的约束做用;
第4、免费的方案,咱们以前已经吃到DUILib库的苦头了,免费的东西别人就能够坐视无论,而Bolt在迅雷内部只是一个部门工具而已,并非一款独立运营的产品,若是咱们之后发现哪里功能不知足如何找到负责的人修改和维护呢?这点仔细想一想是很可怕的:若是咱们的产品已经发布使用,忽然有一天界面库发生崩溃了,找谁去?哭也没用了。这个风险太大!

后面经过百度搜索找到了几家收费的界面库,UIEasy的DSkinLite,UIPower的DirectUI,Bodsoft DirectUI Library。初步的映像是UIPower的价格是最贵的。
其余两家的价格优点是很明显的。几千到一万之间。后来了解到UIEasy的DSkinLite与SkinMagic是差很少的,因此它被放弃了。

UIEasy也有DirectUI,但试用下来感受是个半成品,因此也不去考虑它了。和老板商量后,最后采购了Bodsoft的DirectUI,最终以9700元拿到了产品和全部的源代码。

本觉得找到了界面的娘家了,惋惜后面的事情令我不堪回首。以前答应个人服务后面几乎没有怎么兑现。界面库中Bug很是多,每次找他们修改还找理由说是咱们使用上的问题。我当初很是气愤,决心要诉诸法律,但我转念一想,若是这个事情闹大了,对我本身也很差,至少也有失察之责,弄很差我又得离职,因此我后面就忍了下来。真想不到搞个界面这么麻烦啊。我当时内心在琢磨,Bodsoft应该是个小公司,不然不会这么轻易地干出如此拙劣的服务。我想之后有机会要过去看看,会会这些不讲信用的人。此次的采购经历又让我知道了购买重要东西的时候必须上门视察一下,不然吃了苦头只能往本身肚子里咽。
选择Bodsoft有我对价格的考虑,如今发现不能由于价格而草率决定谁适合。做为用户来讲,说实在的,要从网站上去对比真的很难比出谁好谁坏,只有来真格才行。能选择的也只有UIPower了,它当初由于价格过高第一个被咱们排除出去的,如今又要重现拉回来从新评估,矛盾复杂的心情难以言说。
此次老板和咱们开了一个会议,检讨了几点:
第1、在界面开发上进度延误的太严重了,必须以最短的时间追上来,市场不等人;
第2、采购东西要讲究性价比,而不是一味地追求便宜;
第3、界面方面以前的预算从新弄,根据市场行情来,再也不本身搞一套心理预期。有了老板这个底子,我心理有谱了。
正所谓吃一堑长一智,要让我相信网络上的谁如今都是不可能的了,必须经过技术和法律手段来确保合做的结果,我不想再失误一次,此次必须成功!我让手下把界面中遇到的问题和将来须要的功能都列了一张表,做为咱们与UIPower沟通的主要内容了。咱们本身制定了几个合做原则:
第1、UIPower必须针对咱们关系的问题提供能够运行的Demo;
第2、涉及到定制这块的,必须有详细的报价单;
第3、把全部的要求列入合同并肯定具体的惩罚措施;
第4、必须拿到DirectUI的全部源代码。
第5、必须到UIPower办公现场实地考察一下,耳听为虚,眼见为实。
以上的原则从技术和法律两个层面上进行了将来结果的保证;
咱们根据以上几个原则与UIPower进行了接触,最后达成了合做。合做过程还算顺利,但也暴露出了一些问题,好比他们在客户分配时间上有些使人不太满意,但反过来想,人家客户数量多忙不过来也很正常。咱们但愿他们能第一时间处理咱们的问题,但不少时候不能如咱们所愿。不过他们承诺的三天时间解决问题,通常都能按时交付给咱们。
如今回过头来总结一下:
若是你对界面真的很是感兴趣,而且有充足的时间,那么我建议你多看一些开源库,而后开发属于“本身”的界面库,这样作的好处是,你对本身的界面库了然于胸,最好不要拿免费的开源库直接使用,由于免费的东西通常不会有完善的后期维护和及时的代码更新,这样的话一旦出现Bug,你就不知道如何迅速修改它。本身开发的界面库毕竟是通过精心设计和思考的,因此每行代码都是很是清晰的。这种方式的前提是你得对界面开发很在行,技术功底也不错,有足够的时间和很是平静的心里,通常须要坚持1-2年。
若是你只是使用界面库的话,免费的东西首先我不建议你选择,主要缘由就是你没有付费就得不到相应的技术服务,一旦出了问题(出问题的几率在90%以上)你会感觉到孤立无助,完全“崩溃”。至于收费的东西,也要擦亮眼睛仔细看看他们作过的成功客户,最好实地考察现场拜访,参观一下现场的办公环境。作界面库的“皮包公司”特多(其实不光是界面库方面,作软件工具的不少都是这样的,我以前接触一个报表工具公司的也是如此。),在网络上实在没法搞清楚公司实力如何。公司越大,售后服务相对会好些,公司过小或没有公司,售后服务如何保证?这是吃到苦头之后总结出来,但愿能帮到与我差很少的屌丝们。程序员

相关文章
相关标签/搜索