Toolbar within splitter windows

转载 2004年09月18日 11:30:00

34 members have rated this article. Result:
red.gif red.gif red.gif red.gifwhite.gif white.gif
Popularity: 4.72. Rating: 3.08 out of 5.

Sample Image - toolbar_splitter.jpg

Introduction

Has anyone ever wondered how to dock a toolbar inside a splitter pane? Normally you cannot do that, but you can alter your splitter pane so that it will look just like you placed a toolbar on one of its sides. The trick is to create a two-pane splitter where your initial pane was; but not just any splitter, we will use our own, which does not allow resizing, and has different border settings. There is one additional view to create, and we will derive a class from CFormView since features provided by this class are closer to our goal.

The Code

First goes the custom splitter window:

// class definition
class CSmartSplitterWnd : public CSplitterWnd
{
public:
    CSmartSplitterWnd();
    virtual ~CSmartSplitterWnd();
    intHitTest(CPoint pt)const;
protected:
    DECLARE_MESSAGE_MAP()
};

// class implementation
CSmartSplitterWnd::CSmartSplitterWnd()
{
    // put your own values here, to make the splitter fit your needs
    m_cxSplitter=3;
    m_cySplitter=3;
    m_cxBorderShare=0;
    m_cyBorderShare=0;
    m_cxSplitterGap=3;
    m_cySplitterGap=3;
}

CSmartSplitterWnd::~CSmartSplitterWnd()
{
}

BEGIN_MESSAGE_MAP(CSmartSplitterWnd, CSplitterWnd)
    //{{AFX_MSG_MAP(CSmartSplitterWnd)
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

intCSmartSplitterWnd::HitTest(CPoint pt)const
{
    ASSERT_VALID(this);
    // do not allow caller to see mouse hits
    return 0;
}

Next, we must create a simple CFormView using the resource editor and ClassWizard. You can add any controls to your form view, but you must keep in mind that handling the WM_SIZE message may help you improve the look of your view. There are several ways to update your buttons and other controls inside the view; you may need to implement one of them to update, enable or disable the controls.

The last step is to create the splitter itself and the views. The code below matches a SDI application that accommodates the code above inside a splitter pane, but you can easily adjust it to fit your needs.

First, add a member to the CMainFrame class of type CSmartSplitterWnd:

class CMainFrame: public CFrameWnd
{
[...]
public:
    CSmartSplitterWnd m_barSplitter;

In the OnCreateClient member of the CMainFrame class, add code to create the splitter inside the right pane:

// create the splitter window
if (!m_barSplitter.CreateStatic(&m_parentSplitter, 2, 1, 
    WS_CHILD|WS_VISIBLE|WS_BORDER, 
    m_parentSplitter.IdFromRowCol(1, 0))) return false;

// create the views
m_barSplitter.CreateView(0, 0, RUNTIME_CLASS(CBarView), CSize(0, 0), pContext);
m_barSplitter.CreateView(1, 0, RUNTIME_CLASS(CTheView), CSize(0, 0), pContext);
// then set heights

The code is quite easy to follow and change to meet your needs, but if you need assistance, contact me. Also please send me bugs or updates, to keep this solution up-to-date. For more details on the sample application, contact me.

About Stefan Ungureanu


... coming in a short while

Click here to view Stefan Ungureanu's online profile.


Other popular Splitter Windows articles:

【Qt】之 Splitter分割窗口

中英文对照Splitter handles(分隔条)  一个QSplitter控件中可以包含其他控件,这些控件被一个分隔条隔开,托拽这个分隔条,里面的控件的大小可以改变。QSplitter控件经...
  • imxiangzi
  • imxiangzi
  • 2016年09月13日 15:42
  • 1059

用Win32实现带分割条(Splitter)的窗口

在MFC中借助向导的帮助很容易就能创建一个带有分隔条(Splitter)的窗口,但是在Win32中一切都没有那么容易,在这篇文章里我带领大家用Win32实现一个带这种Splitter的窗口。 一个S...
  • dong_mingyi
  • dong_mingyi
  • 2015年02月06日 18:23
  • 1302

WinForm 编程中控件的使用小技巧(splitter实现窗口分区域,改变Button的形状)

一、Splitter 控件的主要作用就是将窗口分区并可以调节区域大小,比如:我想将窗口分为左右两个区域,并可以调节两个区域所占的比例。操作流程如下: 1、新建一个窗口:Form1; 2、在Form1中...
  • u014056175
  • u014056175
  • 2015年10月14日 09:33
  • 3755

Oracle函数 --聚合函数中的语法within group

Oracle的聚合函数一般与group by 联合使用,但一般通过group by 聚合 但某些聚合函数会后跟 WITHIN GROUP (ORDER BY expr [ DESC ...
  • richieruan
  • richieruan
  • 2017年01月10日 16:08
  • 3432

开发遇到的问题

cannot create __weak reference in file using manual reference counting 解决1: 设置项目中的build setting ->...
  • KLong27
  • KLong27
  • 2017年05月08日 17:00
  • 427

【转帖】Android zxing 横屏 改竖屏识别解决方案

在网上找了很多方法,但最后都有问题,自己调试了好几个小时,最后终于完美解决了竖屏识别。 首先你需要有zxing项目的简化版代码,在这里。 使用简化版可以免去许多不必要的代码,方便学习研究,...
  • ilittleone
  • ilittleone
  • 2013年10月15日 11:28
  • 15919

Qt5布局管理(一)——QSplitter分割窗口类

概述本文首先通过三个实例分别介绍Qt5的分割窗口QSplitter类、停靠窗口QDockWidget类、堆栈窗体QStackedWidget类,然后介绍布局管理器的使用,最后通过一个综合实例介绍以上内...
  • LeeHDsniper
  • LeeHDsniper
  • 2016年03月29日 13:27
  • 4457

Toolbar的介绍和使用

1.Toolbar介绍      Toolbar是应用程序中使用的标准工具栏。     Toolbar是应用程序布局中使用的Actionbar的泛华,虽然Actionbar是传统Activity的不透...
  • wangjiang_qianmo
  • wangjiang_qianmo
  • 2016年02月16日 17:57
  • 1954

Maven+scala+spark常见问题总结

Maven常见问题总结
  • sivolin
  • sivolin
  • 2015年07月14日 14:32
  • 6073

【Qt】之 Splitter分割窗口

中英文对照Splitter handles(分隔条)  一个QSplitter控件中可以包含其他控件,这些控件被一个分隔条隔开,托拽这个分隔条,里面的控件的大小可以改变。QSplitter控件经常做...
  • teng_ontheway
  • teng_ontheway
  • 2014年01月14日 14:45
  • 9278
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Toolbar within splitter windows
举报原因:
原因补充:

(最多只允许输入30个字)