S.l.e!ep.¢%

像打了激速一样,以四倍的速度运转,开心的工作
简单、开放、平等的公司文化;尊重个性、自由与个人价值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

【翻译】C++中无窗体界面制作

Posted on 2009-10-10 21:25 S.l.e!ep.¢% 阅读(1013) 评论(0)  编辑 收藏 引用 所属分类: DirectUI
浏览: 4460   评论: 18   附件: 1   收藏: 1  
文章所含源代码:
WindowLess.rar     下载次数:157

[翻译原文地址]:http://www.viksoe.dk/code/windowless1.htm


一直以来,Windows应用程序是基于GDI/User 窗口结构的,而这个结构限制了不少地方。当你尝试使用这个内建的控件集,然后简单迅速地得到了一个非常非常漂亮的应用程序的之后,你就会理解这个限制。

一个无窗体的用户界面并不使用原始的Win32控件。取而代之的是,给屏幕上的每个控件定制图像显示:包括标签、按钮、列表框等等。使用这一种接口以及不是最新的了:大部分很酷的程序都开始“皮肤”,比如WinAmp和MS Media Player。不过skinning只适合一些小的应用程序,它们拥有很少的对话框。如果你正在做一个数据库驱动的程序,你需要一个固定的框架。

无窗体界面

那么,来看看Microsoft CRM(http://www.microsoft.com/businesssolutions/crm/)应用程序吧,我个人认为,它是最成功的DHTML interfaces(http://blogs.msdn.com/aaronel/articles/230420.aspx)之一。MS CRM 界面非常向 Windows XP,但,同时还有一些其它很酷的特征,如一个导航条、一个适应性非常好的List控件和几个阴影/渐变面板。
部分界面效果

我首先测试了这样的一个界面,不过对它很不满意。

尽管,创建一个无窗体界面是很费精力的,不过最后你会发现它很值。
而且,你不需要实现你自己的对话框、按钮和键盘接口。事实上,真正化时间的是键盘快捷键、TAB导航、自动提示框等等。

[实现]

本文代码并不是真正使用了WTL 库,它是一个纯Win32的调用,可以被放到一个外部的dll。

其中一些控件是容器,比如要创建一个ToolBar 按钮,你只需要创建一个CToolButton实例,然后添加到CToolPanel 面板容器中。

手动构建整个窗口是非常繁琐的,这里使用了一个XML解析器,它使得大家可以从XML的字符串创建一个窗口。

框架将会调用Win32 的画刷和钢笔。

[迷人的字体]

本实例中,你可以简单地使用DrawPrettyHtmlFormattedText()替代DrawText()函数,这样你就可以向写HTML脚本那样绘制文字了,设置字体颜色、超链接等等。

[3D 效果]

通过控件中加入一些DirectX 技术,就可以轻易实现3D效果了。

[示例运行]

例子要求安装DirectX 9 ,如果想看到完全的3D效果的话,最好安装3D显卡。

[开发环境]

Microsoft Visual C++ 6.0
Microsoft DirectX 9 SDK


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理