最近也遇到这个问题,在MFC SDI(单文档界面)中添加继承CDockablePane类的悬浮窗口后,因为CMainFrame继承于CFrameWnd,没有DockPane方法,所以将基类替换成CFrameWndEx。但此时整个软件无法成功启动,并提示“创建空文档失败”。
原因是:在MainFrm中调用了CToolBar,使用了DockControlBar来停靠工具栏。
完整解决方法是:将基类CFrameWnd替换成基类CFrameWndEx后,还需要将类CToolBar改为类CMFCToolBar,停靠接口DockControlBar改为DockPane来停靠即可。另外使用类CStatusBar定义的状态栏也会显示失败,改为类CMFCStatusBar即可。
如果对“替换基类”的方法感兴趣,可以查看网页链接
主窗口退出,窗口一起关闭 悬浮窗口只要是主窗口的子窗口,这个自然会实现;
悬浮窗口可移动 不做特殊处理的窗口都是可以移动的
双击显示主窗口 在子窗口的OnLButtonDBlck中,调用父类窗口的ShowWindow函数;
主窗口隐藏,显示悬浮窗扣 在主窗口最小化时,Hide自己,显示浮动窗口
1.在资源视图新建一个DialogBar资源,假设ID为IDD_DIALOGBAR2.然后在MainFrm头文件中添加
CDialogBar m_wndColorDlgBar//对话栏类
3.在MainFrm的OnCreate函数里 添加代码(跟在已创建的工具栏代码后面):
//创建新的对话栏,参数1.对话栏的父窗口,2.对话栏资源,3.对齐标志,4.为对话栏指定一个ID
if(!m_wndColorDlgBar.Create(this,IDD_DIALOGBAR,CBRS_TOP,AFX_IDW_CONTROLBAR_LAST-1))
{
TRACE0("Failed to create dialog bar\n")
return -1
}
4.在OnCreate函数的return语句之前添加:
m_wndColorDlgBar.EnableDocking(CBRS_ALIGN_ANY)
DockControlBar(&m_wndColorDlgBar)
这样一个可浮动的工具栏就创建好了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)