개발을 하다 보면 사용자에게 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)를 사용하시면 됩니다.