WinAPI: Создание изменяемого по размеру окна без строки заголовка, но с кнопками минимизации/максимизации/закрытия (как Firefox/Chrome/Opera)

Если вы посмотрите на окна браузеров Firefox, Chrome или Opera, вы заметите, что их окна

  • имеют кнопки минимизации/максимизации/закрытия
  • изменяют размер
  • но не имеют строки заголовка

Меня интересует: как я могу создать такое окно?

Что я уже пробовал:

Я поискал на StackOverflow (и погуглил тоже) и нашел вот это: открытие окна без строки заголовка в win32

К сожалению, это не помогло полностью:

Первым шагом было расширение решения, предложенного на открытие окна без строки заголовка в win32

hWnd = CreateWindow(szWindowClass, szTitle, WS_BORDER, 
  CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 
  NULL, NULL, hInstance, NULL);

SetWindowLong(hWnd, GWL_STYLE, WS_SIZEBOX);
// See remarks on http://msdn.microsoft.com/en-us/library/windows/desktop/ms633545.aspx
SetWindowPos(hWnd, 0, 
   0, 0, 0, 0, // Position + Size
   SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);

Конечно, это не дает кнопок минимизации/максимизации, но с другой стороны, если я хочу кнопки минимизации/максимизации, я должен сделать:

SetWindowLong(hWnd, GWL_STYLE, WS_SIZEBOX | WS_MAXIMIZEBOX | 
    WS_MINIMIZEBOX | WS_SYSMENU | WS_CAPTION);

Почему эта комбинация кажется необходимой? Сначала я, вероятно, хочу WS_MAXIMIZEBOX | WS_MINIMIZEBOX, поскольку мне нужны эти кнопки.

Но http://msdn.microsoft.com/en-us/library/ms632600.aspx говорит, что если я устанавливаю один из WS_MAXIMIZEBOX и WS_MINIMIZEBOX, я также должен установить WS_SYSMENU. И когда я устанавливаю WS_SYSMENU, я также должен установить WS_CAPTION, но это не то, что я хочу, потому что я хотел избежать строки заголовка (действительно: если WS_CAPTION не установлен, кнопки минимизации/максимизации не отображаются).

Так что же делать?

19
задан Nubok 4 June 2017 в 21:26
поделиться