MFC2014. 1. 8. 09:25

최소화 버튼을 누르거나 다른 창을 열어서 다이얼로그가 닫힌(비활성화) 경우,

비활성화 상태에서 Alt+Tab이나 작업 표시줄 클릭으로 다이얼로그가 다시 열린 경우,
아니면 다른 창에 반쯤 가려져 있는 상태에서 마우스로 클릭하여 활성화 시킨 경우 등등....

다이얼로그의 포커스 변화를 감지해야 할 경우 아래와 같이 해 보세요.



1. WM_ACTIVATE 메시지 처리기 추가

2. Parameter로 넘어오는 nState 값을 확인
void CMyDlg::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)

{

switch(nState)

{

   case WA_INACTIVE         : //(0) 포커스를 잃었을 때
   case WA_ACTIVE            : //(1) 포커스를 얻었을 때 (마우스 클릭으로 포커스 얻은 경우 제외)
   case WA_CLICKACTIVE    : //(2) 마우스 클릭으로 포커스를 얻을 때
}

}



API인 경우에는 wParam 값으로 상태를 알 수 있습니다.
INT    active = LOWORD(wParam);
switch(active)
{
    case WA_INACTIVE:        break;
    case WA_ACTIVE:            break;
    case WA_CLICKACTIVE:    break;
}



Posted by 못생긴나무