¡¡

Ïà¹Ø·ÖÀà 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 m_MenuList;
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ÈëÃű¦µä
ÏÂһƪ:¶þ ¿Ø¼þ

¡¡

ƒ