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