2010-09-29 36 views
2

Je vais avoir le code suivant:appuyer sur la touche ALT dans CMainFrame

CMainFrame* pFrame = new CMainFrame; 
if (!pFrame) 
    return FALSE; 
m_pMainWnd = pFrame; 
// create and load the frame with its resources 
pFrame->LoadFrame(IDR_APP_MAINFRAME, 
    WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE, NULL, 
    NULL); 
// The one and only window has been initialized, so show and update it 
pFrame->ShowWindow(SW_SHOWMAXIMIZED); 

Le problème est, quand je presse <ALT>, le menu (IDR_APP_MAINFRAME) apparaîtra. Comment puis-je toujours cacher le menu et ne pas répondre aux pressions?

J'avais entendu cela est dû à un contrôle d'accélérateur dans MFC, mais je ne pouvais pas voir le contrôle de ma solution de projet qui utilise VS2008 ..

+0

MFC est eveil ... – wengseng

Répondre

0

Dans votre CMainFrame override PreCreateWindow et détruire le menu. Essayez quelque chose comme ceci:

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) 
{ 
     if(cs.hMenu!=NULL) 
     { 
       ::DestroyMenu(cs.hMenu); 
       cs.hMenu = NULL; 
     } 
     return CFrameWnd::PreCreateWindow(cs); 
} 
+0

J'ai essayé votre chemin, cependant, il se bloque quand il procède: vide CFrameWnd :: OnInitMenuPopup (CMenu * pMenu, UINT nIndex, BOOL bSysMenu) (hParentMenu = pParent-> GetMenu() -> GetSafeHmenu())! = NULL) // -> ici Y a-t-il un moyen d'initialiser le menu, mais ne le montre pas du tout? – wengseng

+0

@wengsenf: Pourquoi remplacez-vous 'CFrameWnd :: OnInitMenuPopu'? – mmonem

+0

Je n'ai pas dépassé. Il casse à la ligne dans le code construit mfc. – wengseng