프로그래밍
👨💻 [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("이 창은 현재 포커스를 가지고 있지 않습니다."));
}
}
}
설명
- ::GetForegroundWindow
- 현재 포커스를 가지고 있는 최상위 창의 HWND를 반환합니다.
- GetSafeHwnd
- CWnd 객체로부터 안전하게 HWND를 가져옵니다. 만약 CWnd가 유효하지 않으면 NULL을 반환합니다.
- 비교
- 현재 포커스를 가진 윈도우 핸들과 확인하려는 윈도우 핸들을 비교합니다.
추가 참고
- 만약 포커스를 받은 하위 컨트롤 창(에디트 박스, 버튼 등)을 확인하려면 ::GetFocus를 사용할 수 있습니다. 예:
HWND hFocusedWnd = ::GetFocus();
이 핸들은 현재 포커스를 가진 하위 컨트롤의 HWND를 반환합니다.
GetFocus는 활성 창의 하위 창(예: 에디트 박스) 핸들을 반환하고, GetForegroundWindow는 최상위 창 핸들을 반환하므로, 필요한 상황에 따라 적절한 함수를 선택하세요.
🎬 유튜브 채널 🎬
위로그@WiLog
📢 안녕하세요, 위로그@WiLog 시청자 여러분, 저는 윌리 입니다. 📢 위로그@WiLog 는 자기계발을 목적으로 하는 채널 입니다. 📢 오늘도 즐겁게~ 자신을 위한 계발을 함께 해보아요~ d^_^b 📌 1인 게
www.youtube.com
🎬 치지직 채널 🎬
위로그 채널 - CHZZK
지금, 스트리밍이 시작됩니다. 치지직-
chzzk.naver.com
반응형