Я использую стиль LVCFMT_FIXED_WIDTH, чтобы предотвратить изменение размера пользовательских столбцов.
m_ListCtrl.InsertColumn(0, _gszColumnLabel[0], _gnColumnFmt[0], LVCFMT_FIXED_WIDTH, _gnColumnWidth[0], -1);
То, что я обнаружил только с помощью hasard, работает в Unicode, но не в приложениях, не поддерживающих Unicode. Пользователь по-прежнему может изменять размеры столбцов.
Я думаю, что это связано со скелетом манифеста Windows.Common-Controls по умолчанию в stdafx.h.
#ifdef _UNICODE
#if defined _M_IX86
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_X64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#else
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
#endif
#endif
К сожалению, нет настроек по умолчанию для приложения НЕ Unicode.
Если я использую тот же манифест и для приложения НЕ Unicode, он снова работает.
Но я уверен, если это правильное решение? Можем ли мы использовать один и тот же основной файл Windows.Common-Controls для приложений Unicode и NON Unicode?
LVCFMT_FIXED_WIDTH
требуется CommCtrl v6, который проще всего включить через манифест. Но CommCtrl v6 не ограничивается только окнами Unicode, как вы обнаружили (я использую CommCtrl v6 в нескольких устаревших приложениях, использующих окна ANSI, и он отлично работает), поэтому почему Microsoft ограничивает #pragma
только сборками Unicode, я не знаю .
Однако использование CommCtrl v6 — не единственный способ заблокировать изменение размера столбцов. Другой вариант — создать подкласс самого ListView (а не его родительского окна!), чтобы обрабатывать уведомление HDN_BEGINTRACK
, возвращая TRUE для изменения размера блока.
@TomTom Я годами использую CommCtrl v6 в приложениях, отличных от Unicode, он отлично работает.
Спасибо за пояснение с CommCtrl v6. Тогда мы можем без проблем использовать тот же CommCtrl v6 и в среде без Unicode? Вижу в depeny walker была обнаружена "каша" микширования модулей с разными типами ЦП. Могу ли я игнорировать это? <br/> <br/> (На мой взгляд, HDN_BEGINTRACK не является решением, поскольку в фиксированном режиме он по-прежнему будет отображать «размер курсора мыши».)