OGRE是如何处理初始化对话框的也就是root->showConfigDialog()这个函数究竟在底层进行了一些什么工作。
这个函数分为三个步骤:
1.创建一个对话框:dlg = mPlatformManager->createConfigDialog();
2.显示对话框并进行配置:isOk = dlg->display();
3.销毁这个对话框:mPlatformManager->destroyConfigDialog(dlg);
OGRE引擎是平台无关的,而对话框却是平台相关的,这就是要让PlatforManager来创建对话框的原因。PlatforManager定义了一系列平台相关的函数接口和函数指针,比如:
ConfigDialog* createConfigDialog();//定义接口
typedef void (*DLL_CREATECONFIGDIALOG)(ConfigDialog** ppDlg);//函数指针
这样做的好处是可以通过设置函数指针来达到动态链接到具体平台下的函数(见PlatforManger的构造函数)。
在PlatforManager的构造函数中,它载入了具体平台(OgrePlatform.dll):
DynLib* lib = DynLibManager::getSingleton().load(DREAM_PLATFORM_LIB);
并设置了这些函数指针,使得它们指向具体平台下的函数:
mpfCreateConfigDialog = (DLL_CREATECONFIGDIALOG)lib->getSymbol ("createPlatformConfigDialog");
这样创建的对话框也就是具体平台下的对话框了。同样,销毁对话框也要通过mPlatformManager。
显示对话框和进行配置见:Win32ConfigDialog。