windowless的致命缺点

来源:互联网 发布:淘宝达人昵称怎么取 编辑:程序博客网 时间:2024/04/28 23:48

小弟最近研究界面实现技术,过年也没闲着,google了整个网络。弄界面也弄了几年了,做比较炫的界面,也没什么问题。最近公司年后要启动一个项目,项目非常复杂(一套卖几百万),要使用文档/视图结构,但一定要做深层次美化。以前一直用mfc做界面,使用gdi或gdi+贴图,用ini或xml配置界面。常用控件的美化也实现了好几年了,都比较稳定,个别特殊控件,实现一下也没什么问题,由于这个项目周期很长(两年多),正好借新项目,好好总结一下目前比较常见的界面开发技术。今天先总结一下windowless的致命缺点,过两天总结它的优点,和其它技术的优缺点。再提一句,我们的项目是使用wpf开发,也是windowless,但与我下面所说的windowless是两回事。

windowless或者称handleless,也就是无句柄窗口,在设计和实现的时候,每个控件都自己实现,最后画到父窗口中。另一个伪windowless是用标准mfc控件,然后通过hook或其它远程线程注入等技术,让spy++等软件,看不到窗口句柄。这主要是为了防止盗号木马通过edit窗口句柄,盗取用户名和密码。好了,费话少说,下面是小弟总结的windowless的缺点,如果要使用这类界面开发技术,要么有源代码,要么是自己公司实现的,否则风险非常大。

1、无窗口句柄,所有您以前关于“窗口”概念的知识都白学了。您将不可能使用::ShowWindow(hWnd, SW_HIDE)来隐藏一个窗口,也不能使用::MoveWindow来移动一个窗口。
2、所有您以前学习的关于“消息”的知识也作废了。您不可能使用::SendMessage(m_hWnd, WM_SETTEXT, 0, (LPARAM)_T("Hello world"));来设置窗口标题。
3、如果您的程序已经写好,需要花费比开发程序还要长的时间来移值到DirectUI界面上。
4、重新学习一套系统接口和概念,如果不是国际知名的大公司的windowless产品、这些知识对您的职业生涯没有太多好处,反而浪费了您的时间。
5、如果不是国际知名公司的产品,产品的稳定性和可发展性无法保证。
6、如果您的功能层代码需要与UI层交互,例如,要向UI窗口发送消息,那么您的功能层代码也要做相应的修改,所以windowless类的界面库,不仅仅影响UI层,还影响功能层。
7、窗口的剪裁、激活、绘制、消息循环等等全部需要模拟。
8、除了极个别程序,全球几乎所有软件产品都使用win32布局方式,无论在技术储备,兼容性和获得帮助方面,标准窗口观念都有得天独厚的优势。
9、无法对编译好的exe进行后期汉化、编写插件等常规操作。运行中的程序也无法响应其它程序发来的标准消息,例如隐藏控件、设置控件文本等。
10、不支持MFC的文档/视图框架。
综上、windowless比传统win32窗口树形结构有很多局限性和不确定性。

原创粉丝点击