【问题标题】:Setting the szTip field of the NOTIFYICONDATA structure设置 NOTIFYICONDATA 结构的 szTip 字段
【发布时间】:2011-11-28 18:14:04
【问题描述】:

szTip 字段长度为 128 个字符,并且是 unicode。它是 TCHAR 类型,类型定义为 WCHAR。所以我不知道为什么下面的代码 sn-p 不会编译。

nid.szTip = _T("ToolTip");

编译错误是

error C2440: '=' : cannot convert from 'const wchar_t [8]' to 'WCHAR [128]'

有什么建议吗?

【问题讨论】:

    标签: c++ winapi icons wchar


    【解决方案1】:

    如果您分配给TCHAR*,您的代码将起作用。但是,szTip 不是TCHAR*,它被声明为TCHAR szTip[64]

    所以你需要将字符串的内容复制到缓冲区。像这样:

    _tcscpy(nid.szTip, _T("ToolTip"));
    

    您真的需要同时支持 ANSI 和 Unicode 构建吗?如果不是,请停止使用 TCHAR 并切换到 Unicode。然后你可以写一个更易读的版本。

    wcscpy(nid.szTip, L"ToolTip");
    

    【讨论】:

    • tchar 版本本身并没有什么可读性差的地方......只是每个人都比较熟悉,所以为什么不使用它呢?
    • FWIW,我已经看到很多所谓的基于 TCHAR 的代码实际上是仅 UNICODE:使用 TCHAR 调用仅 UNICODE API(例如 SysAllocString 或其他基于 COM 的 API)的代码,这将失败如果曾经编译为 ANSI,则直接编译。因此,代码可能会产生误导:使用 TCHAR 表明“此代码可以作为 ANSI 或 UNICODE 工作”(因为这就是 TCHAR 首先存在的原因)。当然,如果您不在乎其他人对您的代码的看法,这不是问题。
    猜你喜欢
    • 2018-12-25
    • 1970-01-01
    • 1970-01-01
    • 2015-01-06
    • 1970-01-01
    • 2021-11-01
    • 2015-11-21
    • 2022-11-10
    • 1970-01-01
    相关资源
    最近更新 更多