更新时间:2024-03-30 22:12
停靠窗口是一个计算机术语,在许多程序中,有些窗口可以被拖放到另一个窗口中,并溶为一体,还可以停靠在主窗口的上中下、左右两侧。当设置为隐藏时,就会像QQ一样收缩起来,有鼠标移到其上时又会像QQ一样出来的窗口。
概念:
如:Visual Studio 2010窗口中的各个小窗口,如:输出窗口、类窗口等。
编程方法:
在MFC中,这种停靠窗口是由CDockablePane类派生的,一般是在CMainFrame::OnCreate函数中创建。在菜单栏、工具栏、状态栏等创建之后,再创建这种停靠窗口。
值得注意的是:这种窗口创建之后,默认情况下是不可停靠的和隐藏的,还要通过调用EnableDocking()和DockPane()这两个函数使他们可停靠和显示出来。
下面是实例代码,一共生成了视图、文件、输出三个停靠窗口。主要使用的函数是Create()函数。
另外,LoadString()函数的作用是调用String Table里面定义的信息,也就是说,把String Table Caption里面的字符串读出来到CString对象里。String Table中的ID号及其对应的字符串都是可以自己定义的。 String Table在ResourceView窗口中,也就是ClassView右边那个窗口。双击之后就能看到,在最下面的选项中追加新的ID信息。
具体代码:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
创建停靠窗口
if (!CreateDockingWindows()) //调用下面的BOOL CMainFrame::CreateDockingWindows()函数
return -1;
m_wndFileView.EnableDocking(CBRS_ALIGN_ANY); //使文件视图窗口可停靠
m_wndClassView.EnableDocking(CBRS_ALIGN_ANY); //使类视图窗口可停靠
DockPane(&m_wndFileView); //使文件视图窗口显示出来
CDockablePane* pTabbedBar = NULL;
m_wndClassView.AttachToTabWnd(&m_wndFileView, DM_SHOW, TRUE, &pTabbedBar);
m_wndOutput.EnableDocking(CBRS_ALIGN_ANY);
DockPane(&m_wndOutput); //使输出窗口显示出来
创建停靠窗口的定义
BOOL CMainFrame::CreateDockingWindows()
BOOL bNameValid;
创建类视图
CString strClassView; //声明一个字符串变量,这是为了给生成的停靠窗口取名
bNameValid = strClassView.LoadString(IDS_CLASS_VIEW);
ASSERT(bNameValid);
开始调用Create()函数创建停靠窗口
if (!m_wndClassView.Create(strClassView, this, CRect(0, 0, 200, 200), TRUE, ID_VIEW_CLASSVIEW, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI))
创建文件视图
CString strFileView;
bNameValid = strFileView.LoadString(IDS_FILE_VIEW);
ASSERT(bNameValid);
if (!m_wndFileView.Create(strFileView, this, CRect(0, 0, 200, 200), TRUE, ID_VIEW_FILEVIEW, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT| CBRS_FLOAT_MULTI))
创建输出窗口
CString strOutputWnd;
bNameValid = strOutputWnd.LoadString(IDS_OUTPUT_WND);
ASSERT(bNameValid);
if (!m_wndOutput.Create(strOutputWnd, this, CRect(0, 0, 100, 100), TRUE, ID_VIEW_OUTPUTWND, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_BOTTOM | CBRS_FLOAT_MULTI))