关于VS2010下创建类似CDialogBar的Dockable控件

最近在做一个MDI项目,需要用到一个带TreeCtrl的能dock的控件。坦白的说,由于是第一次做基于MDI的项目,所以一切都需要搜索。

 

在网上搜了一堆类似的控件,要么是用Cristi Posea在1998年写的一个类CSizingControlBar,要么是基于MFC的CDialogBar。

但是我是在VS2010上开发的,在函数DockControlBar(&m_wndMyDlgBar)时,会遇到类似如下错误:

 

vc7libs\ship\atlmfc\src\mfc\winfrm2.cpp Line:91

 

不知道为啥。后来在网上搜了一遍,发现是因为CDialogBar在VS2010上使用会有问题(具体原因还没查清楚)。

 

换一个方法来做:

  • 在类视图中添加MFC类,基于CDockablePane,比如取名叫CMyDP。
  • 在资源视图中添加一个IDD_FORMVIEW。因为是实验,所以这里ID暂时不改。属性用默认即可。
  • 基于该对话框资源,添加一个类,比如叫CMyFV。这个对话框是放在CMyDP里的,否则CMyDP中不会显示任何内容。
  • 在CMyDP类中添加一个CMyFV的变量,比如叫m_fv。
在CMyDP类中添加ON_WM_CREATE消息映射,并在OnCreate中创建m_fv:
if (!m_projDlg.Create(IDD_PROJVIEW,this))
{
TRACE0("未能创建输出选项卡窗口/n");
return -1;      // 未能创建    
}

m_projDlg.ShowWindow(SW_SHOW);

  • MainFrame中添加一个CMyDP的变量m_cmydp,并在OnCreate函数中创建:
if (!m_cmydp.Create(_T("MyPane"), this, CRect(0, 0, 100, 100),
      TRUE, IDD_FORMVIEW, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS
      | WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI))
 {
  TRACE0("未能创建输出窗口/n");
  return FALSE;
 }

m_cmydp.EnableDocking(CBRS_ALIGN_ANY);

EnableDocking(CBRS_ALIGN_ANY);

DockPane(&m_cmydp);

 

注意是使用DockPane而不是DockControlBar了。

其余的部分就自己去完善吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值