2013-09-05 8 views
2

CMFCPopupMenu를 사용하여 마우스 오른쪽 버튼 팝업 메뉴를 만듭니다. 문제는 처음으로 메뉴가 표시 될 때 음영이있는 메뉴 프레임 만 표시되지만 내용은 흰색이라는 것입니다. 두 번째로 메뉴가 표시되면 아무런 문제가 없습니다. 코드는 다음과 같습니다.내용없이 CMFCPopupMenu 메뉴가 표시됩니다.

CPoint point; 
    ::GetCursorPos (&point); 

    CMFCPopupMenu* pop = new CMFCPopupMenu(); 

    pop->InsertItem(CMFCToolBarMenuButton(ID_COMMAND_1,NULL,-1,_T("Command 1"))); 
    pop->InsertItem(CMFCToolBarMenuButton(ID_COMMAND_2,NULL,-1,_T("Command 2"))); 
    pop->InsertItem(CMFCToolBarMenuButton(ID_COMMAND_3,NULL,-1,_T("Command 3"))); 
    pop->InsertItem(CMFCToolBarMenuButton(ID_COMMAND_4,NULL,-1,_T("Command 4"))); 

    pop->Create(this,point.x,point.y,NULL,0,true); 

상위 클래스는 CDialogEx를 기반으로합니다.

감사합니다.

+0

당신이이'()'전'InsertItem()'호출을 만들기 호출하려고 할 수 삽입 한 후 RecalcLayout()를 호출 할 필요하세요? –

+0

나는 그것을 조금 더 노력했다. 이제는 단 한 줄의 빈 메뉴입니다. –

+0

['InsertItem'] (http://msdn.microsoft.com/en-us/library/vstudio/bb982664.aspx)는'const CMFCToolBarMenuButton &'(즉 참조)을 취하므로 버튼을 유지하는 것이 문제가 될 수 있습니다 ? –

답변

0

내 접근이 작동하지 않는 이유를 이해하지 않습니다하지만 난 ressource의 메뉴를 정의하여 주위에 방법을 발견하고 다음과 같이 수행 작동 유일한 문제가 있다는 것입니다

CMenu menu; 
    menu.LoadMenu(IDR_SESSION_MENU); 
    HMENU hMenu = menu.GetSubMenu (0)->Detach(); 

    CMFCPopupMenu* pMenu = theApp.GetContextMenuManager()->ShowPopupMenu(hMenu, point.x, point.y, this, TRUE); 

상태 및 선택에 따라 동적 항목이 포함 된 메뉴를 갖는 것이 조금 더 복잡합니다.

+0

'menu.LoadMenu()'다음에'menu'를 조작 할 수 있어야하고'hMenu' 핸들을 얻기 전에 –

0
CMFCPopupMenu* pPopupMenu = new CMFCPopupMenu; 
if (pPopupMenu->Create(pWndOwner, point.x, point.y, NULL, FALSE, TRUE)) 
{ 
    pPopupMenu->InsertItem(CMFCToolBarMenuButton(57645, NULL, -1, _T("Command 1")), -1); 
    pPopupMenu->InsertItem(CMFCToolBarMenuButton(57646, NULL, -1, _T("Command 2")), -1); 
    pPopupMenu->RecalcLayout(); 
} 

관련 문제