现在的位置: 首页 > 综合 > 正文

WinX教程之我的实战(一)

2014年09月05日 ⁄ 综合 ⁄ 共 1815字 ⁄ 字号 评论关闭

按:这一部分内容及其简单,但也希望你能尽量浏览一下,因为其中会有侧重点的不同,对以后的概念理解有好处。

 

WinX目录下tutorials/winx中,共有18WinX使用实例,我们先从第1套——step001“战”起。由于WinX每套实例中会有多个项目,所以这里我强烈建议将Workspace中的活动项目(Active Project)的字体改为Fixedsys,以加重区别。具体方法是:Tools->Options->Format,选择Category->Workspace Window,将右边Font改为Fixedsys,这样在Workspace Window中标示我们当前活动项目成了对比强烈的黑色。

 

OK,言归正传,打开step001中的hello.dsw工作区文件。我们可以看到这里共有8个例子:2个是MFC的,2个是SDK的,2个是WINX的,2个是WTL的。

 

按:我不得不假定你所具有的开发知识背景和我类似,即了解SDK开发,熟悉MFC开发,没有接触过WTLWinX。当然和我背景不一样也没关系,:)


四类例子中都分别演示了如何创建对话框窗口和普通窗口。

l         MFC

MFC的两个例子,HelloMfc演示了普通利用资源文件创建窗口(对话框),HelloMFC2演示了程序动态创建窗口。利用了CDialogCMainFrame类,代码都很简单。

l         SDK

基于SDK的程序需要重头做起,注册窗口类、创建窗口、显示窗口,在窗口函数中拦截消息……。当然,对于对话框这一特殊窗口,系统已经代替我们注册了窗口类,我们只要提供我们的窗口函数就可以。但你需要多提供一个参数,那就是对话框资源ID

l         WTL

WTL程序和MFC很类似的一点,都是通过在对话框类中定义枚举变量标明对话框资源ID

       enum { IDD = IDD_HELLO };

MFC中全局的theApp也成了_Module

l         WinX

WinXWTL相似的一点就是这种写法:

class CDerivedClass : public CBaseClass< CDerivedClass >
派生时,派生类类型同时也作为模版参数。这种写法贯穿WinX

在对话框程序中,WinXMFC非常相似,唯一不同就是对话框资源IDMFC程序中被作为一个枚举常量定义,而在WinX程序中它作为一个模版参数传入:

class CHelloDlg : public winx::ModalDialog<CHelloDlg, IDD_HELLO>

在普通窗口程序中,WinX倒是和WTL比较类似,它也会要求我们在全局域中定义_Module变量。但WinX同样也在WinMain内定义了一个module变量:

CAppModuleInit module;

在以后的程序中你还会碰到别的类似的变量,当你不知道到底该定义哪个变量时,开始的准则是:添加变量直至程序编译通过。

需要注意的是以下几段代码:

 

1.         WINX_CLASS("CHelloMainFrame");

WINX_CLASS注册窗口类,一个参数是窗口类的类名。

2.         CHelloMainFrame::RegisterClass();

在这里注册窗口类。相比MFCWTLWinX比它们多了注册窗口类这一步,但以后你会发现多做了这一步给我们带来了多大的灵活性。

3.         void OnPaint(HWND hWnd)

没有任何拦截消息的代码,我们只要按照规范定义相应消息处理函数就可以。对于WM_PAINT消息,它的处理函数就是OnPaint,我们只要按照我们的用途编写OnPaint代码就可以了。系统消息的处理函数一般都是按照OnXXXX这种样式定义的。有人会说,万一我并不知道某一系统消息的存在,而定义了我自己的OnYYYY函数,就有可能和系统冲突。你的担心是必要的,一个简单而有效的解决方法就是,自己的函数以ZZZZ_OnYYYY,“ZZZZ”可以代表用途的名字后者你想要的,如“WebBrowser_OnYYYY”。

 

综上,WinX在某种程度上,好像是结合了MFCWTL,用起来不会生手。WinX是基于模板的,但对于没有接触过模板的人,也不要紧,只要记住特定的写法(派生类型作为模板参数),使用WinX也不成问题。

 

目前我们好像还不能实战什么,不要急,好戏在后头!

 

抱歉!评论已关闭.