C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 Как скрыть окно из панели задач / Система / Visual C++

Как скрыть окно из панели задач
A: (SUnteXx)
Оригинальная ссылка: нету

Самый простой и не красивый, имхо, способ - поставить окну стиль ех WS_EX_TOOLWINDOW. Делается это так:
LONG l = GetWindowLong(hWnd, GWL_STYLEEX); // получаем текущий ExСтиль окна
l |= WS_EX_TOOLWINDOW; // добовляем наш стиль
SetWindowLong(hWnd, GWL_STYLEEX, l); // ставим стиль!
Но этот способ не очень хорош тем, что окно чуть-чуть изменяет размеры и внешний вид. С этим стилем у окна проподают кнопки Minimize (Свернуть), Maximize (Развернуть), а так же еще и иконка в правом верхнем углу.

Что же делать в таком случае?

Все очень просто. Создаем родителя окна где-нить не в прямой видимости десктопа, ставим ему выше указанный стиль, скрываем и ставим нашему окну этого скрытого родителя. Вот как это сделать:
// для начала зарегестрируем отдельный класс для "скрытого" родителя.
// Можно и не делать этого, а воспользоваться классом главного онка!

WNDCLASSEX        WndClass;

char            szClassName[] = "HiddenWindow";

WndClass.style = CS_HREDRAW | CS_VREDRAW;
WndClass.lpfnWndProc = (WNDPROC)ParentWindowProc;
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
WndClass.hInstance = hInstance;
WndClass.hIcon = 0l;
WndClass.hCursor = NULL;
WndClass.hbrBackground = (HBRUSH) GetStockObject (GRAY_BRUSH);
WndClass.lpszMenuName = NULL;
WndClass.lpszClassName = szClassName;
WndClass.hIconSm = 0l;

if (!RegisterClassEx(&WndClass))
{
    if (!RegisterClass((LPWNDCLASS)&WndClass.style))
    {
        MessageBox(NULL, "Can't register the class", "Error", MB_APPLMODAL | MB_ICONSTOP);
        return; // или "return 0;" Смотря что надо вернуть
    }
}

// Так как каждому классу надо поставить обработчик сообщений, то делаем это:

LRESULT CALLBACK ParentWindowProc (HWND hWnd, UINT uMessage, UINT wParam, LONG lParam)
{
    return DefWindowProc(hWnd, uMessage, wParam, lParam);
}

// Теперь надо создать по этому классу окно

HWND hWndParent = CreateWindow (szClassName, "Hidden Window by SUnteXx",
                        WS_THICKFRAME | WS_BORDER | WS_EX_TOOLWINDOW,
                        -31000,
                        -31000,
                        -30900,
                        -30900,
                        NULL, 
                        NULL,
                        hInstance, 
                        NULL);

// Теперь необходимо поставить родителя нашему главному окошку

LONG l = SetWindowLong(hWnd, GWL_HWNDPARENT, (LONG)hWndParent); // l будет равен указателю на старый родитель (или 0)!

// Если главное окно создаем после создания "скрытого" окна, то можно сразу при создании указать нашего родителя!
Ну вот вроде бы и все!

Правда Есть еще несколько способов по скрыванию окон из ТаскБара, но я их пока не знаю. Узнаю - напишу!