Skip to content

WindowsApi:BringWindowToTop

BringWindowToTop 함수는 지정된 된 창을 Z 순서의 맨에 가져온다. 창이 최상위 창 경우 활성화 됩니다. 자식 창의와 관련 된 최상위 부모 창이 활성화 창이 자식 창의 경우.

Warning

부분적으로 또는 완전히 가려집니다 창이 밝히기 위해 BringWindowToTop 함수를 사용 하 여 다른 창에 의해. 이 함수를 호출 합니다. Z 순서에서 창의 위치를 변경 하려면 SetWindowPos 함수를 호출 하는 것과 비슷합니다. BringWindowToTop 확인 하지 않습니다 창이 최상위 창. 응용 프로그램이 포그라운드에 있지 포그라운드에 있을 싶은 경우 SetForegroundWindow 함수 호출 해야.

Window TopMost

윈도우를 최상위로 가져오는 코드를 만들 경우 SetWindowPos() 함수를 사용하시는 것보다 BringWindowToTop 함수를 사용하는것이 좋다. 하지만 단순히 BringWindowToTop 함수를 호출하는것만으로는 윈도우가 앞으로 나오지 않는다. BringWindowToTop 함수를 사용하시기 위해서는 현재 활성화된 윈도우의 스레드에 현재 스레드를 Attach 시켜놓고 사용해야 한다. 따라서 정상적으로 BringWindowToTop 함수를 호출하려면 아래와 같이 코드를 구성해야 한다.

if(::GetForegroundWindow() != this->m_hWnd){ 
    HWND h_active_wnd = ::GetForegroundWindow(); 
    if(h_active_wnd != NULL){ 
        DWORD thread_id = GetWindowThreadProcessId(h_active_wnd, NULL); 
        DWORD current_thread_id = GetCurrentThreadId(); 
        if(current_thread_id != thread_id){ 
            if(AttachThreadInput(current_thread_id, thread_id, TRUE)){ 
                BringWindowToTop(); 
                AttachThreadInput(current_thread_id, thread_id, FALSE); 
            } 
        } 
    } 
} 

SetWindowPos()를 사용하는 방법은 이 곳을 참조.

SetWindowPos()를 사용하는 방법은 윈도우는 앞에 있어도 해당 윈도우가 활성화되지 않은 상태로 존재하게 된다. 결론적으로 BringWindowToTop 함수는 윈도우를 앞으로 가져오면서 활성화를 시킬때 사용하고 SetWindowPos()함수를 이용하는 방법은 윈도우는 앞으로 가져오지만 활성화는 시키지 않을때 사용하면 된다.

강제로 윈도우의 포커스를 설정하는 방법

void SetForegroundWindowForce(HWND hWnd)
{
   HWND hWndForeground = ::GetForegroundWindow();
   if(hWndForeground == hWnd) return;

   DWORD Strange = ::GetWindowThreadProcessId(hWndForeground, NULL);
   DWORD My = ::GetWindowThreadProcessId(hWnd, NULL);
   if( !::AttachThreadInput(Strange, My, TRUE) )
   {
      ASSERT(0);
   }
   ::SetForegroundWindow(hWnd);
   ::BringWindowToTop(hWnd);
   if( !::AttachThreadInput(Strange, My, FALSE) )
   {
      ASSERT(0);
   }
}

See also

Favorite site