WinxGui Home

WINX可视化开发工具的初步任务规划

WINX可视化开发工具初步定名为VisualWinx (QWL1996提名) 。

首要考虑的支持平台

  • VS2005 / VS2003

之所以选择 VS2005 / VS2003 作为开始,有两点考虑:

  1. VS2005 / VS2003 用户相对比较多
  2. VS2005 / VS2003 的API支持丰富,二次开发相对容易。并且,在开发中我们逐步加深对 VS2005 / VS2003 API 的了解,这非常有意义。因为VS2005 / VS2003 的二次开发 API 是经过多年发展成熟起来的,相信比我们自己去定义接口要好很多。这实际上减轻了我们架构设计的负担。

从功能上来说,VisualWinx 首先考虑支持:

  • 属性、事件的可视编辑。这是用户最迫切需要的功能。其中属性 VS2005 / VS2003 已经具备基本功能,缺的只是WINX特有的;事件只有在MFC程序中被支持,普通Win32程序并不支持,这一点我们需要补上。

至于 DDX 支持等以及其他功能,优先级排后。

从开发任务来说,我们第一部会分为以下几块独立研究:

  1. 界面开发
    • ResEditPKG 研究
  2. 源代码分析与插入
    • EnvDTE::CodeModel 研究

ResEditPKG 是 VS2005 / VS2003 之资源编辑器提供的二次开发接口。通过它我们可以增强 Visual Studio 资源编辑器的能力。

ResEditPKG 研究主要关注以下内容(举例):

  • 如何取得当前编辑的对话框ID?
  • 如何取得当前编辑的控件以及控件ID?
  • 如何添加事件?
  • 如何添加属性?
  • 如何让用户可视地编辑属性?例如,编辑对话框字体、背景等?

EnvDTE 是Visual Studio 集成环境的二次开发接口,功能极其丰富。EnvDTE::CodeModel / EnvDTE::FileCodeModel 是一个相对独立的子集,用来对外暴露当前工程源代码的DOM模型。通过 EnvDTE::CodeModel ,你可以遍历整个工程中的类、(成员)函数,并获得他们的详细信息

EnvDTE::CodeModel 的研究主要是:

  • 如何实现在源代码中添加/删除属性、事件?

非 VS2005 / VS2003 平台支持

  • ResEditPKG,这一部分多数不能重用,尽量重用一些可重用的对话框等UI元素。
  • CodeModel,这一部分要模拟 EnvDTE::CodeModel/FileCodeModel 相关的接口。当然,并不是要完整实现整个CodeModel,而是按需实现。

评论

API钩子(APIHook)

说到API钩子(APIHook),也许大家并不陌生,金山词霸取词模块的核心之一就是挂接GDI绘制API(如TextOut等)的钩子。在WINX中,你会发现实现API的钩子极其简单。我们在winx-1.1.08中提供了这方面的样例。

何谓本地钩子、全局钩子?APIHook的机理如何?欢迎对此感兴趣的朋友探讨。

评论 (5)

注册表(Registry)与配置文件(IniFile)

在WINX中,我倾向于把注册表(WinRegistry)、配置文件(IniFile)看作一类东西。目前,注册表相关的内容已经提供(参见:stdext/registry/WinRegistry.h),配置文件(IniFile)相关的接口规格会尽可能采用兼容注册表的concept。

注册表类在ATL不同版本中变化较大,故此WINX决定不基于ATL的Registry,而自己提供一个。

这里有两个待做事项:

  • 提供配置文件(IniFile)的包装类。
  • 提供注册表(WinRegistry)、配置文件(IniFile)相关的文档。

评论

WINX的文件读写(磁盘IO)相关文档

我们知道,C/C++的二进制文件(Binary)操作本身已经有:

  • 低级IO操作:open/read/write/close/etc.
  • FILE:fopen/fread/fwrite/fclose/etc.
  • iostream:class ifstream/ofstream/iofstream/etc.

那么,为什么WINX还要提供新的磁盘IO操作?

  • archive(参考:stdext/archive/StdioArchive.h, stdext/archive/StreamArchive.h)
    • StdioWriteArchive
    • StdioReadArchive
    • StreamReadArchive
    • StreamWriteArchive
    • MemStreamReadArchive
    • MemStreamWriteArchive
    • 提醒:RegArchive.h, SimpleArchive.h, RecordArchive.h等文件中的内容并不成熟,将承受变更。
  • filemapping(参考:stdext/FileMapping.h)
    • SimpleFileMappingRO (ReadOnly)
    • SimpleFileMapping
    • FileMapping

欢迎对这个问题有兴趣的朋友,撰文探讨一下,并协助补充Archive/FileMapping相关的文档。

评论

完善 WINX 的 XPMenu

其实 WINX 的 XPMenu 挺早就由 renfengxing 开发出来了,一直希望可以对它进行改善后发布。这个功能效果看起来蛮不错,而且也非常符合 WINX 的原则:简单易用。你只要加一句:

  WINX_APP_MENU();

就可以让整个程序中的所有菜单,包括 Edit 控件弹出的右键菜单,都具备XP风格。酷吧?不过,这个功能目前有一些预知的缺陷:

  • 不支持 OwnerDraw(用户自定义的绘制模式)。也就是说,用户希望进行菜单绘制上的细节调整,目前并不能做到,这也是这个功能迟迟未能加入 WINX 的原因。
  • 不支持菜单 Item 中加入图片(这个倒不是很难)。
  • 一些细节 Bug 。

欢迎您一起来完善这个绚丽的功能,让 WINX 应用程序有更好的 LookNFeel 。

评论

让 WINX 支持 ActiveX 开发

其实,从 WINX 包含的技术上来讲,WINX 已经支持 ActiveX 开发,只是目前没有这方面的比较完整的案例。

  • 如果您有兴趣,可以尝试提供一个样例。
  • 进一步,您也可以考虑在 WINX AppWizard  中加入这个特性。

参考资料:

评论

WINX AppWizard for VS.NET

WINX AppWizard for Visual C++ 6.0 已经提供,我们急迫需要提供支持 Visual C++ 2003, Visual C++ 2005 的版本。

要获得 WINX AppWizard for Visual C++ 6.0 的源代码,您可以:

由于 VisualC++6.0 与 VisualC++.NET 的向导机制不太一样,因此需要有较大的调整。

这里是一份 迁移 AppWizard 从 VisualC++6.0 到 VisualC++.NET 的技术指南,您可以参考。

评论