创建类似Visual Studio的界面

                                     

 

Visual Studio界面

Visual Studio的界面如下,很多人喜欢这种界面风格,尤其是主框架下的两个活动窗口:左侧为嵌套Tab控件的浮动窗口,底部为嵌套信息输出窗口的浮动窗口。这种浮动窗口类似于可浮动的工具栏,可以停靠在主窗口的任意一边,也可以浮动在主窗口内的任何位置,窗口的大小可以随鼠标的拖动而改变,还可以关闭和重新打开。

在MFC中,具有浮动性能的窗口都由一个共同的基类--控制条类CControlBar类派生,如工具栏类CToolBar、状态栏类CStatusBar和对话条类CDialogBar都是这样的。在这些派生类中,根据需要对CControlBar的默认属性作了修改,并增加了自己的特性,如在CStatusBar中限定了状态栏只能水平排列,而不能垂直排列。可以将这些在CcontrolBar基础上派生的类统称为控制条窗口。控制条窗口通常是一个与视图窗口处于同一级的框架类的子窗口。它通过获得父框架窗口的客户区(Client Area)的位置信息来计算自己的尺寸和位置,并通知父框架窗口剩下的客户区的位置和尺寸。控制条之间名于互相覆盖,且不会遮盖视力窗口。

注意:容易被忽视的一点,控制条能够沿框架窗口停靠取决于框架窗口沿边框四周创建的4个统一的控制条,即停靠栏。没有控制条来停靠时,停靠栏沿应用程序主窗口缩小到不可见,当控制条停靠在边框时,停靠栏就展开并包围这些控制条。
CFrameWnd的成员函数EnableDocking()沿框架窗口创建这4个停靠栏。但是,停靠功能不是自动地被MFC启动的,在CMainFrame::OnCreate()中,需要调用EnableDocking()才能进行工具栏的停靠操作。几个与停靠相关的函数是:
CFrameWnd::EnableDocking()  沿框架四周创建停靠栏。
CControlBar::EnableDocking()  设置控制条的停靠属性
CFrameWnd::DockControlBar()   将一个控制条停靠到一个停靠栏中

如CMainFrame::OnCreate()中关于工具栏的停靠代码
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
  .....
    //允许工具栏停靠
    m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);

    m_wndToolBar.SetWindowText("Standard Tool");

    //在主框架窗口四周创建停靠栏
    EnableDocking(CBRS_ALIGN_ANY);

  //将控制条停靠到停靠栏,默认为停靠到上边
  DockControlBar(&m_winToolBar);
或  DockControlBar(&m_winToolBar,AFX_IDW_DOCKBAR_TOP);
    ......
}

CCoolDialog类

创建这种类型的窗口,可以自己用CControBar类开发。当然,有现成的为什么不用呢?这里介绍Mr. Oliver Smith开发的CCoolDialogBar类。

Oliver Smith 的程序库中共有5个类:

1. CCoolDialogBar是最基本的类,直接从CControlBar中派生出来的,创建和管理停靠窗口。
2. CTabSheetDockBar实现左侧Tab窗口的创建和管理,从CCoolDialogBar派生出来。在DockTool.h中声明
3. CMessageViewDockBar实现底端窗口的创建和管理,从CCoolDialogBar派生出来。在DockTool.h中声明
4. CTabSheet实现左侧停靠窗口内的Tab创建和管理,它的基类是CTabCtrl。
5. COutputView实现在底部停靠窗口内字符串的输出管理,基类是SCrollView。

使用方法:
Oliver Smith的程序可以编译成一个DLL库。包含DockTool.dll,DockTool.lib和DockTool.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值