Unicode 样式为LVCFMT\u固定\u宽度的CListCtrl不适用于默认窗口。通用控件

Unicode 样式为LVCFMT\u固定\u宽度的CListCtrl不适用于默认窗口。通用控件,unicode,mfc,common-controls,Unicode,Mfc,Common Controls,我使用LVCFMT_FIXED_WIDTH样式来防止调整用户列的大小 m_ListCtrl.InsertColumn(0, _gszColumnLabel[0], _gnColumnFmt[0], LVCFMT_FIXED_WIDTH, _gnColumnWidth[0], -1); 我仅从hasard那里发现,这在Unicode中有效,但在非Unicode应用程序中不起作用。用户仍然可以调整列的大小 我认为这与stdafx.h中默认的Windows.Common-Controls清单框架有关

我使用LVCFMT_FIXED_WIDTH样式来防止调整用户列的大小

m_ListCtrl.InsertColumn(0, _gszColumnLabel[0], _gnColumnFmt[0], LVCFMT_FIXED_WIDTH, _gnColumnWidth[0], -1);
我仅从hasard那里发现,这在Unicode中有效,但在非Unicode应用程序中不起作用。用户仍然可以调整列的大小

我认为这与stdafx.h中默认的Windows.Common-Controls清单框架有关

#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应用程序也使用相同的清单,它会再次工作


但我敢肯定,这是否是正确的解决方案?我们可以为Unicode和N个非Unicode应用程序使用相同的Windows.Common-Controls MainiTest吗?

LVCFMT\u FIXED\u WIDTH
需要CommCtrl v6,它最容易通过清单启用。但正如您所发现的,CommCtrl v6不仅限于Unicode窗口(我在几个使用ANSI窗口的传统应用程序中使用CommCtrl v6,它工作得很好),所以我不知道为什么Microsoft将
#pragma
限制为Unicode版本


但是,使用CommCtrl v6并不是锁定列大小的唯一方法。另一个选项是对ListView本身(不是其父窗口!)进行子类化以处理通知,返回TRUE以调整块大小。

LVCFMT\u FIXED\u WIDTH
需要CommCtrl v6,这最容易通过清单启用。但正如您所发现的,CommCtrl v6不仅限于Unicode窗口(我在几个使用ANSI窗口的传统应用程序中使用CommCtrl v6,它工作得很好),所以我不知道为什么Microsoft将
#pragma
限制为Unicode版本


但是,使用CommCtrl v6并不是锁定列大小的唯一方法。另一个选项是对ListView本身(而不是其父窗口!)进行子类化以处理通知,返回TRUE以调整块大小。

感谢CommCtrl v6的说明,那么我们也可以在非Unicode环境中使用相同的CommCtrl v6而不必担心?我在depeny walker中发现了一个“混乱”的混合模块,具有不同的CPU类型。我可以忽略这个吗

(在我看来,HDN_BEGINTRACK不是一个解决方案,因为它仍然会在固定模式下显示“调整鼠标光标大小”)@TomTom我在非Unicode应用程序中使用CommCtrl v6多年了,效果很好。感谢CommCtrl v6的澄清,那么我们也可以在非Unicode环境中使用相同的CommCtrl v6而不必担心?我在depeny walker中发现了一个“混乱”的混合模块,具有不同的CPU类型。我可以忽略这个吗

(在我看来,HDN_BEGINTRACK不是一个解决方案,因为它仍然会在固定模式下显示“调整鼠标光标大小”)@TomTom我已经在非Unicode应用程序中使用CommCtrl v6多年了,它工作得很好。