在許多程式中,有些視窗可以被拖放到另一個視窗中,並溶為一體,還可以停靠在主視窗的上中下、左右兩側。當設定為隱藏時,就會像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;
}
相關詞條
-
《Linux視窗程式設計》
《Linux視窗程式設計》是由成潔,盧紫毅編著,於2008年清華大學出版社出版。
編輯推薦 內容簡介 目錄 書摘插圖 參考資料 -
視窗布局
你能從中選擇一種工作區布局。 “面板組”(如下圖) “檔案”面板(如下圖)
-
X視窗管理器
X視窗管理器是X視窗系統中,用來控管視窗外觀和放置方式的視窗系統軟體,主要用於類Unix系統。 X視窗管理器和蘋果公司的Macintosh和微軟公司的W...
簡介 X視窗管理器的運作原理 特殊的視窗管理器 主流X視窗管理器 其它X視窗管理器 -
Linux視窗程式設計
本書主要以Qt編程實例為基點,將程式設計中經常使用的編程方法和技巧介紹給讀者,針對性強,對於初學者來說是一本非常實用的參考書。書中所選實例都是作者多年研...
編輯推薦 內容簡介 目錄 書摘插圖 -
無錫中央車站
、711、712、715、716。2、途經停靠新無錫汽車站(錫滬西路上...、興昌路進入無錫中央車站東環島後經錫滬西路、廣瑞路返回。撤銷停靠:桑達園、廣安橋、廣南路(廣益睦鄰中心)站。增設停靠:桑達園(柏莊路)、中大諾卡...
新無錫汽車客運站 無錫城鐵站 售票點 -
新無錫汽車客運站
、607支、705、711、712、715、716。 2、途經停靠新...中央車站東 環島後經錫滬西路、廣瑞路返回。 撤銷停靠:桑達園、 廣安橋、 廣南路(廣益睦鄰中心)站。 增設停靠:桑達園(柏莊路)、 中大諾...
公交線路一覽表 無錫新汽車客運站:智慧型化人性化無處不在 地理位置 -
合川公交線路
具體線路(一)225路首末站點為花灘、炮台村停靠站點:職教中心站、釣魚...成本後再行延伸至炮台村)1.首末站點為花灘、炮台村2.停靠站點:職教中心...中心停靠站點:火車站、牌坊路站、南屏中學站、南屏花園站、中南路站、移動...
具體線路 新編號規則 公交速查 磁卡和票價 電子站牌 -
酷點桌面
外掛程式等功能!個性化功能視窗陰影酷點桌面視窗上具有凸顯立體感的陰影,只需要輕輕的點擊下開啟視窗陰影效果,視窗馬上陰影起來。還可方便調整陰影顏色、濃度...、滑鼠右鍵選單的投影設定;4、可以指定排除不需要投影的視窗;桌面搜尋...
軟體介紹 個性化功能 更新日誌 歷史版本 -
CFrameWnd
CFrameWnd的創建該類定義了兩個成員函式用於創建主視窗,即...::CreateEx()創建視窗;而後者首先組織參數,再調用前者。它們的定義如下...::Create()稍有不同。因為目的是創建主視窗,所以第6個參數要求選單資源...
CFrameWnd的創建 管理視圖對象 管理控制條 分發命令訊息 必要的訊息處理