2010-04-02 4 views
0

에서 작동하지 않는 내가있는 CMainFrame에서 각 메뉴의 기능을 썼다 contextmenu.And 수있는 팝업 메뉴가 있습니다. 나는 각 뷰 클래스에서 하나의 대화 class.Its에 onContextMenu 부분을()가 아닌보기 class.Codings에 대화 class.But에서 잘 작동은 다음과 같습니다 : 를 CMainFrame의 funciton :는 onContextMenu() 뷰 클래스

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); 
} 

보기 클래스 : 내가 페이스 플레이트 (Dialogclass)에서 팝업 메뉴를 누르면

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);  
} 

, 그것은 function.At 메인 프레임에 간다 같은 시간에 어떤 뷰 클래스에서나 메뉴를 누르면 메인 프레임 함수로 이동하지 않습니다. 왜 그런 식입니까?

답변

1

내가 대화 상자 클래스와 함께 작동하는지 잘 모르겠지만 TracPopupMenu의 마지막 매개 변수가 대신 AfxGetMainWnd()이어야하기 때문에보기 클래스에서 작동하지 않는 이유가 있다고 생각합니다.