程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> IE控制條的實現

IE控制條的實現

編輯:關於VC++

相信各位兄弟對微軟公司的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控制條”選項來顯示和隱藏。

本文配套源碼

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved