CListCtrl со стилем LVCFMT_FIXED_WIDTH не работает со стандартными Windows.Common-Controls - PullRequest
0 голосов
/ 08 апреля 2019

Я использую стиль LVCFMT_FIXED_WIDTH для предотвращения изменения размера пользовательских столбцов.

m_ListCtrl.InsertColumn(0, _gszColumnLabel[0], _gnColumnFmt[0], LVCFMT_FIXED_WIDTH, _gnColumnWidth[0], -1);

То, что я обнаружил только через hasard, это работает в Unicode, но не в приложениях NON 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

К сожалению, для приложения NON Unicode нет настроек по умолчанию.

Если я использую тот же манифест и для приложения NON Unicode, он снова будет работать.

Но я уверен, что это правильное решение? Можем ли мы использовать один и тот же мейнфест Windows.Common-Controls для приложений Unicode и NON Unicode?

1 Ответ

1 голос
/ 09 апреля 2019

LVCFMT_FIXED_WIDTH требует CommCtrl v6, который легче всего включить через манифест. Но CommCtrl v6 не ограничивается только окнами Unicode, как вы обнаружили (я использую CommCtrl v6 в нескольких устаревших приложениях, использующих окна ANSI, и это прекрасно работает), поэтому, почему Microsoft ограничивает #pragma только сборками Unicode, я делаю не знаю.

Однако использование CommCtrl v6 - не единственный способ заблокировать изменение размеров столбцов. Другой вариант заключается в создании подкласса самого ListView (а не его родительского окна!) Для обработки уведомления HDN_BEGINTRACK, возвращающего TRUE для изменения размера блока.

...