| ¡¡
Ïà¹Ø·ÖÀà VCÈëÃÅ ->VC ->VCShare Ò» ²Ëµ¥¹Ø¼ü×Ö VC ²Ëµ¥²Ëµ¥ÏîÊôÐÔ˵Ã÷£ºID ±êʶ²Ëµ¥µÄΨһ³£Á¿¡£ Caption ²Ëµ¥Ïî±êÌ⣬¡°&" ºóÃæµÄ×Ö·ûΪ¿ì½Ý¼ü£¬Ôڲ˵¥ÏîºóµÄ×Ö·û½«¼ÓÏ»®Ïß¡£ Separator ˮƽÏߣ¬ÆäËüÊôÐÔÎÞЧ¡£ Pop_up ÓÐ×Ӳ˵¥ Grayed ÎÞЧ£¬±êÌâÒÔ»ÒÉ«ÏÔʾ Inactive ÎÞЧ£¬±êÌâÕý³£ÏÔʾ Checked ÔÚ±êÌâǰ¼ÓÒ»¸ö¶Ô¹³ break ΪNoneʱ£¬Ê¹ËüºÍËüµÄÐÖµÜÃÇÒ»ÐлòÒ»ÁÐÏÔʾ¡£ Help Ö»¶Ô×îÉϲã²Ëµ¥ÏîÓÐЧ£¬Ê¹Ëü¼°ºóÃæµÄ×îÉϲã²Ëµ¥ÒƵ½´°¿ÚµÄÓÒÉϽǡ£ Prompt µ±Êó±êÖ¸ÏòËüʱµÄÌáʾÐÅÏ¢ ¶àÎĵµÓ¦ÓóÌÐò³ýÁËÉú³ÉIDR_MAINFRAMEÍ⣬»¹Éú³É±êʶ·ûΪIDR_xxxxTYPE£¬ÆäÖÐxxxxΪӦÓóÌÐòÃû¡£ËüÃÇ·Ö±ð¶ÔÓ¦ÎÞÎĵµºÍÓÐÎĵµÊ±¡£ Ò»¸ö²Ëµ¥id¿ÉÒÔÔÚ¶à¸öÀàÓÐÏìÓ¦º¯Êý£¬µ«Ö»»áÓÐÒ»¸öÏìÓ¦¡£ ÎÒʵÑéµÃ³öµÄ½á¹û£¬CChildFrame,CCMenuApp,CCMenuDoc,CCMenuView,CMainFrame(ÎÒµÄÓ¦ÓóÌÐòÃûΪCMenu)µÄÏìӦ˳ÐòΪ£º ÔÚIDR_MAINFRAMEÖУ¬CMainFrame,CCMenuAppÆäËüÈý¸ö²»ÏìÓ¦. ÔÚIDR_XXXXTYPE ÖУ¬CCMenuView,CCMenuDoc,CChildFrame,CCMenuApp,CMainFrame. ctrl+w´ò¿ªClassWizard,Ñ¡ºÃ¹¤³Ì£¬Àࣨ×ѡµÄÊÇxxxView),ÔÚidÖÐÑ¡ÔñÎÒÃÇÒªÐ޸ĵIJ˵¥Ïî¡£ Ë«»÷COMMAND£¨»òUPDATE_COMMAND_UI£©µãÈ·¶¨¾Í¿ÉÒÔÁË¡£ÔÙÔÚ³ÉÔ±º¯ÊýÖÐË«»÷ÎÒÃǸոռӵĺ¯Êý£¬¾Í¿ÉÒԱ༺¯ÊýÁË¡£ µ±Óû§µ¥»÷²Ëµ¥Ê±£¬ÎÒÃǸոձ༵ĺ¯Êý»áÖ´ÐС£ Èç¹ûÎÒÃÇË«»÷µÄÊÇUPDATA_COMMAND_UI,ÔòÏìÓ¦ÐÎʽÀàËÆÈçÏ£º void ... OnUpdate...(CCmdUI * pCmdUI) { pCmdUI->SetCheck(true);//Ôڲ˵¥Ïîǰ¼ÓÒ»¸ö¶Ô¹³ pCmdUI->Enable(true);// ʹ²Ëµ¥ÏîÄܹ»Ê¹Óà } ÒòΪ´Ëº¯ÊýÍùÍùÓ°Ïìµ½ËüµÄÍâÐΣ¬¹ÊÔÚËüµÄ¡°¸¸Çס±»ò¡°×游¡±±»Ñ¡ÖÐʱ¾Í»áÖ´ÐС£ CWndÀàÖÐÓë²Ëµ¥Óйصöº¯Êý¡£ SetMeun(CMenu *pMenu); Ð޸Ĵ°¿ÚµÄ²Ëµ¥£¬ÎªNULL,Ôò±íʾɾ³ý¡£ ³£ÓõϹÓÐ GetMenu(); GetSystemMenu(); CMenuµÄһЩº¯Êý¡£ AppendMenu()º¯ÊýÖ¸¶¨µÄ²Ëµ¥×îºó¸½¼ÓÒ»¸öв˵¥Ïͬʱ¿ÉÒÔÖ¸¶¨²Ëµ¥ÏîµÄÏà¹ØÇé¿ö,ËüÓÐÁ½¸öÓï·¨¡£ nFlagÖ¸¶¨×´Ì¬£¬¿ÉÒÔÊÇÒÔÏÂËÄ×éÖ®Ò»»òÏà×éºÏ¶ø³É£¬»¹¿ÉÒÔÓëMF_POPUP×éºÏ±íʾÌí¼ÓµÄÊǵ¯³öʽ²Ëµ¥¡£ MF_CHECKED,MF_CHECKED MF_DISABLED,MF_ENABLED,MF_GRAYED MF_STRING,MF_OWNERDRAW,MF_SEPARATOR,MF_BITMAP²Ëµ¥ÏîÊÇ×Ö·û´®£¬×Ô»ÐÍ£¬·Ö¸ôÏߣ¬Î»Í¼¡£ MF_MENUBARBREAK,MF_MENUBREAK nIDNewItem Ö¸¶¨²Ëµ¥ÏîµÄid. lpszNewItemÖ¸¶¨²Ëµ¥ÏîµÄÄÚÈÝ£¬ÓënFlagÓйء£ÎªMF_OWNERDRAWʱ£¬¸Ã²ÎÊýΪÊý¾ÝÖ¸Õ룬ÓÃÀ´´«ËÍÊý¾Ý£¬ÏµÍ³ÔÚ·¢ËÍÏûÏ¢WM_MEASUREITEMºÍWM_DRAWITEMʱ½«¸ÃÊý¾Ý´æÈë²ÎÊý µÄ£¨DRAWITEMSTRUCT½á¹¹£©itemDataÓò£»nFlagΪMF_STRINGʱ¸Ã²ÎÊýΪ²Ëµ¥±êÌâ¡£ InsertMenu nFlagsÖ¸¶¨²Ëµ¥ÏîλÖúÍ״̬£¬×´Ì¬Ñ¡Ïî²Î¼ûAppendMenu()º¯Êý£¬Î»ÖÃÑ¡ÏîΪMF_BYCOMMAND,MF_BYPOSITION. nPositinÈôΪMF_BYCOMMAND,в˵¥Ïî²åÔÚÖ¸¶¨²Ëµ¥Ïî֮ǰ£»»òΪMF_BYPOSITION,¸Ã²ÎÊýÖ¸¶¨Ð²˵¥ÏîµÄλÖã¬Îª-1²åµ½×îºó¡£ ModifyMenu()²ÎÊýÓëInsertMenuÀàËÆ¡£ DeleteMenuɾ³ý²Ëµ¥Ïî RemoveMenuÒÆÈ¥²Ëµ¥Ïî ÉèÖúÍÏÔʾ¸¡¶¯²Ëµ¥ BOOL TrackPopupMenu(UINT nFlags,int x,int y, CWnd *pWnd,LPCRECT = NULL); nFlag¸¡¶¯Ê½²Ëµ¥×ø±êÉ趨·½Ê½¼°Êó±ê²Ù×÷·½Ê½£¬ÓÐЧֵÈçÏ£º TPM_CENTERALIGN TPM_LEFTALIGN TPM_RIGHTALIGN TPM_LEFTBUTTON TPM_RIGHTBUTTON x,y¸¡¶¯Ê½²Ëµ¥×ø±ê pWndÖ¸¶¨²Ù×÷²Ëµ¥µÄ´°¿Ú lpRectÖ¸¶¨Êó±ê²Ù×÷·¶Î§ ÔÚ¿Í»§Çøµ¥»÷×ó¼ü¾Í»áµ¯³ö¿ì½Ý²Ëµ¥£¬·½·¨¶þÐèÒªÔÚ×ÊÔ´±à¼Æ÷Öбà¼Ò»¸öв˵¥£¬·½·¨Èý±ØÐëÓÐÖ÷²Ëµ¥¡£ ·½·¨Ò»£º void CHeView::OnLButtonDown(UINT nFlags, CPoint point) { CMenu PopupMenu; PopupMenu.CreatePopupMenu(); PopupMenu.AppendMenu(MF_STRING,ID_FILE_NEW,"NEW.."); //... ClientToScreen(&point); PopupMenu.TrackPopupMenu(TPM_CENTERALIGN|TPM_RIGHTBUTTON,point.x,point.y,this); CView::OnLButtonDown(nFlags, point); } ·½·¨¶þ£º void CHeView::OnLButtonDown(UINT nFlags, CPoint point) { CMenu menu; menu.LoadMenu(IDR_DUMMY); CMenu *pMenu=menu.GetSubMenu(0); ASSERT(pMenu!=NULL); ClientToScreen(&point); pMenu->TrackPopupMenu(TPM_CENTERALIGN|TPM_RIGHTBUTTON,point.x,point.y,this); CView::OnLButtonDown(nFlags, point); } ·½·¨Èý£º void CHeView::OnLButtonDown(UINT nFlags, CPoint point) { CWnd *pWnd=AfxGetApp()->GetMainWnd(); CMenu * pMenu=pWnd->GetMenu(); pMenu=pMenu->GetSubMenu(0); ASSERT(pMenu!=NULL); ClientToScreen(&point); pMenu->TrackPopupMenu(TPM_CENTERALIGN|TPM_RIGHTBUTTON,point.x,point.y,this); } ϰÌ⣺ ¶¯Ì¬²Ëµ¥£¬Óû§µã»÷¡°¸ü¶à²Ëµ¥¡±£¬Ôö¼ÓһЩ²Ëµ¥Ïî¡£ Æäʵ,×Ô»²Ëµ¥ÔÀí²»ÄÑÀí½â.AppendMenuµÄ·ç¸ñÑ¡×Ô»,½«×Ô»ÓõÄÐÅÏ¢(Ö¸Õë)Ç¿ÖÆ×ª»¯³ÉLPCTSTR,ÔÙÖØ ÔØDrawItem¾ÍÐÐÁË,×¢Òâ×Ô»ÓõÄÐÅÏ¢²»ÒªÌáǰdeleteÁË. ʾÀýÈçÏÂ: COwnerMenu.hÖÐ class CMenuItem { public: CString m_szText; COLORREF m_color; CMenuItem(CString szText,COLORREF color) { m_szText = szText; m_color = color; } }; #include class COwnerMenu : public CMenu { public: void DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct ); bool AppendMenu(UINT nIDNewItem,CString caption,COLORREF color); COwnerMenu(); CTypedPtrList virtual ~COwnerMenu(); }; COwnerMenu.cppÖÐ COwnerMenu::~COwnerMenu() { while(m_MenuList.GetCount()) { CMenuItem *pMenuItem = m_MenuList.GetHead(); delete pMenuItem; m_MenuList.RemoveHead(); } } bool COwnerMenu::AppendMenu(UINT nIDNewItem, CString caption, COLORREF color) { CMenuItem * pMenuItem = new CMenuItem(caption,color); m_MenuList.AddTail(pMenuItem); return CMenu::AppendMenu(MF_OWNERDRAW,nIDNewItem,(LPCTSTR)pMenuItem); } void COwnerMenu::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) { CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC); pDC->SetTextColor(((CMenuItem*)lpDrawItemStruct->itemData)->m_color); pDC->TextOut(0,0,((CMenuItem*)lpDrawItemStruct->itemData)->m_szText); } ÔÚʹÓò˵¥µÄµØ·½(²»ÒªÍü¼ÇÁ˼ÓÍ·Îļþ): void COwnerMenuView::OnRButtonDown(UINT nFlags, CPoint point) { COwnerMenu menu; menu.CreatePopupMenu(); menu.AppendMenu(ID_1,"1",RGB(0,0,128)); ClientToScreen(&point); menu.TrackPopupMenu(TPM_LEFTBUTTON|TPM_LEFTALIGN,point.x,point.y,this); CView::OnRButtonDown(nFlags, point); } ÉÏһƪ:VCÈëÃű¦µä ÏÂһƪ:¶þ ¿Ø¼þ ¡¡ |
|