[MFC] 대화상자 숨기기, OnWindowPosChanging 사용

개발을 하다 보면 사용자에게 UI를 보여주지 않고 백그라운드로 실행 해야할 프로그램을 만들어야 할 때가 있습니다.
그럼 보통 ShowWindow( SW_HIDE )를 사용하거나 CreateEx로 윈도우 생성 시 투명 속성을 줄 수 있습니다.
MFC의 경우 SW_HIDE를 하는데 중요한건 OnInitDialog에서 해도 대화상자가 보인다는 겁니다.

아래 그림과 같이 WM_WINDOWPOSCHANGING을 받는 OnWindowPosChanging을 생성합니다.

그리고 함수 내부에 아래와 같이 코딩합니다.

void CMFCApplication1Dlg::OnWindowPosChanging( WINDOWPOS* lpwndpos )
{
	lpwndpos->flags &= ~SWP_SHOWWINDOW;

	CDialogEx::OnWindowPosChanging( lpwndpos );

	// TODO: 여기에 메시지 처리기 코드를 추가합니다.
}

이 상태로 빌드 후 실행 시켜 보면 작업표시줄에도 프로그램이 보이지 않습니다.

프로그램을 보였다가 안보였다가 하고 싶으시면 헤더파일에 아래와 같이 BOOL Type의 변수를 선언 하신 후,

BOOL m_bDlgShow;

OnWindowPosChaning를 아래와 같이 만들어 주시면 됩니다.

void CMFCApplication1Dlg::OnWindowPosChanging( WINDOWPOS* lpwndpos )
{
	if ( m_bDlgShow )
		lpwndpos->flags |= SWP_SHOWWINDOW;
	else
		lpwndpos->flags &= ~SWP_SHOWWINDOW;

	CDialogEx::OnWindowPosChanging( lpwndpos );

	// TODO: 여기에 메시지 처리기 코드를 추가합니다.
}

m_bDlgShow 값을 변경 하고 ShowWindow(SW_SHOW) 혹은 ShowWindow(SW_HIDE)를 사용하시면 됩니다.