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

CMenuEx:打造類似 QQ 風格的自繪選單控制項

     編輯:關於VC++

早期開發者常羨慕 QQ 選單的精美外觀。隨著技術累積,作者設計了 CMenuEx 類別,實現支援圖示、自訂顏色、垂直位圖等功能的自繪選單,並開源供參考。

核心介面函數

方法說明
InitMenu()主要介面,在主視窗 OnInitMenu() 中呼叫,需搭配工具列產生選單項位圖,並需重載 OnMeasureItem()、OnDrawItem()
InitPopupMenu()包含第一層選單的自繪初始化,與 InitMenu() 二擇一使用
SetHighLightColor()設定高亮文字顏色(QQ 風格建議:RGB(0,0,127))
SetBackColor()設定背景顏色(QQ 風格建議:RGB(143,167,207))
SetTextColor()設定一般文字顏色(建議:RGB(0,0,0))
SetImageLeft()設定垂直位圖(類似「開始」選單),需注意長寬比例

主視窗選單套用步驟

  1. 新增成員變數:CMenuEx m_menu
  2. 在 CMainFrame 加入 WM_INITMENU 訊息,實作中呼叫:
    m_menu.InitMenu(pMenu, IDR_MAINFRAME, &m_wndToolBar);
  3. 加入 WM_DRAWITEM、WM_MEASUREITEM 訊息:
    if(!nIDCtl) m_menu.DrawItem(lpDrawItemStruct);
    if(!nIDCtl) m_menu.MeasureItem(lpMeasureItemStruct);
  4. (選擇性)在 OnCreate() 中啟用垂直位圖:
    m_menu.SetImageLeft(IDB_BITMAP1);

常見問題:若選單位圖錯位,通常是工具列位圖數量與按鈕數量不符,調整使兩者一致即可。

彈出式選單套用步驟

  1. 在 CChildView 加入 CMenuEx m_menu 與 CToolBar* m_pToolBar
  2. 取得主視窗工具列指標(視架構不同,在 InitInstance() 或 OnCreate() 中設定)
  3. 建構函數中建立選單項:
    m_menu.CreatePopupMenu();
    m_menu.AppendMenu(0, ID_EDIT_UNDO, "撤消");
    m_menu.AppendMenu(MF_SEPARATOR, 0);
    m_menu.AppendMenu(0, ID_EDIT_COPY, "複製");
    // 選單 ID 與工具列按鈕 ID 相同時自動顯示位圖
  4. 解構函數釋放資源:m_menu.DestroyMenu();
  5. 加入 WM_INITMENUPOPUP 訊息呼叫 InitPopupMenu()
  6. 加入 WM_CONTEXTMENU 訊息顯示選單:
    m_menu.TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);

顏色設定範例

m_menu.SetHighLightColor(RGB(0,0,127));
m_menu.SetTextColor(RGB(0,0,0));
m_menu.SetBackColor(RGB(143,167,207));

總結

CMenuEx 封裝了複雜的自繪邏輯,提供豐富的自訂介面,讓開發者輕鬆打造專業級選單介面。原始碼開放供進一步擴充與學習。

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