2013-06-07 8 views
0

작업 표시 줄 위에 트레이 메뉴를 표시하는 데 문제가 있습니다. 내가 y- 위치로 지정하는 것은 중요하지 않으며, 작업 표시 줄에 대해서만 최선을 다합니다. 용지함 메뉴는 자원입니다. 작업 표시 줄 위에 트레이 메뉴를 배치하십시오.

내가 systrayicon에 오른쪽 클릭하면 위해 사용하고 코드입니다 :.

// The message loop 
case WM_RBUTTONUP: 
{ 
    CPoint point; 
    ::GetCursorPos(&point); 

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

    CMFCPopupMenu* pMenu = theApp.GetContextMenuManager()->ShowPopupMenu(hMenu, point.x-5, point.y, this, TRUE); 
    pMenu->SetForegroundWindow(); 
    break; 
} 
+0

문제의 스크린 샷을 게시 할 수 있습니까? 나는. 메뉴가 팝업 될 때 어떻게 보이는지, 그리고 어떻게 보이게 될지 예상 할 수 있습니까? – sashoalm

+0

안녕하세요. 당신의 응답을 주셔서 감사합니다. 여기에 예제가 있습니다 : http://i.imgur.com/wYmM3yw.png - 빨간색 사각형은 (작업 표시 줄에 대해) 어떻게 나타나는지, 파란색은 내가 어떻게 나타나길 원하는지입니다. y를 point.y보다 작게 설정하면 작업 표시 줄에서 멀리 이동합니다. 그러나 나는 그 위에 놓을 수는 없다. –

+0

CMFCPopupMenu 대신 CMenu를 사용해보십시오. CMenu를 사용하면 소프트웨어에 문제가 없습니다 (CMFCPopupMenu를 확인하지는 않지만). –

답변

0

가 실제로 RecalcLayout는 팝업이 모니터의 작업 영역에 표시되어 있는지 확인합니다 ( 작업 표시 줄을 왜곡하지만 아무것도에 존재하지 Windows의 메뉴와 CMFCPopupMenu의 차이는 메뉴가 OS에 의해 만들어진 창이고 CMFCPopupMenu가 메뉴의 동작을 모방 한 프레임 창이라는 점입니다. 거의 다 있었지만 당신은 SetForegroundWindow가 윈도우를 움직이지 않는다는 사실을 놓쳤다. 단지 Z- 순서를 바꾼다. 저는 개인적으로 그렇게하지 못합니다. 그러나, 내가 말했듯이 아무것도 불가능합니다. 당신이 정말로 충고를 수행하려는 경우 다음을 수행하십시오

CMFCPopupMenu* pMFCMenu = pCntxtMgr->ShowPopupMenu(hMenu, ptClick.x, ptClick.y, AfxGetMainWnd()); 
    CRect rectMenu; 
    pMFCMenu->GetWindowRect(rectMenu); 

    pMFCMenu->SetWindowPos(&CWnd::wndTopMost, rectMenu.left, rectMenu.top + 25, 0, 0, SWP_NOSIZE | SWP_NOACTIVATE); 

25

내가 데모 목적을 위해 사용 단지 임의의 번호입니다. 화면 하단에 메뉴 하단이 나타나지 않도록 계산해야합니다.