2012-11-27 2 views
0

내 애플리케이션이 포커스를 다른 창으로 변경하려고 할 때 마우스 오버가 발생합니다. 일부 끌어서 놓기 기능을 구현하려고하는데 마우스가 내 응용 프로그램을 다른 응용 프로그램으로 옮길 때 초점이 바뀐 것 같습니다.다른 프로그램으로 포커스 변경 Windows API

가 여기에 내가 AllowSetForegroundWindow를 사용하여 시도

case WM_MOUSEMOVE: 
{ 
    POINT pt; 
    GetCursorPos(&pt); 
    HWND newHwnd = WindowFromPoint(pt); 

    if (newHwnd != g_hSelectedWindow) 
    { 
     cout << "changing windows" << endl; 
     cout << SetWindowPos(newHwnd, HWND_TOP, 0,0,0,0, SWP_NOMOVE|SWP_NOSIZE) << endl; 
     g_hSelectedWindow = newHwnd; 
    } 

    CallWindowProc(listproc, hwnd,message,wParam,lParam); 
    break; 
} 

(나는 웃음을 위해 현재 주요 콜백 prcedure에 WM_MOUSEMOVE에 그것을 할) 내 현재 테스트 기능입니다하지만 그것은 주어진 범위에서 그것을 찾을 수 없습니다 도움이, 그러나 나는 포함했다.

도움이나 의견을 보내 주시면 감사하겠습니다.

답변

1

AllowSetForegroundWindow다른 창이 SetForegroundWindow을 호출하여 전경 창이 될 때까지는 도움이되지 않습니다.

다른 윈도우를 포 그라운드로 가져와야하는 경우 궁금한 점이 있으시면 SetForegroundWindow을 직접 호출하지 않으시겠습니까?

업데이트 : 그래서 이것은 당신이 얻을하는 데 필요한 코드는이 작업을 잘 :

HWND ResolveWindow(HWND hWnd) 
{ /* Given a particular HWND, if it's a child, return the parent. Otherwise, if 
    * the window has an owner, return the owner. Otherwise, just return the window 
    */ 
    HWND hWndRet = NULL; 

    if(::GetWindowLong(hWnd, GWL_STYLE) & WS_CHILD) 
     hWndRet = ::GetParent(hWnd); 

    if(hWndRet == NULL) 
     hWndRet = ::GetWindow(hWnd, GW_OWNER); 

    if(hWndRet != NULL) 
     return ResolveWindow(hWndRet); 

    return hWnd;  
} 

HWND GetTopLevelWindowFromPoint(POINT ptPoint) 
{ /* Return the top-level window associated with the window under the mouse 
    * pointer (or NULL) 
    */ 
    HWND hWnd = WindowFromPoint(ptPoint); 

    if(hWnd == NULL) 
     return hWnd;  

    return ResolveWindow(hWnd); 
} 

는 단순히 WM_MOUSEMOVE 핸들러에서 GetTopLevelWindowFromPoint(pt)를 호출하고 다시 유효한 HWND를 얻을 경우, 다음이 될 것입니다 SetForegroundWindow를 사용하여 포 그라운드로 가져올 수있는 최상위 창입니다.

이 정보가 도움이되기를 바랍니다.

+0

나는 또한 그것을 시도했다. 작동하지 않았다 : ( – user1853098

+0

당신이 직면하고있는 문제는 전경 (예 : 최상위 윈도우의 하위 창)이 될 수없는 창을 WindowFromPoint가 반환 할 수 있다는 것입니다. 사용자가 할 수있는 한 쌍의 기능으로 내 게시물을 업데이트했습니다. –

+0

감사합니다, 닉! 오늘 시도해 보겠습니다. D – user1853098

관련 문제