Как сделать, чтобы окно не появлялось на панели задач?
Существует по крайней мере два способа решить эту задачу. Оба документированы в базе знаний Микрософт. Первый очень прост в реализации, но подходит не всегда. Второй более универсальный, а его реализация лишь немного труднее.
Способ 1
Всё, что вам нужно сделать - назначить окну при создании стиль WS_EX_TOOLWINDOW. В программе на "чистом" API этот стиль передаётся функции CreateWindowEx.
| (WS_EX_TOOLWINDOW, // Задаём нужный стиль.     szWindowClass,    szTitle,    WS_OVERLAPPEDWINDOW,    CW_USEDEFAULT,    CW_USEDEFAULT,    CW_USEDEFAULT,    CW_USEDEFAULT,    NULL,    NULL,    hInstance,NULL ); | 
В MFC аналогичная задача решается переопределением функции PreCreateWindow, в которой и задаётся нужный стиль.
| {if( !CFrameWnd::PreCreateWindow(cs) ) return FALSE;  // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs      ...     cs.dwExStyle |= WS_EX_TOOLWINDOW; ...     return TRUE; } | 
Как уже говорилось, при использовании этого способа возникает одна проблема. Дело в том, что изначально стиль WS_EX_TOOLWINDOW разрабатывался для вспомогательных окон (таких, как плавающие панели инструментов), а не для главного окна приложения. Окна с этим стилем имеют более узкий заголовок, на котором отсутствует иконка приложения и кнопки минимизации/максимизации (рисунок 1). Если вас это не устраивает, придётся использовать другой способ.
Способ 2
Как известно, Windows не отображает на панели задач скрытые окна, а также любые дочерние окна скрытых окон. Поэтому второй способ решить поставленную задачу - назначить окну "в родители" невидимое окно. Например:
|     HWND hWnd = CreateWindow(    szWindowClass,    szTitle,    WS_OVERLAPPEDWINDOW,    CW_USEDEFAULT,    CW_USEDEFAULT,    CW_USEDEFAULT,    CW_USEDEFAULT,    hHiddenWnd,    NULL,    hInstance,NULL ); | 
В MFC задача решается аналогично.
