WM_ACTIVATE
메시지를 사용할 수 있습니다. 창을 활성화하거나 비활성화하면 Windows에서이 메시지를 보냅니다. 사용자가 다른 응용 프로그램으로 전환하면 응용 프로그램의 현재 창에 WM_ACTIVATE
메시지가 수신되어 비활성화 중임을 알립니다.
LRESULT __stdcall YourWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
/* ... */
case WM_ACTIVATE:
DWORD pid = 0;
GetWindowThreadProcessId((HWND)lParam, &pid);
if (pid != GetCurrentProcessId()) /* switch to another task? */
{
if ((wParam == WA_ACTIVE) || (wParam == WA_CLICKACTIVE))
{
if (SetWindowPos(hFloatingWindow, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE) == FALSE)
{
/* handle error */
}
}
else
{
if (SetWindowPos(hFloatingWindow, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE) == FALSE)
{
/* handle error */
}
}
}
return (0); /* message processed */
/* ... */
}
참고 추가해야합니다 : 여기
다른 응용 프로그램에 대한 사용자 전환합니다 (
hFloatingWindow
을 고려하여 부동 창에 창 핸들입니다) 때 맨 위 플래그를 제거/설정하는 작은 예입니다 응용 프로그램의 모든 창 프로 시저에
WM_ACTIVATE
코드 이것은 사용자가 활성화되어있는 창에서 다른 작업으로 전환 할 수 있기 때문에 필연적입니다. 그리고 위의 그림과 같이 현재 활성 창에서
WM_ACTIVATE
메시지를 처리하지 않으면 최상위 플래그가 제거되지 않습니다.
질문 제목을 "현재 프로그램이 모호하고"모든 프로그램에 "있는 경우에만"내 프로그램의 창에만 적용하고 다른 프로그램에는 적용하지 않으려면 어떻게해야합니까? "와 같은 질문 제목을 변경하는 것이 좋습니다. 훨씬 더 일반적인 것 같다 ... – andlabs