zoukankan      html  css  js  c++  java
  • VC++程序员如何做好界面

    本屌丝在新春放假期间闲来无事,在各大编程论坛溜达了一圈。发现年前的帖子中,有VC++程序员在界面开发方面遇到了很多苦恼,有抱怨界面工作不好做的,有抱怨用错了界面库的,也有紧急求得技术问题帮助的。看到这些,想起了五年前的我。我那时正好在一家互联网公司担任技术总监一职,手下有三个人。那是一家刚创办的公司,老板是我初中同学,他在美国呆了几年拿到EMBA后到国内创业。在一次同学聚会上了解到彼此工作方向。后面凭借对未来的向往一起创业,他负责营销和资金,我负责技术研发。我们的目标是开发一款企业用的即时聊天软件(IM),那时还没有企业QQ和IMO。我们感觉市场是空白的,而企业需求则是非常刚性的。于是我们开始了美好的梦想之旅!
    我之前一直是做服务器后台底层编码的,弄过阿里巴巴的阿里旺旺的后台,所以后台部分基本都是现成的技术和框架,不需要占用我太多的时间。老板让我招几个技术人员以辅助我的工作。我在老板的眼里是技术牛人一个(也许我在他面前把自己吹的太高了),他经常以“大师”称呼我。(虽然我表现的很谦虚,不过心理还是感觉良好,被别人认可的感觉真好!)。于是我就招了三个懂点MFC的程序员进来一起做IM的客户端部分。
    说实在的,那时我对VC++开发界面真没有什么经验,这三位小弟好像与我挺投缘的,都一致认为做界面嘛MFC就足够了。当时,我关注过QT,虽然QT做出来的效果真不错,但有两个问题直接导致我放弃了它。
    第一、发布出来的程序居然要带上十几兆的QT支持库(QTCore.dll,QTGUI.dll等);第二、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控件自绘方式的界面要做到完全不闪烁是很难的。知道前路艰险,所以向老板提出了离开的想法,老板在几次挽留后同意了我的请求。
    之前的失败教训告诉我:第一、不做自己不擅长的,让专业的人做专业的事;第二、不搞个人英雄主义,成也“英雄”,败也“英雄”。
    前两年又找了一家互联网公司,他们家之前就用了开源库Duilib,效果要比我之前做的界面要好很多。

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

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

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

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

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

  • 相关阅读:
    Apache 虚拟主机 VirtualHost 配置
    EAX、ECX、EDX、EBX寄存器的作用
    Python中文文档 目录(转载)
    八度
    POJ 3268 Silver Cow Party (最短路)
    POJ 2253 Frogger (求每条路径中最大值的最小值,Dijkstra变形)
    2013金山西山居创意游戏程序挑战赛——复赛(1) HDU 4557 非诚勿扰 HDU 4558 剑侠情缘 HDU 4559 涂色游戏 HDU 4560 我是歌手
    HDU 4549 M斐波那契数列(矩阵快速幂+欧拉定理)
    UVA 11624 Fire! (简单图论基础)
    HDU 3534 Tree (树形DP)
  • 原文地址:https://www.cnblogs.com/skyofbitbit/p/3594499.html
Copyright © 2011-2022 走看看