VC+控件使用——菜單_第1頁
VC+控件使用——菜單_第2頁
VC+控件使用——菜單_第3頁
VC+控件使用——菜單_第4頁
VC+控件使用——菜單_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、VC+簡單應用指南四菜單一、菜單資源設計1.打開工作區(qū)窗口,在Resource View選項卡中,右擊,選擇插入2.打開插入資源對話框,選擇Menu節(jié)點,點擊新建3.打開菜單資源設計窗口,再按Enter鍵,顯示菜單資源屬性窗口4.在菜單資源屬性窗口中填寫標題5.選中菜單標題填寫的子菜單,并點擊Enter鍵或者雙擊6.添加分割線,在菜單資源屬性中點選分隔符(Separator)7.子菜單添加彈出菜單,菜單資源屬性中點選彈出(Pop-up)8.給菜單添加快捷鍵,在標題后添加“&+字母”,則Alt+字母就是快捷鍵二、菜單項的命令處理1.命令設置在類向導中;打開類向導,點選Message Maps選項

2、卡2.打開Message Maps選項卡,Class name對應對話框;Object IDs對應菜單項ID;Messages對應事件:COMMAND單擊事件3.選擇COMMAND單擊事件,點擊Add Function,彈出創(chuàng)建窗口,點擊OK4.在類向導中點擊Edit Code按鈕,顯示命令處理函數(shù)三、動態(tài)創(chuàng)建菜單1.創(chuàng)建基于對話框的應用程序2.頭文件中聲明一個CMenu類對象m_Menu3.1在FileView選項卡中打開資源頭文件(Resource.h),定義命令ID3.2在資源頭文件中添加的代碼如下#define ID_MENUCAT 1001#define ID_MENUDOG 100

3、2#define ID_MENUMONKEY10034.1在對話框OnInitDialog方法中創(chuàng)建菜單4.2創(chuàng)建菜單程序m_Menu.CreateMenu();CMenu m_PopMenu;m_PopMenu.CreatePopupMenu();m_Menu.AppendMenu(MF_POPUP,(UINT)m_PopMenu,m_hMenu,動物);m_PopMenu.AppendMenu(MF_STRING,ID_MENUCAT,貓);m_PopMenu.AppendMenu(MF_STRING,ID_MENUDOG,狗);m_PopMenu.AppendMenu(MF_STRING

4、,ID_MENUMONKEY,猴子);m_Menu.AppendMenu(MF_POPUP,-1,植物);m_PopMenu.Detach();SetMenu(&m_Menu);5.1在對話框的頭文件中聲明菜單的消息處理函數(shù)5.2程序afx_msg void OnMenucat();afx_msg void OnMenudog();afx_msg void OnMenumonkey();6.1在對話框源文件中添加消息映射宏,將命令ID關聯(lián)到消息處理函數(shù)中6.2程序ON_COMMAND(ID_MENUCAT,OnMenucat)ON_COMMAND(ID_MENUDOG,OnMenudog)ON

5、_COMMAND(ID_MENUMONKEY,OnMenumonkey)7.1在對話框源文件中添加消息處理函數(shù)7.2程序void CMy124Dlg:OnMenucat() MessageBox(貓);void CMy124Dlg:OnMenudog() MessageBox(狗);void CMy124Dlg:OnMenumonkey() MessageBox(猴子);四、創(chuàng)建彈出式菜單1.創(chuàng)建基于對話框的應用程序2.在資源選項卡中右擊,選擇插入,在插入資源窗口中選擇Menu 點擊新建3.對菜單進行編輯4.在對話框頭文件中聲明一個CMenu類對象m_Menu5.在OnInitDialog方法

6、中調用LoadMenu方法加載菜單資源6.在類視圖選項卡中,右擊對話框程序節(jié)點,然后選擇Add Windows Message Handler命令,在彈出的對話框中選擇WM_RBUTTONUP事件,點擊Add Handler ,點擊確定:鼠標右鍵抬起觸發(fā)m_Menu.LoadMenu(IDR_MENU1);7.1在鼠標右鍵抬起事件處理函數(shù)中添加代碼7.2程序CMenu *pMenu = m_Menu.GetSubMenu(0);CRect rect;ClientToScreen(&point);rect.top = point.x;rect.left = point.y;pMenu-Track

7、PopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_VERTICAL,rect.top,rect.left,this,&rect);8.1給彈出菜單中添加文件增加單擊事件8.2程序MessageBox(成功);五、創(chuàng)建圖標菜單1.創(chuàng)建基于對話框的應用程序2.在工作區(qū)窗口選擇Recource View選項卡,右擊一個節(jié)點,彈出快捷菜單,點擊Insert命令3.在插入資源窗口,選擇菜單資源,插入并編輯4.新建一個類;打開類向導,創(chuàng)建類名為CMenuIcon,5.打開CMenuIcon類的頭文件,為該類添加一個基類Cmenu6.1在CMenuIcon頭文件中定義一個

8、數(shù)據(jù)結構,用來保存菜單信息6.2程序struct CMenuItemCStringm_ItemText;intm_IconIndex;intm_ItemID;7.1在CMenuIcon的頭文件中聲明成員變量7.2程序CMenuItem m_ItemLists50; intm_Index; intm_IconIndex; CImageListm_ImageList;8.1在CMenuIcon類的構造函數(shù)中初始化圖像列表8.2程序m_Index=0;m_IconIndex=0;m_ImageList.Create(16,16,ILC_COLOR24|ILC_MASK,0,0);m_ImageLis

9、t.Add(AfxGetApp()-LoadIcon(IDI_ICON1);m_ImageList.Add(AfxGetApp()-LoadIcon(IDI_ICON2);m_ImageList.Add(AfxGetApp()-LoadIcon(IDI_ICON3);m_ImageList.Add(AfxGetApp()-LoadIcon(IDI_ICON4);m_ImageList.Add(AfxGetApp()-LoadIcon(IDI_ICON5);m_ImageList.Add(AfxGetApp()-LoadIcon(IDI_ICON6);9.1在CMenuIcon類中添加Attat

10、chMenu方法9.2AttatchMenu方法中添加程序9.3程序LoadMenu(m_uID);return TRUE;10.1在CMenuIcon類中添加MenuItem方法,并添加程序10.2BOOL CMenuIcon:MenuItem(CMenu *pMenu)if(pMenu!=NULL)int m_Count=pMenu-GetMenuItemCount();for(int i=0;iGetMenuString(i,m_ItemListsm_Index.m_ItemText,MF_BYPOSITION);int m_itemID=pMenu-GetMenuItemID(i);m

11、_ItemListsm_Index.m_ItemID=m_itemID;if(m_itemID0)m_ItemListsm_Index.m_IconIndex=m_IconIndex;m_IconIndex+=1;pMenu-ModifyMenu(i,MF_OWNERDRAW|MF_BYPOSITION|MF_STRING,m_ItemListsm_Index.m_ItemID,(LPSTR)&(m_ItemListsm_Index);m_Index+=1;CMenu *m_SubMenu=pMenu-GetSubMenu(i);if(m_SubMenu)MenuItem(m_SubMenu)

12、; return TRUE;11.1重載CMenuIcon類中MeasureItem虛擬方法,計算菜單項的大小11.2程序1. 在類上方右擊,選擇新建成員函數(shù),并創(chuàng)建void CMenuIcon:MeasureItem(LPMEASUREITEMSTRUCT IpStruct)if(IpStruct-CtlType=ODT_MENU)IpStruct-itemHeight=ITEMHEIGHT;IpStruct-itemWidth=ITEMWIDTH;CMenuItem* m_item;m_item=(CMenuItem*)IpStruct-itemData;IpStruct-itemWidt

13、h=(CMenuItem*)IpStruct-itemData)-m_ItemText.GetLength()*10;if(m_item-m_ItemID=0)IpStruct-itemHeight=2;12.1在CMenuIcon類中添加DrawItemText成員函數(shù),繪制菜單項文本12.2程序void CMenuIcon:DrawItemText(CDC *pDC, LPSTR Str, CRect Rect)pDC-DrawText(Str,Rect,DT_CENTER|DT_VCENTER|DT_SINGLELINE);13.1在CMenuIcon類中添加DrawItemIcon成員

14、函數(shù),繪制菜單項圖標13.2程序void CMenuIcon:DrawItemIcon(CDC *pDC, CRect Rect, int Icon)m_ImageList.Draw(pDC,Icon,CPoint(Rect.left+2,Rect.top+4),ILD_TRANSPARENT);14.1在CMenuIcon類中添加DrawSeparater成員函數(shù),繪制分隔條14.2程序void CMenuIcon:DrawSeparater(CDC *pDC, CRect Rect)pDC-Draw3dRect(Rect,RGB(255,0,255),RGB(255,0,255);15.1

15、在CMenuIcon類中添加DrawTopMenu成員函數(shù),繪制頂層菜單15.2程序void CMenuIcon:DrawTopMenu(CDC *pDC, CRect Rect, BOOL Selected)if(Selected)pDC-Rectangle(&Rect);Rect.DeflateRect(1,1);pDC-FillSolidRect(Rect,RGB(192,170,220);elsepDC-FillSolidRect(&Rect,RGB(192,192,192);16.1在CMenuIcon類中添加DrawComMenu成員函數(shù),繪制普通菜單項16.2程序void CMe

16、nuIcon:DrawComMenu(CDC *pDC, CRect Rect, BOOL Selected)if(Selected)pDC-Rectangle(&Rect);Rect.DeflateRect(1,1);pDC-FillSolidRect(Rect,RGB(255,0,0);elsepDC-FillSolidRect(&Rect,RGB(255,255,255);17.1重載CMenuIcon類中DrawItem虛擬方法,根據(jù)菜單項的不同狀態(tài)繪制菜單項17.2程序void CMenuIcon:DrawItem(LPDRAWITEMSTRUCT IpStruct)if(IpStr

17、uct-CtlType=ODT_MENU)if(IpStruct-itemData=NULL)return;unsigned int m_state=IpStruct-itemState;CDC* pDC=CDC:FromHandle(IpStruct-hDC);CString str = (CMenuItem*)(IpStruct-itemData)-m_ItemText;LPSTR m_str = str.GetBuffer(str.GetLength();int m_itemID=(CMenuItem*)(IpStruct-itemData)-m_ItemID;int m_itemico

18、n=(CMenuItem*)(IpStruct-itemData)-m_IconIndex;CRect m_rect=IpStruct-rcItem;pDC-SetBkMode(TRANSPARENT);switch(m_itemID)case -1:DrawTopMenu(pDC,m_rect,(m_state&ODS_SELECTED)|(m_state&0x0040);DrawItemText(pDC,m_str,m_rect);break;case 0:DrawSeparater(pDC,m_rect);break;default:DrawComMenu(pDC,m_rect,m_state&ODS_SELECTED);DrawItemText(pDC,m_str,m_rect);DrawItemIcon(pDC,m_rect,m_itemicon);

溫馨提示

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

評論

0/150

提交評論