停靠窗口


请输入要查询的词条内容:

停靠窗口


概念:

在许多程序中,有些窗口可以被拖放到另一个窗口中,并溶为一体,还可以停靠在主窗口的上中下、左右两侧。当设置为隐藏时,就会像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()函数

{

TRACE0("未能创建停靠窗口\");

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))

{

TRACE0("未能创建“类视图”窗口\");

return FALSE; // 未能创建

}

// 创建文件视图

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))

{

TRACE0("未能创建“文件视图”窗口\");

return FALSE; // 未能创建

}

// 创建输出窗口

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))

{

TRACE0("未能创建输出窗口\");

return FALSE; // 未能创建

}

SetDockingWindowIcons(theApp.m_bHiColorIcons);

return TRUE;

}

相关分词: 停靠 窗口