Окна инструментов WS_EX_TOOLWINDOW не работают должным образом - PullRequest
0 голосов
/ 03 июня 2019

В нашем устаревшем коде Windows используется расширенный стиль WS_EX_TOOLWINDOW. Это в основном для показа строки заголовка узкой. Но недавно в более поздних версиях winodws строка заголовка не прорисовывалась как узкая. То есть WS_EX_TOOLWINDOW не дает узкой строки заголовка в более новых версиях Windows. Создание узкой строки заголовка выполняется при событии щелчка. Дайте мне знать, есть ли другой способ добиться этого?

Я прочитал, что нам нужно обработать WM_NCCALCSIZE. Но есть ли другой способ сделать это?

Фрагмент кода:

HWND hwnd = m_hWnd;
......

DWORD dwStylesEx = ::GetWindowLong( hwnd, GWL_EXSTYLE );

if ( bNarrowTitle == true)
{
    dwStylesEx |= WS_EX_TOOLWINDOW;
}
else
{
    dwStylesEx &= ~WS_EX_TOOLWINDOW;
}
...

::SetWindowLong( hwnd, GWL_EXSTYLE, dwStylesEx );

Ответы [ 2 ]

0 голосов
/ 04 июня 2019

Внешний вид по умолчанию просто не отличает его в любом случае. Что говорит о том, что вам просто придется с этим жить.

Вероятно, он был изменен из-за того, что не дружит с пальцами, если меньше!

См .: WS_EX_TOOLWINDOW не смотрит, я хочу

Как вы сказали, дескриптор WM_NCCALCSIZE может быть единственным способом обработки размера не клиентских областей.

См .: Как установить размер области Non-client окна Win32 (собственный)

0 голосов
/ 04 июня 2019

MSDN говорит :

Некоторые данные окна кэшируются, поэтому изменения, сделанные вами с помощью SetWindowLong, не вступят в силу, пока вы не вызовете функцию SetWindowPos. В частности, если вы изменяете любой из стилей фреймов, вы должны вызвать SetWindowPos с флагом SWP_FRAMECHANGED для правильного обновления кэша.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...