停靠对话框是指可以停靠在视图上下左右的对话框,创建的MFC对话框,可以调用停靠对话框的接口,直接嵌入到框架之中。
平台停靠对话框相关的类主要在BPNewDockManager和BPNewDockContainer中,BPNewDockContainer是用于承载dock内面板的容器类,BPNewDockManager主要是对dock进行管理,其中管理了4个BPNewDockContainer容器类。BPNewDockManager及BPNewDockContainer方法包括的方法如表8-4所示。
表8-4 停靠对话框接口列表
方法 | 描述 |
---|---|
BPNewDockManager | bool setDlg(int,CDialog) |
BPNewDockContainer getDock(int) | |
void showDockContainer(int,bool) | |
void setDockPosition(int,CString) | |
BPNewDockContainer | setDlg(CDialog ) |
CDialog getDlg() | |
showDockContainer(bool) | |
setDockPosition(CString) |
代码片段8-4展示了创建停靠对话框的过程。在示例中,先创建一个MFC对话框,这里需要注意的是创建的MFC对话框,属性中“Border”为none,“style”为child,“center”为false,创建的对话框与dock绑定,通过create函数把dock管理类中的第1个dock与创建的MFC对话框绑定。后续通过获取的BPNewDockContainer或者BPNewDockManager中传入序号来设置dock及停靠属性。属性包括设置停靠对话框的位置,位置的关键参数有5个,分别是“left”“right”“top”“bottom”“bottom-left”“left-DockTab”,代表的是左侧、右侧、上面、下面、左下侧、左侧页签面,最后就是设置创建的停靠框是否显示。至此完成停靠框的创建、嵌入、位置、显隐控制等。
创建dock对话框还有一点需要注意的是,一定要确认资源已经切换到对话框所在的模块,即是否有ExampledllDemo.AttachInstance(hInstance)这样的操作,不然可能会显示不出自己设置的对话框,而随便弹出其他模块的对话框。
BPNewDockContainer* myDock1 = nullptr;
void ToolUIRelevantDemo::initDockDemo()
{
PBBimModuleResourceOverride resOverride;
// 停靠窗口
ExternPaneDlg * dlg1 = new ExternPaneDlg();
dlg1->Create(IDD_DIALOG_Dock, BPNewDockManager::getInstance().getDock(0));
myDock1 = BPNewDockManager::getInstance().getDock(0);
if (myDock1 != NULL)
{
myDock1->SetDlg(dlg1);
myDock1->SetDockPosition(L"right");
myDock1->ShowDockContainer(true);
myDock1->SetWindowTextW(L"123");
}
}
代码8-4:创建停靠对话框