一種漂亮的自繪菜單_第1頁
一種漂亮的自繪菜單_第2頁
一種漂亮的自繪菜單_第3頁
一種漂亮的自繪菜單_第4頁
全文預(yù)覽已結(jié)束

付費(fèi)下載

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、一種漂亮的自繪菜單以前還是菜鳥時就覺得QQ的菜單做得很漂亮,想著自已的程序如果有那種菜單多好?,F(xiàn)在積累了一定的知識,就自已設(shè)計了一個類似的菜單控件類。并把它發(fā)表出來供大家使用和參考,難免有不足的地方請高手不吝賜教!菜單效果如下:一、CMenuEx菜單類主要接口函數(shù):1、void InitMenu(CMenu *pMenu,UINT uToolBar,CToolBar *pToolBar);說明:這是最主要的一個接口。如果要改變主窗口的菜單則應(yīng)在主窗口的OnInitMenu(CMenu *pMenu)中調(diào)用該函數(shù)(如:m_menu.InitMenu(pMenu,IDR_MAINFRAME,&am

2、p;m_wndToolBar),當(dāng)然主窗口必須要有工具欄,才會產(chǎn)生菜單項位圖。最后還必須重載主窗口的OnMeasureItem()和OnDrawItem()。并在兩個函數(shù)中分別調(diào)用菜單類的另外兩個接口DrawItem()和MeasureItem();2、void SetHighLightColor(COLORREF crColor);3、void SetBackColor(COLORREF);4、void SetTextColor(COLORREF);以上三個接口應(yīng)該不用再說明 。QQ的菜單采用的顏色是SELECTTEXT_COLOR RGB(0,0,127)TEXT_COLOR RGB(0,

3、0,0)BK_COLOR RGB(143,167,207) 效果不錯5、void SetImageLeft(UINT idBmpLeft)說明:這也是個重要的接口。要實(shí)現(xiàn)縱向位圖(像“開始”菜單)??梢栽谶m當(dāng)?shù)牡胤秸{(diào)用該函數(shù)。參數(shù)當(dāng)然是位圖的ID值。注意選擇位圖時要選好看一點(diǎn)的哦!要記得高寬的比例。6、void InitPopupMenu(CMenu *pMenu,UINT uToolBar,CToolBar *pToolBar)與InitMenu不同的是:InitMenu并不修改第一級菜單為自繪風(fēng)格,而該函數(shù)有包括第一級菜單.但必須注意:該類的任一實(shí)例都只能調(diào)用這兩個函數(shù)中的一個,不能一同使

4、用!二、CMenuEx類的具體使用步驟:2.1 用CMenuEx類加載主窗口菜單的具體步驟:1、添加CMenuEx成員變量CMenuEx m_menu2、CMainFrame類添加WM_INITMENU消息,并在實(shí)現(xiàn)函數(shù)中加入代碼: m_menu.InitMenu(pMenu,IDR_MAINFRAME,&m_wndToolBar);IDR_MAINFRAME是工具欄資源ID,m_wndToolBar是工具欄對象 3、CMainFrame類添加WM_DRAWITEM和WM_MEASUREITEM消息,并在實(shí)現(xiàn)函數(shù)分加入: if(!nIDCtl) m_menu.DrawItem(lpDr

5、awItemStruct);if(!nIDCtl) m_menu.MeasureItem(lpMeasureItemStruct);只須這三步就大功造成了!但是有時你會發(fā)現(xiàn)菜單的位圖錯位了,這不是程序的錯。這是因為“工具欄位圖”的個數(shù)與“工具欄按鈕個數(shù)”不符,你只需把不用的位圖刪掉就可以,或者添加對應(yīng)的菜單項,反正使這兩個數(shù)目一致就對了4、如果你想要讓你的菜單擁有“縱向位圖”(像“開始”菜單),就必須在CMainFrame在OnCreate()中加入: m_menu.SetImageLeft(IDB_BITMAP1);/IDB_BITMAP1是指定位圖2.2 用CMenuEx類加載彈出菜單的具

6、體步驟:1、在CChildView類中加入成員變量 CMenuEx m_menu和CToolBar *m_pToolBar 為什么要加入m_pToolBar,這里做一下說明:因為在CMenuEx的接口函數(shù)InitPopupMenu()中需要工具欄對象指針,而工具欄對象又偏偏是CMainFrame類的成員所以設(shè)此指針變量指向工具欄對象2、給CChildView類的成員m_pToolBar賦值。當(dāng)CView派生類由不得CxxxxDocTemplate產(chǎn)生時,賦值的地方比較特殊請在CxxxWinApp類中的InitInstance()的最后加入代碼:CMainFrame *pFrame=(CMain

7、Frame *)m_pMainWnd;CChildView *pView=(CChildView *)pFrame->GetActiveView();pView->m_pToolBar=&(pFrame->m_wndToolBar);/注意:原m_wndToolBar是私有變量,要改成public的哦!當(dāng)CView派生類是CMainFrame類的成員變量時,就很簡單,直接在OnCreate()中設(shè)置3、在CChildView的構(gòu)造函數(shù)中加入設(shè)置彈出菜單的代碼 m_menu.CreatePopupMenu();m_menu.AppendMenu(0,ID_EDIT_UN

8、DO,"撤消");m_menu.AppendMenu(MF_SEPARATOR,0);m_menu.AppendMenu(0,ID_EDIT_COPY,"復(fù)制");m_menu.AppendMenu(0,ID_EDIT_CUT,"剪切");m_menu.AppendMenu(0,ID_EDIT_PASTE,"粘貼");/當(dāng)菜單ID與工具欄按鈕ID一樣時就會顯示位圖4、在CChildView的析構(gòu)函數(shù)中加入代碼:m_menu.DestroyMenu(); /釋放資源5、在CChildView類中加入WM_INITMENUPOPUP消息,并在其實(shí)現(xiàn)函數(shù)中加入代碼:if(!bSysMenu)m_menu.InitPopupMenu(pPopupMenu,IDR_MAINFRAME,m_pToolBar);6、在CChildView類中加入WM_CONTEXTMENU消息,并在其實(shí)現(xiàn)函數(shù)中加入彈出菜單的代碼: m_menu.TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,point.x,point.y,this);好了!介紹完了。大家可以在適當(dāng)?shù)牡胤剑ū热鏑MainFrame:OnC

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論