
Windows XP 開始選單風格獨特,經分析發現其非標準 CMenu,而是由兩個 ListView、一個 ToolBar、一個 Button 組合而成。本文提供一套自繪選單類 CYisongMenu,雖不敢與 XP 相比,但具備獨特風格,可作為主選單、系統匣選單、右鍵快捷選單使用。
主要檔案:CyisongMenu.cpp、CyisongMenu.h,基於 CWnd 與 CButton 實作。
CYisongMenu m_GroupMenu;
CYisongMenu m_SubGroupMenu; // 子選單
m_GroupMenu.SetMenuHeader("我的主選單", IDI_QQ, TRUE);
m_GroupMenu.AppendMenuItem("退出系統",
IDC_SUBITEM, // 選單 ID
IDI_ICON1, // 圖示
NULL, // 子選單指標
MENU_NORMAL | MENU_FONTBOLD); // 樣式:一般項目 + 粗體字
m_GroupMenu.AppendMenuItem("功能選單2",
IDC_SUBITEM + 1,
IDI_ICON2,
NULL,
MENU_NORMAL);
m_GroupMenu.CreateGroupMenu(this, CRect(0,0,150,300), IDC_MENU, 1, 1);
m_GroupMenu.ShowMenuPos(x, y, LEFTBOTTOM); // 第三參數指定 (x,y) 為選單哪個角
// 訊息對應
ON_COMMAND_RANGE(IDC_SUBITEM, IDC_SUBITEMMAX, OnMenuCommand)
// 回應函式
void OnMenuCommand(UINT nID)
{
CString str;
str.Format("你選擇了第 %d 功能", nID - IDC_SUBITEM + 1);
MessageBox(str, "執行結果");
}
SetMenuHeader(CString 標題, UINT 圖示ID, BOOL 顯示標題)AppendMenuItem(CString 標題, int ID, int 圖示ID, CWnd* 子選單, DWORD 樣式, CString 提示)
MENU_NORMAL、MENU_FONTBOLD、MENU_BORDLINE(分隔線)、MENU_SUBITEM(有子選單)、MENU_CHECKBOXCreateGroupMenu(CWnd* 父視窗, CRect 位置, UINT ID, BOOL 顯示標題, int 圖示模式)
歡迎批評指正與提出建議!