因为Ogre使用MyGUI作为GUI,所以需要看懂MyGUI。
MyGUI实质是Win32的DLL。
MyGUI的Samples是引用MyGUI库的Win32 App。
以MyGUI3.2.0的实例Demo_ItemBox为例,
首先看其文件,找不到winmain在哪里。看了很多Samples后,它们都有1个
DemoKeeper的文件,怀疑跟这个文件有关。
在DemoKeeper。cpp的文件尾发现了一行:
MYGUI_APP(demo::DemoKeeper)
在Base/Main.h文件里有一段代码:
#if MYGUI_PLATFORM == MYGUI_PLATFORM_WIN32# ifdef MYGUI_CHECK_MEMORY_LEAKS
# define MYGUI_APP(cls) INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT argc) { _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); return startApp<cls>(); }
# else
# define MYGUI_APP(cls) INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT argc) { return startApp<cls>(); }
# endif
#else
# define MYGUI_APP(cls) int main(int argc, char **argv) { return startApp<cls>(); }
#endif
//函数模板
template <class AppClass>
int startApp()
{
try
{
AppClass* app = new AppClass();
app->prepare();
if (app->create())
{
app->run();
app->destroy();
}
delete app;
app = 0;
}