OnContextMenu () не работает в классе представления - PullRequest
0 голосов
/ 02 апреля 2010

У меня есть всплывающее меню для contextmenu. И я написал функцию для каждого меню в CMainframe. У меня OnContextMenu () в каждом классе представления и в одном классе диалога. Он отлично работает в классе диалога. Но не в классе просмотра. Кодировки приведены ниже: Функция CMainframe:

void CMainFrame::OnUpdateFptrend(CCmdUI* pCmdUI) 
{   
((CMainFrame *)AfxGetMainWnd())->SendMessage(WM_COMMAND,ID_TRENDVIEW,NULL); 
}

void CMainFrame::OnUpdateFptuning(CCmdUI* pCmdUI) 
{       
((CMainFrame *)AfxGetMainWnd())->SendMessageWM_COMMAND,ID_TUNINGVIEW,NULL); 
}

Класс диалога Contextmenu:

void CFacePlate::OnContextMenu(CWnd* pWnd, CPoint point) 
{   
    CMenu mnuPopup;
    mnuPopup.LoadMenu(IDR_FPMENU);
    CRect rBarRect;
        rBarRect.left = rBarRect.top = 0;
        rBarRect.right = 1000;rBarRect.bottom = 300;    
    CMenu *mnuPopupMenu = mnuPopup.GetSubMenu(0);
    ASSERT(mnuPopupMenu);   
    if( rBarRect.PtInRect(point) ) 
        mnuPopupMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);  
}

Посмотреть класс:

void CGroupView::OnContextMenu(CWnd* pWnd, CPoint point) 
{
    CMenu mnuPopup;
    mnuPopup.LoadMenu(IDR_FPMENU);

    CRect rBarRect;
        rBarRect.left = rBarRect.top = 0;
        rBarRect.right = 1150;rBarRect.bottom = 390;

    CMenu *mnuPopupMenu = mnuPopup.GetSubMenu(0);
    ASSERT(mnuPopupMenu);   

    if( rBarRect.PtInRect(point) )
        mnuPopupMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);      
}

Когда я нажимаю всплывающее меню на лицевой панели (Dialogclass), оно переходит к функции мейнфрейма. В то же время, когда я нажимаю меню из любого класса представления, оно не переходит к функции мэйнфрейма.

1 Ответ

1 голос
/ 02 апреля 2010

Я не уверен, почему он работает с вашим классом диалога, но я думаю, что причина, по которой он не работает с вашим классом представления, заключается в том, что последний параметр для TracPopupMenu должен быть AfxGetMainWnd() вместо this.

...