Создание окна с использованием CreateWindowEx без иконки - PullRequest
5 голосов
/ 05 февраля 2011

С C # я легко смог получить желаемый эффект:

standard window without icon in title bar

Однако у меня возникают проблемы при выполнении того же действия с использованием Win32 API в C. Я не знаю, как создать окно, которое имеет без значка (вообще), но все еще имеет заголовок, кнопка сворачивания и кнопка закрытия.

Я правильно зарегистрировал свой класс, но не могу понять, что добавить в стили окон / расширенные стили окон.

static const TCHAR lpctszTitle[] = TEXT("Stuff"), lpctszClass[] =
  TEXT("StuffClass");

HWND hWnd = CreateWindowEx(WS_EX_LAYERED | WS_EX_TOPMOST, lpctszClass,
  lpctszTitle, WS_OVERLAPPED | WS_SYSMENU | WS_CAPTION | WS_MINIMIZEBOX,
  CW_USEDEFAULT, 0, 250, 55, NULL, NULL, hThisInstance, NULL);

Код, указанный выше:

standard window WITH an icon in the title bar

, который все еще имеет значок в строке заголовка и не тот, который я хотел.

Ответы [ 2 ]

7 голосов
/ 05 февраля 2011

Стандартное окно требует пиктограммы, потому что оно нуждается в некоторой форме представления на панели задач в нижней части экрана. Что должно отображаться при нажатии Alt + Tab в переключателе окон, если в одном из главных окон отсутствует значок?

Вам необходимо указать WS_EX_DLGMODALFRAME расширенный стиль . Это тот же эффект, который WinForms устанавливает при отключении значка в строке заголовка.

Вы также должны убедиться, что вы не указываете значок при регистрации класса окна. Вам необходимо установить для полей hIcon и hIconSm структуры WNDCLASSEX значение 0.

Измените свой код на следующий:

static const TCHAR lpctszTitle[] = TEXT("Stuff"), lpctszClass[] =
  TEXT("StuffClass");

HWND hWnd = CreateWindowEx(WS_EX_LAYERED | WS_EX_TOPMOST, lpctszClass,
  lpctszTitle, WS_OVERLAPPED | WS_SYSMENU | WS_CAPTION | WS_MINIMIZEBOX,
  CW_USEDEFAULT, 0, 250, 55, NULL, NULL, hThisInstance, NULL);
1 голос
/ 05 февраля 2011

В дополнение к этому, используйте Spy ++ или другой подобный инструмент, чтобы увидеть стили, которые фактически использует любой данный HWND.Наведите его на свое окно C #, затем продублируйте сообщенные стили в своем коде C.

...