複製鏈接
請複製以下鏈接發送給好友

停靠窗口

鎖定
停靠窗口是一個計算機術語,在許多程序中,有些窗口可以被拖放到另一個窗口中,並溶為一體,還可以停靠在主窗口的上中下、左右兩側。當設置為隱藏時,就會像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("未能創建停靠窗口\n");
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("未能創建“類視圖”窗口\n");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("未能創建“文件視圖”窗口\n");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("未能創建輸出窗口\n");return FALSE; // 未能創建}SetDockingWindowIcons(theApp.m_bHiColorIcons);return TRUE;}