前段時間在VC知識庫發表了《輕松實現類MSDN2002界面》,僅僅實現了標簽頁的拖放、停靠、浮動等功能,而上面的圖釘按鈕也只是一個假的^_^。通過參考codeproject.com/docking/pinnabledock.asp的代碼對程序進行了加強。現在已經可以實現自動隱藏了!!!效果圖如下。(比較匆忙,程序還有很多不令人滿意的地方,有待改進。上周剛接到新任務,不能繼續做了,只好請大家來完善了,希望你把修改後的代碼發我一份,謝謝)
圖一
下面,我將一步步介紹怎樣使用 DockPage、AutoHideBar。
一、通過AppWizard使用默認選項生成一個SDI界面工程。把src目錄拷貝到你的工程文件夾下。
在菜單Project->Add to project->Files將六個文件加入工程中。在stdafx.h文件中加上:
#define WM_AUTOHIDE_ON WM_USER+1
#include ".\src\sizecbar.h"
#include ".\src\AutoHideBar.h"
二、修改 MainFrame 的繼承關系。
頭文件修改為:class CMainFrame : public CautoHideFrame
cpp文件修改:IMPLEMENT_DYNCREATE(CMainFrame, CAutoHideFrame)
BEGIN_MESSAGE_MAP(CMainFrame, CAutoHideFrame)
三、 聲明DockPageBar:
CDockPageBar m_wndDockPageBar
在OnCreate創建DockPageBar:
if (!m_wndDockPageBar.Create(_T("DockPageBar"), this, CSize(230,260),TRUE,123))
{
TRACE0("Failed to create DockPageBar.\n");
return -1;
}
m_wndDockPageBar.SetBarStyle(m_wndDockPageBar.GetBarStyle() |
CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
m_wndDockPageBar.EnableDocking (CBRS_ALIGN_ANY);
允許Frame停靠:
EnableDocking(CBRS_ALIGN_ANY);
將DockPageBar停靠到左邊:
DockControlBar(&m_wndDockPageBar, AFX_IDW_DOCKBAR_LEFT);
四、好了,停靠 Bar 已經創建好了,並且具有了自動隱藏功能。下面你就可以忘停靠條裡添加標簽頁了!!
if (!m_wndEdit.Create(WS_CHILD|WS_VISIBLE|
ES_MULTILINE|ES_WANTRETURN|ES_AUTOVSCROLL,
CRect(0,0,0,0), this, 123))
return -1;
m_wndDockPageBar.AddPage(&m_wndEdit,"Edit",IDI_INDEX);
OK,編譯執行就可以了!!就這麼簡單。至於實現原理就不在這裡講了,有幸趣的話可以看源碼,不過源碼有點亂,現在實在是沒有時間整理了!!自動隱藏功能的實現代碼沒有加注釋,抱歉!!!