【问题标题】:CListCtrl is showing different theme for Unicode and Multi byte character setCListCtrl 显示 Unicode 和多字节字符集的不同主题
【发布时间】:2020-01-07 09:36:25
【问题描述】:

列表控件主题在更改字符集时显示不同的主题:

代码片段,

private:
CListCtrl m_list;

m_list.SetExtendedStyle(LVS_EX_GRIDLINES);
// TODO: Add extra initialization here

// Ask Mfc to create/insert a column
m_list.InsertColumn(
    0,              // Rank/order of item
    L"Name",         // Caption for this header
    LVCFMT_LEFT,    // Relative position of items under header
    100);          // Width of items under header

m_list.InsertColumn(1, L"Profession", LVCFMT_CENTER, 80);
m_list.InsertColumn(2, L"Fav. Sport", LVCFMT_LEFT, 100);
m_list.InsertColumn(3, L"Hobby", LVCFMT_LEFT, 80);

int nItem;

nItem = m_list.InsertItem(0, L"Sandra C. Anschwitz");
m_list.SetItemText(nItem, 1, L"Singer");
m_list.SetItemText(nItem, 2, L"HandBall");
m_list.SetItemText(nItem, 3, L"Beach");

nItem = m_list.InsertItem(0, L"Roger A. Miller");
m_list.SetItemText(nItem, 1, L"FootBaller");
m_list.SetItemText(nItem, 2, L"Tennis");
m_list.SetItemText(nItem, 3, L"Teaching");

如何获取多字节字符集中的 Unicode 主题?

【问题讨论】:

  • 请添加示例代码以更好地理解
  • 它只是一个普通的ListView控件代码,但是针对不同的字符集显示不同的主题。
  • AFAICS 这与 CListCtrl 完全无关。 “确定”按钮也没有主题。问题应该是:“为什么我的程序在我用 MBCS 编译时是主题,但在我用 UNICODE 编译时不是主题”。
  • 您可能为 Release/Debug 选择了不同的构建配置,它们使用不同的字符集以及不同的 manifest 用于视觉风格。
  • 是的,当您生成 VC++ MFC 应用向导应用程序时,它会为 Common Controls 6.0 添加一个条件清单依赖项,该依赖项仅对 UNICODE 应用程序启用。有技术说明(或至少 Raymond Chen)说明了为什么不在您的 MBCS 应用程序中包含 Common Controls 6.0。这可能就是为什么它的主题不同。

标签: c++ winapi visual-c++ mfc


【解决方案1】:

如果您使用 Visual C++ 中的应用程序向导生成此项目,您的 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

这就是您使用不同主题的原因。 technical reasons 在您的 MBCS 应用程序中不使用 Common Controls 6。但是,如果您可以成功地为 UNICODE 构建,那么就这样做。任何受支持的 Windows 操作系统都支持 UNICODE,这就是您无论如何都应该使用的。对 MBCS 说不就行了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-14
    • 2019-08-11
    • 1970-01-01
    • 2019-02-28
    • 2015-02-23
    • 2011-07-18
    • 2021-12-30
    • 1970-01-01
    相关资源
    最近更新 更多