相信各位兄弟對微軟公司的IE一定非常的熟悉,由其是其右側可以顯示和隱藏的收藏夾看上去非常的美觀,基於這點,我便做了這個關於IE控制條的示例工程,希望能夠於大家共享,另外,由於我VC水平有限,所以在該工程中肯定會出現這樣或是那樣的問題,希望大家能夠多多提出一些問題,我將會一如既往的將其一一更正。
該工程的運行結果如下:
為了方便大家對代碼的閱讀,下面對CIEBar類作一簡單介紹:
一、IEBar界面的繪制
CIEBar從CDialogBar派生而來, 在OnPaint中調用了DrawFrm, DrawTitleTxt, DrawHideBtn三個函數
DrawFrm函數調用 MoveTo,LineTo函數繪制框架,DrawTitleTxt函數調用DrawText繪制標題文字,DrawHideBtn函數用於繪制關閉按鈕,其關鍵代碼如下:
// 添加tooltip
m_TipCtrl.AddTool(this, "關閉", t_HideBtnRc, 1);
// 繪制按鈕
dc.SelectStockObject(NULL_BRUSH);
if(m_bRaised)
dc.Draw3dRect(&t_HideBtnRc,
::GetSysColor(COLOR_BTNHIGHLIGHT),
::GetSysColor(COLOR_BTNSHADOW));
else if(m_bPressed)
dc.Draw3dRect(&t_HideBtnRc,
::GetSysColor(COLOR_BTNSHADOW),
::GetSysColor(COLOR_BTNHIGHLIGHT));
// 顯示關閉圖標
HICON hIcon = AfxGetApp()->LoadIcon(IDI_HIDE_BTN);
ASSERT(hIcon);
::DrawIconEx(dc.m_hDC,
t_HideBtnRc.left,
t_HideBtnRc.top,
hIcon,
16, 16, 0,
NULL,
DI_NORMAL);
在OnMouseMove中調用DrawHideBtnFace判斷鼠標是否在"關閉按鈕"上繪制按鈕的邊框
二、IEBar的關閉實現
在OnLButtonUp中判斷是否點在"關閉按鈕"上,假如是則關閉,代碼如下:
if(!m_HideBtnRc.IsRectEmpty())
if(m_HideBtnRc.PtInRect(point))
GetDockingFrame()->ShowControlBar(this, FALSE, FALSE);
三、IEBar尺寸調整的實現
在OnLButtonDown中判斷是否按在可調邊框上,並設置m_bResize記錄狀態
CRect t_CursorRc(m_VirClientRc);
t_CursorRc.left = m_VirClientRc.right;
t_CursorRc.right = t_CursorRc.left + IE_FRM_WIDTH;
if(t_CursorRc.PtInRect(point))
m_bResize = true;
在OnMouseMove中根據m_bResize的值來畫拖動線。
當鼠標放開,在OnLButtonUp中調用ResizeIEBar對窗口進行移動操作。
四、CIEBar的使用
CIEBar的使用非常簡單,在CMainFrame中定義一個變量後,在CMainFrame::OnCreate中用如下代碼創建並加入樹形控件:
if(!m_IEBar.Create(this, IDD_IEBAR, CBRS_LEFT, 100) || !m_IEBar.InitIEBar())
return -1;
CTreeCtrl* pTreeCtrl = m_IEBar.GetTreeCtrl();
ASSERT(pTreeCtrl);
// modify tree styles
pTreeCtrl->ModifyStyle(NULL,
TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS);
HTREEITEM t_hRoot = pTreeCtrl->InsertItem("root");
for(int i=0; i<40; i++)
{
CString t_ItemStr;
t_ItemStr.Format("node %d", i+1);
pTreeCtrl->InsertItem(t_ItemStr, t_hRoot);
}
m_IEBar.EnableDocking(CBRS_ORIENT_HORZ);
DockControlBar(&m_IEBar);
因為該工程是模仿IE浏覽器做的,所一其大部分的操作風格都和IE浏覽器非常的相似,例如當我門用鼠標調整IE控制條的寬度時,我們最多只能將其拉伸到工作區的一半大小為止,並且可以通過“查看”菜單中的“IE控制條”選項來顯示和隱藏。
本文配套源碼