MFC太庞大也太庞杂,不易使用,而CBC提供的库居然是VCL的,CBX提供的虽然是个口碑甚好的开源库WxWINDOWS,但是从其源代码中可以看出,其消息映射机制还是MFC的那一套,仍然无可避免的将丑陋的实现细节暴露给用户。
长久以来,WINDOWS下搞GUI (RAD)开发的用户抱怨没有一个良好的RAD开发环境,MFC当然不行,MFC已经行将就木(虽然其中的思想仍然有价值),我们需要一个像java swing或.net form那样干净整洁的库,但是必须是以纯C++实现的!
CUJ的contribute editor之一 john torjo 为我们带来了——Win32 GUI Generics!
在win32环境下用C++进行GUI开发的人们有福了...这是一个纯C++库,利用了C++里面的高级特性,避免了MFC里面的诸多问题,由于使用的event handler机制和MFC里面的MESSAGE MAP机制有本质的不同,所以不像MFC里面有一打莫名其妙的宏,整个框架非常干净整洁,当然,编写出来的代码也一样!Generics and GUI do mix,after all... !!!http://www.torjo.com/win32gui/index.html

解决方案 »

  1.   

    其实, MFC 也很不错的没用过 VCL, 不作评价.NET form 库, 暂时看不出多么好MFC 是有源码的, 但这怎么能算是缺点呢?不是像楼主说的: "仍然无可避免的将丑陋的实现细节暴露给用户。"
      

  2.   

    我正打算将MFC的关键几个类体系重新实现一遍,在VC7.1下正在写...
    觉得MFC的思想蛮不错的.
    :-)
      

  3.   

    看了一下, 
    2004-05-29 09:12 registered
    1 developer
    不要指望它现在能稳定的运行.
      

  4.   

    to huwei001982(編程浪子):
        我指的不是MFC的源代码,而是MFC将很多的实现细节暴露在用户,比如那些实现serialization和dynamic create和message map的宏,甚至wizard生成的定位代码也夹杂在里面,格式是:
         //{{  
        我就曾经帮人家解决一个问题,就是因为他将wizard的代码不小心删掉了:-)
        而且,要在MFC里面手动添加某些event handler以及某些扩展也是比较痛苦的。
        而且,一个MFC程序的源代码和头文件巨多,看起来就不清爽:-)(呵呵,不客观评价了)VCL是个pascal的库,它将实现细节封装得很好,所以用户看到的代码很干净,这种封装主要依赖于bcb编译器的一个非标准扩展特性  __closure,它可以将对象和成员函数绑定到一起,所以用VCL开发的东东其源代码是不可移植的。而.NET Form库是个很不错的库,Anders将他在bcb下的RAD思想的一套完全搬了过来。使得在.NET下搞RAD开发还是可以很干净整洁的,不必和不必要的细节纠缠。而Win32 GUI Generic,虽然这个库才刚起步,但是很显然,它的价值很快会体现出来,微软在win32下面正缺少这么一个优秀的库,长久以来,用mfc开发win32 gui的用户都需要面对一个相对较长时间的学习,很多人说,mfc is dead,但是,mfc身后是谁呢?C++是微软的NO.1语言,虽然它为C++搞了一个C++ CIL语言,但是纯C++还是有很多很多优势的,大部分熟悉纯C++的开发者还是不愿意进入C++ CIL托管的世界(尽管Dox Box也声称“生产力终究会占上风”),这时候微软该拿什么来继续吸引那些C++开发者为它开发桌面应用?
    当然是一个可以像.NET Form一样容易使用,干净整洁的GUI框架!
    Win32 GUI Generic正是这样的库!至于Win32 GUI Generic的优点我建议大家好好看看作者的网站上的介绍,我就不多说了。
    了,另外,作者在包里面附了很多例子,我编译了几个,感觉很不错的说!!可以预见,这是个革命性的库,C++在RAD领域将有光明的前景:-)
      

  5.   

    那种垃圾也能成功的话,bill会哭的,为他的mfc
      

  6.   

    我看了一下,很难用,学习起来估计比mfc还麻烦!
      

  7.   

    不知道WTL是否可以加入GUI开发的竞争呢?
      

  8.   

    与其用 C++ 写 GUI,不如用 xml 写……我倒是真的看好这样的东西,譬如 xul 
    GUI 本来就不是应该用手写的东西。.net WinForms 还是 Swing 的优点都在于工具替人完成了大多数的工作,而我相信用 xml + c++ 一定也可以做到这些。不知道 wx 的 XRC 如何……用 wxGlade + Anjuta 开发,有人吗?
      

  9.   

    I've made Win32GUI as portable as possible. However, it uses advanced templates' features, and thus you need a modern compiler in order to use it. I have successfully tested it for VC7.1, gcc 3.2+, and Como 4.4alfa+. I intend to port it to even more modern compilers in the future.
    晕,作者还挺能赶时髦的:(俺装的是vc6怎么办?
      

  10.   

    这个东东是好事坏现在俺还没感觉到但是它没有自己的编译器阿难不成我为了用它还要去下载 VC7.1, gcc 3.2+, and Como 4.4alfa+ ?
      

  11.   

    我编译了一个例子:menus_and_rebars, 发现Debug模式的exe文件有1.57MB, 太大了一点吧!
      

  12.   

    在checked_edit项目的checkeditem_dlg.cpp中看到这样的:
    using namespace win32::gui;
    这是不是用到了托管代码?如果是,则很遗憾!!!
      

  13.   

    呵呵,楼上的兄弟,问一下,release版的有多大?想知道
      

  14.   

    menus_and_rebars的release版exe文件有528 KB,一个简单的例子也比用MFC的大!
      

  15.   

    楼上的老哥,mfc42.dll也不小哦。
      

  16.   

    其实没有用托管代码,是自己定义的名字空间win32,下边又定义了名字空间gui,并非托管的代码。还有我发现咱们国内很多同学喜欢说“垃圾”这个词,我特别反感这这种说法,真正好的程序员是不会随便否定别人写的代码的。说垃圾的朋友,有本事你写一个这样的东西来我发誓这辈子不用C++写程序。
      

  17.   

    .NET FrameWork也好不到哪里去.
    现在没用上..
    以后同样三天两头升级.我想也会走到MFC的路子上去.
    听说要出2.0了..
    再出3.0
    然后是4.0
    我想想前后还是不兼容的..
      

  18.   

    是反感垃圾这个词
    因为我原来开发的东西被骂了好多这个词
    伤心ing
      

  19.   

    to Mephisto_76((望美人如梦)) :
        同意。另外,如果微软有眼光的话,可能会将这个库(至少思想)纳入旗下,当前windows下正缺少这样的一个库,所以,一旦到了微软的手下,肯定会蓬勃发展...
      

  20.   

    激动啊!!C++世界要是早有这种库就好了!!大致读了一下代码,非常精致,非常明了的GP风格,跟阅读Boost的感觉一样清爽。很早就想实现GP的GUI库,苦于自己水平不足。虽说目前微软自己有一个泛型的GUI库WTL,但是WTL的风格跟标准库的GP风格有点出入,况且没有官方的支持,能不能存活还要经过时间的考验。仔细看Win32Gui设计都是严格按照Standard Library的风格进行的,在设计开始就有这样的成果,前景应该是非常光明的。不过更希望这个库可以发展成为一个跨平台的GUI库,而非局限在Win32。BTW: 说MFC能比过Win32Gui的人一定不懂GP。
      

  21.   

    to CodeSpirit:
        呵呵,终于看到一个理智的看待这个库的人了...
      

  22.   

    还有一个类似的库叫做SmartWin
      

  23.   

    为什么运行build_library.exe这个不能成功编译呀,说找不到路径vcvars32.bat 也运行了
      

  24.   

    下载了没仔细看,第一眼的感觉是代码比较舒服。有人和ATL/WTL比较过吗?WTL包装的层次稍浅了些,不过也是比较漂亮的。粗略浏览了一下,好像和WTL差不多,并没有更多更深的,比如没有看到类似QT的信号事件,没有看到界面布局类,应该还有很多路要走吧。不过绝对是纯c++的,代码很好,奇奇怪怪的宏也很少。另外发现了一个tray_wnd类,有点意思,关注吧。
      

  25.   

    to cpunion(int argc, char** argv):
        有信号事件的,本来作者想用boost::signal类的,但是由于会显著增加编译连接时间,所以暂时放弃了,不过作者实现了类似的类,跟踪一下源代码吧。
        signal对于win GUI库是及其有用的组件。所以作者肯定会在将来使用它的。
      

  26.   

    等他发展起来的时候我就用。。我不喜欢做tester。。期待ing
      

  27.   

    ....
    原来简单的东西又被复杂化了.
    从语言的使用上来看,它的确不错,可是好像不是很实用.
    对于一般应用来说它太复杂了.
    对于高级应用来说它又不够用,必须要打破封装.我现在用自己的库写界面,XML + Script + C++ 感觉比较灵活,不过还是少不了消息映射表.
      

  28.   

    最近一直在关注win32gui,这里必须交代一点和wtl不同的,win32gui是一个rad库,而wtl不是
      

  29.   


    #include <win32gui/frame.hpp>
    #include <win32gui/controls.hpp>
    using namespace win32::gui;
    int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR lpCmdLine, int nCmdShow) {    DWORD style = WS_VISIBLE | WS_CHILD | SS_CENTER;
        wnd<frame> main = create_wnd<frame>( 
            "My Simple GUI", null_wnd, create_info().rect(200,200,420,270) )
                .add_child<label>( "Hello", create_info().rect(10,10,90,30).style(style))
                .add_child<label>( "World", create_info().rect(110,10,200,30).style(style));
        main->wait( wait_for::destroy );
    }
    这就是他的HelloWorld???太复杂了吧!比MFC还复杂多了!!看到就头晕。。没有可视化的Res工具,比MFC差多了!垃圾一大堆!!
      

  30.   

    你写复杂点的程序,看你mfc多还是win32gui多,Helloworld我用汇编写最少
      

  31.   

    而且win32gui还没完成当然还没可视工具了
      

  32.   

    mfc是oop的思想,跟win32gui完全不一样,win32gui是用gp思想
      

  33.   

    VS.net 2005 的C++规范将达到标C++的98%以上...
      

  34.   

    讨厌垃圾一词,mybios(俊俊哥哥)有本事写个mfc我就说你厉害
      

  35.   

    代码很漂亮,不知道有没有CommonCtrol的封装
      

  36.   

    不知道,我在着手写vc的vcl,用c++写vcl真爽,可以用多重继承