Explorer.exe 가 오류가 발생하여 다시 시작됐을때, 트레이아이콘이 사라지게 된다.

이 문제를 해결하기 위해서는 다시 시작됐을때 메세지를 받아서 처리하면 된다.

h 파일에 함수를 하나 추가한다.

// 메세지 처리 함수
void OnTrayShow(WPARAM wParam, LPARAM lParam);

cpp 파일에 아래의 내용을 추가한다.

// 전역변수 추가
UINT g_uShellRestart = RegisterWindowMessage(__TEXT("TaskbarCreated"));

// 메세지 맵 추가
ON_REGISTERED_MESSAGE(g_uShellRestart, OnTrayShow)

// 메세지 처리
void CTrayTestDlg::OnTrayShow(WPARAM wParam, LPARAM lParam)
{
    Shell_NotifyIcon(NIM_ADD, &m_nid/*NOTIFYICONDATA*/);
    SendMessage(WM_SETICON, (WPARAM)TRUE, (LPARAM)m_nid.hIcon);
}