Окна инструментов WS_EX_TOOLWINDOW не работают должным образом

В нашем устаревшем коде 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 );

person Sana    schedule 03.06.2019    source источник
comment
Предоставьте минимальный воспроизводимый пример. То есть покажите нам код, который воспроизводит проблему.   -  person selbie    schedule 03.06.2019
comment
Я предоставил фрагмент кода.   -  person Sana    schedule 03.06.2019
comment
Это вряд ли MCVE. У меня многолетний опыт программирования на Win32. Я заинтересован и заинтересован в устранении вашей проблемы. Но как вы думаете, если бы я просто взял этот код как есть, мне нужно было скопировать его в локальный проект Visual Studio и внезапно воспроизвести вашу проблему? Возможно нет. Напишите полную программу-пример с WinMain, которая показывает ту же проблему, и опубликуйте ее. Или, по крайней мере, скажите мне одну вещь, которую вы сделали для отладки проблемы, например, проверка кодов возврата API, использование WinSpy для проверки того, был ли применен стиль и т. Д. Вы не получите хороших ответов, если не зададите хороший вопрос .   -  person selbie    schedule 03.06.2019
comment
Извините, я подумал, что тот, кто знает об этом, сможет помочь, посмотрев на этот код. Но я опубликую весь код. А что касается применяемого стиля, при его применении у меня проблема только с строкой заголовка.Другие свойства Таким образом, хотя стиль применяется, строка заголовка не имеет никакого эффекта.   -  person Sana    schedule 04.06.2019


Ответы (2)


MSDN говорит:

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

person Anders    schedule 04.06.2019
comment
SetWindowPos уже используется. При применении стиля у меня проблема только с панелью заголовка. Изменяются другие свойства. Таким образом, хотя стиль применяется, строка заголовка не имеет никакого эффекта. Но MSDN сообщает .. Окно инструмента имеет заголовок. строка короче, чем обычная строка заголовка, а заголовок окна отображается меньшим шрифтом. - person Sana; 04.06.2019
comment
В вашем примере кода это не называлось. Точный размер и стиль зависят от визуального стиля, пользовательских показателей и шрифта. Если значок и кнопки свертывания / разворачивания исчезают, это окно инструментов. - person Anders; 04.06.2019

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

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

Обратитесь: WS_EX_TOOLWINDOW не смотрится, я хочу

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

Обратитесь: Как установить размер Неклиентской области окна Win32 (родной)

person Strive Sun    schedule 04.06.2019