IMPLEMENT_APP的详解

 

wxWidgets在win32平台下的实现,开始于宏IMPLEMENT_APP,在每个wxApp子类的实现文件中,都有IMPLEMENT_APP(appname) ,该宏的定义如下:
// Use this macro exactly once, the argument is the name of the wxApp-derived
// class which is the class of your application.
#define IMPLEMENT_APP(appname)
IMPLEMENT_APP_NO_THEMES(appname)
IMPLEMENT_WX_THEME_SUPPORT


其中IMPLEMENT_WX_THEME_SUPPORT宏用于theme的支持,定义如下:

#ifdef __WXUNIVERSAL__
#include "wx/univ/theme.h"

#define IMPLEMENT_WX_THEME_SUPPORT
WX_USE_THEME(win32);
WX_USE_THEME(gtk);
#else
#define IMPLEMENT_WX_THEME_SUPPORT
#endif


从定义中可以看出该宏只在定义了__WXUNIVERSAL__时有意义,对于MSW,该定义为空。就是说,在使用wxUniversal时,wxWidgets可以支持两种theme(win32和gtk),在其它的情况下,都是使用native GUI,不支持theme

接下来看IMPLEMENT_APP_NO_THEMES(appname) 的定义:

 

// Same as IMPLEMENT_APP() normally but doesn&apost include themes support in
// wxUniversal builds
#define IMPLEMENT_APP_NO_THEMES(appname)
IMPLEMENT_APP_NO_MAIN(appname)
IMPLEMENT_WXWIN_MAIN

该定义由IMPLEMENT_APP_NO_MAIN和IMPLEMENT_WXWIN_MAIN两个宏组成:

 

// Use this macro if you want to define your own main() or WinMain() function
// and call wxEntry() from there.
#define IMPLEMENT_APP_NO_MAIN(appname)
wxAppConsole *wxCreateApp()
{
wxAppConsole::CheckBuildOptions(WX_BUILD_OPTIONS_SIGNATURE,
"your program");
return new appname;
}
wxAppInitializer
wxTheAppInitializer((wxAppInitializerFunction) wxCreateApp);
appname& wxGetApp() { return *(appname *)wxTheApp; }

#define IMPLEMENT_WXWIN_MAIN
extern "C" int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
wxCmdLineArgType lpCmdLine,
int nCmdShow)
{
return wxEntry(hInstance, hPrevInstance, lpCmdLine, nCmdShow);
}

其中IMPLEMENT_APP_NO_MAIN宏定义了一个全局变量和两个全局函数,这些全局量将为程序的工作提供辅助功能,代码很简单。

IMPLEMENT_WXWIN_MAIN是重点,是整个程序的入口,从中可以看出,wxWidgets在win32上的实现和普通的win32应用程序一样,都是开始于WinMain入口。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值