프로그램 시작시 다이얼로그를 숨기고 트레이아이콘만 나오게 설정하는 프로그램을 만들어 보신분은 조금은 고생하셨을 거라고 생각합니다.
ShowWindow(SW_HIDE)
을 삽입하면 다이얼로그를 숨기고 트레이아이콘만 나오게 할 수 있을 거라고 쉽게 생각하기 마련입니다. 저도 그와 같은 생각으로 소스코드의 여러군데에 삽입해 보았지만 아무 소용이 없었습니다. 그래서 다른 방법으로 다이얼로그를 제어해야한다는 것을 깨달았습니다.

 WindowPosChanging 메시지를 이용한 숨기기
 

WindowPosChanging 메시지는 윈도우의 크기, 위치, Z-order 순서 변경할때 발생하는 메시지입니다. 윈도우의 변화가 있으면 발생하는 메시지입니다.

WindowPosChanging 메시지의 멤버변수를 보면 flags 멤버변수가 있습니다. 이 변수는 윈도우의 위치에 대한 다양한 설정 값을 가지고 있습니다.
SWP_DRAWFRAME  프레임을 그린다.
SWP_FRAMECHANGED
SWP_HIDEWINDOW  윈도우를 숨긴다.
SWP_NOACTIVATE  윈도우를 활성화 시키지 않는다.
SWP_NOCOPYBITS  클라이언트 영역과 관련된 모든 정보를 무시한다.
SWP_NOMOVE  현재 위치를 유지한다. (x,y 파라미터를 무시한다.)
SWP_NOOWNERZORDER  소유주 윈도우의 Z-order를 변경하지 않는다.
SWP_NOREDRAW  윈도우를 새로 그리지 않는다. 어떠한 페인팅 관련 메시지도 포스트 되지 않는다.
SWP_NOREPOSITION  SW_NOOWNERZORDER 플래그와 같음
SWP_NOSENDCHANGING  윈도우가 WM_WINDOWPOSCHANGING 메시지를 받는 것을 막는다.
SWP_NOSIZE  사이즈를 변경하지 않는다. (cx, cy 파라미터를 무시한다.)
SWP_NOZORDER  Z-order를 변경하지 않는다.
SWP_SHOWWINDOW  윈도우를 출력한다.
다이얼로그가 생성될때 flags 가 SWP_SHOWWINDOW 값으로 설정되어질 것 입니다. 설정되어 있는 flags 값을 삭제하면 다이얼로그는 보이지 않을 것입니다.

[MFC] 트레이 아이콘 등록  ☞  http://pangsan.tistory.com/161

1. m_bShowStatus 멤버변수 선언
     
protected:
    bool m_bShowStatus;
다이얼로그 시작시 m_bShowStatus 변수값을 false 값으로 설정합니다.

2. OnWindowPosChanging 메시지를 작성한다.
     
void CTrayDlg::OnWindowPosChanging(WINDOWPOS* lpwndpos)
{
    CDialog::OnWindowPosChanging(lpwndpos);

    // TODO: 여기에 메시지 처리기 코드를 추가합니다.
    if( m_bShowStatus == true ) {
        lpwndpos->flags |= SWP_SHOWWINDOW;
    }
    else {
        lpwndpos->flags &= ~SWP_SHOWWINDOW;
    }
}
m_bShowStatus 가 true 값이면 윈도우를 보이게 하고, false 값이면 윈도우를 숨깁니다.
LRESULT CTrayDlg::TrayIconMessage(WPARAM wParam, LPARAM lParam)
{
    // 등록된 TrayIcon 클릭하면 Show....
    if(lParam == WM_LBUTTONDBLCLK) {
        ShowWindow(SW_SHOW);
        m_bShowStatus = true;
    }
    return 0L;
}
이대로 설정해두면 다이얼로그는 계속 숨김상태로 됩니다. 다이얼로그를 보이게 설정하려면 위의 소소크드처럼 트레이아이콘을 클릭하여 다이얼로그를 보이게 하는 메서드를 만들어서 m_bShowStatus 에 true 값을 설정해두면 다이얼로그를 보이게 만들 수 있습니다.

야이노마

» Contact Me: yainoma00@gmail.com