Убрать заголовок и кнопки оставив возможность растягивать окно
Есть окно
HWND hwnd = CreateWindowExW(
WS_EX_TOOLWINDOW | WS_EX_TOPMOST, // Optional window styles.
CLASS_NAME, // Window class
L"Keystrokes",
WS_THICKFRAME, // Window style
// Position and size
CW_USEDEFAULT, CW_USEDEFAULT, 200, 200,
NULL, // Parent window
NULL, // Menu
hInstance, // Instance handle
nullptr // Additional application data
);
Нужно сделать через стили так чтобы оно могло растягиваться как обычное окно но не имело заголовка и кнопок закрытия. Можно ли так сделать при учёте что WS_EX_TOOLWINDOW нужно оставить (WS_EX_TOOLWINDOW нужен для того чтобы не было значка на панели задач и при переключении через alt + tab) ?
(Что-то типа WS_POPUP но с возможностью растягивать окно)
Ответы (2 шт):
Достаточно использовать стиль WS_POPUP bitor WS_THICKFRAME bitor WS_VISIBLE
Как дополнение. Не лучше решение, но если прийдётся менять размеры почти в ручном режиме, то можно сделать форсированое изменение размера. Что-то вроде... если клик попал в зону А - делать ресайз - лево-право. Но тогда прийдётся и вручную менять курсор и вручную обрабатывать клик.
Сам ресайз можно активировать/форсировать так
ReleaseCapture(); // Если мы делаем внутри клика, то Capture может мешать
SendMessage(hwnd , WM_SYSMESSAGE, SC_SIZE + число , 0 );
/* где число
SC_SIZE_HTLEFT = 1,
SC_SIZE_HTRIGHT = 2,
SC_SIZE_HTTOP = 3,
SC_SIZE_HTTOPLEFT = 4,
SC_SIZE_HTTOPRIGHT = 5,
SC_SIZE_HTBOTTOM = 6,
SC_SIZE_HTBOTTOMLEFT = 7,
SC_SIZE_HTBOTTOMRIGHT = 8 */
// т.е. например так
SendMessage(hwnd , WM_SYSMESSAGE, SC_SIZE + 8 , 0 );
Так же аналогично можно форсировать move
ReleaseCapture();
SendMessage(hwnd , WM_SYSMESSAGE, SC_MOVE + 2 , 0 );
И доп-совет по поводу region
HRGN rgn = CreateRectRgn(0,0,ширина_окна, высота_окна)
SetWindowRgn(w2, rgn , true);
...
DeleteObject(rgn); // Потом регион прийдётся удалить
Не забудте при выходе, или обновлении уничтожать rgn, что бы не было утечки. Возможно rgn можно создать на ширину/высоту экрана и не обновлять вообще, но я так не делал. Использование rgn позволяет "выкинуть" лишнюю часть окна и не показывать, т.е обрезать. Высоту заголока можно узнать через http://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getsystemmetrics