프로그래밍

👨‍💻 [MFC] MFC에서 윈도우 창이 포커스를 가지고 있는지 확인하려면 어떻게 해야 하나요?

밝음의기둥 2024. 12. 20. 23:41
반응형

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."


👨‍💻 안녕하세요, 윌리 프로젝트의 윌리 입니다.

MFC에서 윈도우 창이 포커스를 가지고 있는지 확인하려면 어떻게 해야 하는지 간략히 알아보았습니다.


질문 >

MFC에서 윈도우 창이 포커스를 가지고 있는지 확인하려면 어떻게 해야 하나요?

답변 >

MFC에서 특정 윈도우 창이 포커스를 가지고 있는지 확인하려면 CWnd 클래스의 GetSafeHwnd를 사용해 HWND를 가져오고, WinAPI 함수 ::GetForegroundWindow와 비교하면 됩니다.

코드 예제

#include <afxwin.h>bool IsWindowFocused(CWnd* pWnd)
{
    if (pWnd == nullptr || !::IsWindow(pWnd->GetSafeHwnd()))
        return false;

    // 현재 포커스를 가진 윈도우 핸들 가져오기
    HWND hForegroundWnd = ::GetForegroundWindow();

    // 특정 윈도우와 현재 포커스된 윈도우를 비교
    return (hForegroundWnd == pWnd->GetSafeHwnd());
}

// 사용 예
void CheckIfWindowHasFocus()
{
    CWnd* pMyWindow = AfxGetMainWnd(); // 메인 창 핸들 가져오기
    if (pMyWindow != nullptr)
    {
        if (IsWindowFocused(pMyWindow))
        {
            AfxMessageBox(_T("이 창은 현재 포커스를 가지고 있습니다."));
        }
        else
        {
            AfxMessageBox(_T("이 창은 현재 포커스를 가지고 있지 않습니다."));
        }
    }
}

설명

  1. ::GetForegroundWindow
    • 현재 포커스를 가지고 있는 최상위 창의 HWND를 반환합니다.
  2. GetSafeHwnd
    • CWnd 객체로부터 안전하게 HWND를 가져옵니다. 만약 CWnd가 유효하지 않으면 NULL을 반환합니다.
  3. 비교
    • 현재 포커스를 가진 윈도우 핸들과 확인하려는 윈도우 핸들을 비교합니다.

추가 참고

  • 만약 포커스를 받은 하위 컨트롤 창(에디트 박스, 버튼 등)을 확인하려면 ::GetFocus를 사용할 수 있습니다. 예:
HWND hFocusedWnd = ::GetFocus();

이 핸들은 현재 포커스를 가진 하위 컨트롤의 HWND를 반환합니다.

GetFocus는 활성 창의 하위 창(예: 에디트 박스) 핸들을 반환하고, GetForegroundWindow는 최상위 창 핸들을 반환하므로, 필요한 상황에 따라 적절한 함수를 선택하세요.



🎬 유튜브 채널 🎬

 

위로그@WiLog

📢 안녕하세요, 위로그@WiLog 시청자 여러분, 저는 윌리 입니다. 📢 위로그@WiLog 는 자기계발을 목적으로 하는 채널 입니다. 📢 오늘도 즐겁게~ 자신을 위한 계발을 함께 해보아요~ d^_^b 📌 1인 게

www.youtube.com

🎬 치지직 채널 🎬

 

위로그 채널 - CHZZK

지금, 스트리밍이 시작됩니다. 치지직-

chzzk.naver.com


반응형