一直都觉得像类似QQ09这种界面并不是真正无句柄,只是用某种手段隐藏了,直到论坛上看到这篇文章
http://www.viksoe.dk/code/windowless1.htm
后来陆续发现,360最新版,QQ影音,甚至金山快快,都没有句柄。
就如有人说WPF是桌面界面开发大趋势,优点不言而喻,只不过转型要时间。
那么对于这种无句柄方式,看到的软件日益增多。上面地址里的源代码下来看过一点点(太多了),封装思想、原理果然和MFC很大不同,可能设计模式应用不多,还没有总结各个类的功能、构成。就从他的代码来看,基本是全用自己造的轮子,思维也非常好,对win32编程掌握深刻,设计模式也应用的到位,可能接触过很多UI框架(他提到应用java的控件容器思想)才有这样的构想。
但个人觉得,即使采用他的架构,从开发效率上也要熟悉他的想法,这样只不过从一种模式转移到另一种模式,他的界面可以很炫,但MFC同样可以做,对个人而言,mfc开发难度更小。最后,问题如题。谢谢!
http://www.viksoe.dk/code/windowless1.htm
后来陆续发现,360最新版,QQ影音,甚至金山快快,都没有句柄。
就如有人说WPF是桌面界面开发大趋势,优点不言而喻,只不过转型要时间。
那么对于这种无句柄方式,看到的软件日益增多。上面地址里的源代码下来看过一点点(太多了),封装思想、原理果然和MFC很大不同,可能设计模式应用不多,还没有总结各个类的功能、构成。就从他的代码来看,基本是全用自己造的轮子,思维也非常好,对win32编程掌握深刻,设计模式也应用的到位,可能接触过很多UI框架(他提到应用java的控件容器思想)才有这样的构想。
但个人觉得,即使采用他的架构,从开发效率上也要熟悉他的想法,这样只不过从一种模式转移到另一种模式,他的界面可以很炫,但MFC同样可以做,对个人而言,mfc开发难度更小。最后,问题如题。谢谢!
解决方案 »
- WebBrowser控件如何显示最后一页html?
- 各位高人谁能给我一个ADO连接MYSQL的字符串呀!!
- 好消息,好消息,腾迅公司为成立六周年,免费送六位QQ号,可以申请了啊!!!!
- 获取句柄
- 有工具将函数之间的调用关系表示出来的么
- ModifyStyle怎么没用?
- 安装了两个MSDN,可否自己选择用哪一个?
- 请问如何创建IIS的虚拟目录啊?
- 3,3,8,8 四个数字,加上+,-,*,/和括号,构成一个表达式,其结果=24.
- CTreeView如何设置某一项的Enable状态
- 基于窗口的对话框调用ADO __ConnectionPtr __RecordsetPtr的请教
- 使用无线路由后,CInternetSession::OpenURL函数失效
为什么用SPY++查QQ2010还是有window handle这一项呢
窗口用句柄来表示,无句柄的“窗口”或“控件”肯定有另一种比较私有的表示方法。
任何窗口不管有没有句柄,都是屏幕上的一块区域。这些区域可以互相遮盖,互相裁剪。
无论屏幕上怎么划分窗口区域,都给它取个名字,有人给它取名“句柄”,有人给它取名“画布”,有人给它取名“表面”……句柄用多了,控制方式成熟了,已经成为工业标准,所以搞特权,单列出来叫“有句柄窗口”,其它类型的统称为“无句柄窗口”,更好听的名字是“DirectUI”。这就是历史由来,所有窗口没有什么不同。无句柄窗口由于没有标准,私密性强,被认为很安全,一旦它也成为标准,它的下场就是另一个“有句柄窗口”。
一些特殊环境下需要这种“非正常的窗口绘图”,比如SoftICE,syser等直接在ring0层画窗口。它们采用的是直接写显存的方式,比你的还要底N层。虽然这是极端情形,但没了他,单机内核调试显示交流几乎无解。
一般情况下你要处理系统级的窗口需要调用API,而且有的API并不是你想要的。只要你掌握了API就基本掌握了窗口。应用级的窗口就灵活多变一些,想开发更高级的功能也相对容易一些。
将来的窗口都是3D的,拭目以待吧。
LZ,可以直接查查Direct UI相关的东西。不过,现在都是商业应用,没有能让我们借鉴的代码~~
这是我很久前写的 现在已经更新很多了 找个机会上传上去~
http://biyou.blog.51cto.com/957202/288938
个人觉得这个框架比mfc甚至wtl的在构架、思想上高N倍。
首先 viksoe采用layout机制动态计算各子窗口的坐标位置,自适应屏幕大小的变化。而MFC要求子窗口的坐标位置硬编码,结果要适应不同分辨率的屏幕非常困难。GTK+在窗口布局时分为两个阶段,第一个阶段父窗口先询问子窗口的最佳大小,第二个阶段父窗口根据自己的大小计算子窗口的实际大小,子窗口根据实际大小进行调整。其次viksoe采用容器机制来合理分离控件的职责,MFC没有容器这个概念,很难实现递归组合。viksoe中差不多所有控件都是容器,都可以容纳其它任何控件,而MFC只有顶层窗口才是容器,可以容纳其它子控件。容器这个概念对代码重用的影响非常之大,这里举两个例子:其一是带图片的按钮(BitmapButton),在viksoe中它就是CCanvasUI类和CButtonUI的组合,而在MFC中,图片和文字都要自己绘制。前者的CCanvasUI类和CButtonUI可以在很多地方重用,而后都的绘制代码和事件处理代码只有自己才能使用。在MFC中,即使只是实现一个不同外观的列表框,你都要采用自绘的方式,代码重用非常困难,向列表框中加入其它控件就更麻烦了,要使用一些非同寻常的手段不可。另外说句在驱动里画gui,这个和普通gui有所不同,上面说的directUI还是用到了Windows的消息,而驱动里只能自己hook key 、mouse 中断。然后实现各种消息的派发。但这样对兼容usb接口的键盘很成问题。这实际相当于自己实现了win32k里面的内容。而驱动里面画图其实不过是自己写显存。但又有很多兼容问题要解决,别的不说,每种显卡的显存位置就要自己实现,所以softICE直接做不下去了,syser在部分机器上也得靠directX来获取显存。
我的blog hi.baidu.com/weolar
大部分公司都会有自己的UI框架 以实现统一布局 界面美化 换肤等功能
而一些简单的控件自然会重写掉 成为无句柄的控件
说到底原理只是这套UI框架自己会维护一个容器和子控件的关系,并进行排版和绘制 和消息的分发
是不是句柄倒是其次,一般来说一些实现很复杂的控件,比如CListCtrl之类还是有句柄的 因为自己实现这么个控件花费时间太大 而且不一定通用 具体可以看看360程序 里面TABControl仍旧是继承有句柄控件实现的PS:LZ的确火星了,很早前就是这么实现了,可以用spy++看看以前的一些软件
不过最纯净的是无句柄UI框架的软件就我现在看过的就是QQ和网易的闪印
其他或多或少都是有些句柄的
第二点WPF就是这么个实现 而swing感觉很早之前就这样了
这样做可能省掉了创建控件带来的系统管理上的开销,然后实现更换皮肤也更方便。
个人觉得QQ现在那么庞大,创建控件的那点儿开销可以忽略不计,主要还是为了实现皮肤效果和一些界面上的动态效果用。
几年不来,变化很大啊。落后了。
csdn上留言也行.不过不会经常查看
GetItemText,PostMessage等等.
比如一个button,一个list在MFC里边实际上都是一个一个的真窗口(具有HANDLE,并且windows会传递此窗口的消息),而在这种界面里边,看起来是一个button,实际上只是画成了一个button的样子,通过计算鼠标位置(相对于最外边的那个有HANDLE的窗口)来画出相应的mouseover,click等等情况的样子。
楼上也有人说这个自己造轮子,确实是自己造轮子,因为所有的控件都需要重新写(Button,checkbox,list, tree, richedit.......)
我原来的公司专门做这个,花了3年时间。写一写对了解WINDOWS SDK很有帮助。
跟游戏开发的DirectX没任何关系。DirectUI意为直接在父窗口上绘图(Paint on parent dc directly)。即子窗口不以窗口句柄的形式创建(windowless),只是逻辑上的窗口,绘制在父窗口之上。微软的“DirectUI”技术广泛的应用于Windows XP,Vista,Windows 7,如浏览器左侧的TaskPanel,控制面板导航界面,Media Player播放器,即时通讯工具MSN Messager等。
DirectUI好处在于可以很方便的构建高效,绚丽的,非常易于扩展的界面。国外如微软,国内如腾讯,百度等公司的客户端产品多采用这种方式来组织界面,从而很好的将界面和逻辑分离,同时易于实现各种超炫的界面效果如换色,换肤,透明等。 DirectUI 旨在满足客户端界面快速开发的需要,同时融入业界前沿的皮肤技术,为用户创建更加高效,专业的界面。
2.1 DirectUI 主要特性
◆ 支持皮肤对象的布局
◆ 支持皮肤脚本(JavaScript)控制,可以让界面与逻辑彻底分离
◆ 支持bmp、png、jpg、gif、tga等图片格式
◆ 支持多图层Alpha混合特效
◆ 提供界面设计工具DirectUI Builder,支持拖拽式界面设计,让界面开发所见即所得
◆ 开放式开发平台,所有控件均为插件方式管理,支持用户自定义控件开发,与DirectUI平台无缝兼容
◆ 支持Windows平台所有的开发工具(VC++、VB6、VS.Net、PowerBuilder、Delphi、C++Builder、E语言)
◆ 支持所有标准控件的换肤
◆ 支持皮肤对象的导出与导入
◆ 支持Windows主题导入,让标准界面皮肤的制作简单快捷
◆ 让客户端代码简洁明了