首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

實現 Excel/VC 風格資料夾標籤控制 CFolderTabCtrl (三):捲動按鈕與多標籤頁完善

     編輯:關於VC++

承接前兩部分,本章完善 CFolderTabCtrl 模擬 Excel/Visual C++ 資料夾標籤 UI,新增左右捲動按鈕(三角形圖示)、支援大量標籤頁自動捲動、雙擊/長按加速捲動,並整合至影像顯示範例程式驗證實用性。

捲動按鈕實作:CFolderButton

  • 繼承 CButton,BS_OWNERDRAW 自繪,DrawItem 以 GDI 繪製三角形(左右向),自動適應按鈕大小,無位圖縮放邊緣鋸齒問題。
  • 停用狀態用 3D 陰影色繪製;按下狀態用像素替換法呈現凹陷效果。
  • 特殊滑鼠行為:
    • OnLButtonDblClk:發送 WM_LBUTTONDOWN 模擬兩次單擊 → 捲動兩頁。
    • OnTimer:長按觸發定時器,週期性發送 WM_COMMAND 給父視窗 → 持續捲動至邊界(含啟動延遲,類似鍵盤重複鍵行為)。

整合至 CFolderTabCtrl

  1. 建立按鈕:OnCreate 中依樣式旗標 FTS_BUTTONS 建立兩個 CFolderButton 子視窗(ID: FTBPREV=1, FTBNEXT=2),記錄按鈕總寬 m_cxButtons。
  2. 尺寸管理:OnSize 重新定位按鈕與標籤區域。
  3. 繪製座標轉換:OnPaint 設定視口原點 dc.SetViewportOrg(m_cxButtons - firstTabRect.left, 0),使標籤繪製自動偏移至按鈕右側,原有繪製邏輯無需修改。
  4. 命令處理:ON_BN_CLICKED(FTBNEXT, OnNextTab) 遞增 m_iFirstTab、Invalidate()、呼叫 UpdateButtons() 更新按鈕啟用/停用狀態(首頁停用左鍵、尾頁停用右鍵)。

應用範例:影像顯示程式

基於《在 MFC 程式中顯示 JPG/GIF 影像》範例(CPicture 封裝 IPicture),建立 13 個標籤頁分別顯示不同格式影像(*.gif, *.jpg, *.bmp, DIB),驗證 CFolderTabCtrl 多標籤、捲動、繪製效能與視覺一致性。

原始碼結構

  • CFolderTabCtrl:核心標籤控制,含按鈕管理、標籤陣列、捲動邏輯、自繪。
  • CFolderButton:自繪捲動按鈕,封裝滑鼠/定時器行為。
  • MENUITEM 結構:標籤頁資料(文字、圖示索引、子視窗指標等)。

完整原始碼附於文章,可直接移植專案,快速獲得專業級資料夾標籤介面。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved