[MFC]解决单文档创建Dock窗口出现DockPane()未定义问题
2017-08-04 19:16
2246 查看
问题描述
近来,要编写一个用于显示处理影像的单文档程序,这个程序需要在右侧单独显示影像图层列表,并实现可停靠可浮动的特性。经过查阅资料,发现利用MFC的CDockablePane类可以实现,于是通过教程进行创建,但是在Dock实现的最后一步出现问题,也就是在CMainFrame类中的OnCreate中添加如下代码时,编译器提醒DockPane()未定义。DockPane(&m_layers_pane);
图1 错误提示
问题原由
后来才发现,我所创建的单文档程序中的CMainFrame类的基类是CFrameWnd,而DockPane()函数是包含在CFrameWndEx类中的,也就是说,如果CMainFrame的基类能改为CFrameWndEx的话,上述问题便可解决。解决方法
如何使CMainFrame的基类为CFrameWndEx呢?在类视图中可以查看CMainFrame的基类,但是却无法更改,如果不嫌麻烦的话,可以参考CFrameWndEx类中DockPane()的实现代码,在CFrameWnd中自行添加实现,但无疑这种方法十分不可取。
如果不去自己实现DockPane()的功能,那只能重新创建项目,将CMainFrame的基类设置为CFrameWndEx。
在重新创建项目的时候,设置向导的最后一步是设置各个生成类的信息,但是当我想修改CMainFrame的基类时发现,这个选项是灰色的,即无法修改,如图2所示。
图2 无法修改
我想,这应该与设置向导中前面几步的设置有关,于是我返回上面几步查看,果然,在选择用户界面功能的时候,有多个选项可供选择,如图3所示,在“命令栏(菜单/工具栏/功能区)”设置中,有三个选项, 如果选择“使用经典菜单”,则在之后的“生成的类”中CMainFrame的基类便是CFrameWnd,如果选择其它两个中的一个,则CMainFrame的基类便是CFrameWndEx。这里我选择“使用菜单栏和工具栏”。
图3 命令栏方案选择
继续下一步,直到最后“生成的类”,查看CMainFrame的基类便默认为CFrameWndEx了。
图4 基类已变为CFrameWndEx类
好了,根据上面发的教程,最终可以成功创建出Dock窗口。
图5 程序创建结果
相关文章推荐
- MFC中修改dockpane的位置生成的程序却没有生效的问题解决
- 关于多文档MFC从xp系统上移植到win7上出现错误的问题解决经验
- C#中动态创建控件 出现创建窗口句柄出错问题解决。
- MFC中DockPane初始化停靠换乱问题解决办法
- MFC中DockPane初始化停靠换乱问题解决办法
- MFC中修改dockpane的位置生成的程序却没有生效的问题解决
- Visual studio2010创建MFC的工程中资源视图出现空白问题原因与解决
- 解决多文档程序框架中建立新的子框架类后出现“创建空文档失败”的问题
- MFC中多文档ActiveX创建子窗口
- 工作线程中调用UI线程创建的窗口的UpdateData会导致Assert的问题及解决办法
- 多文档、多模板程序建立新的子框架类后,出现“建立空文档失败”问题的解决办法
- 分割窗口时CFormView与Pane关联时出现的问题
- 基于MFC的opengl编程(解决拖动窗口抖动问题)
- 解决在创建销售订单时出现工厂日历CN等错误提示问题
- Delphi动态创建窗口可能出现的问题
- 工作线程中调用UI线程创建的窗口的UpdateData会导致Assert的问题及解决办法.
- MFC CScrollView 对大视图出现滚动条回滚问题的解决
- 关于使用CreateUserWinzard控件创建用户时出现连接数据库问题的解决方法
- 仿MFC实现c++按名动态创建对象之续(瘦身以及解决其在dll中使用的问题)
- 关于安装IE8之后VS2008使用MFC出现问题的解决方法