【问题标题】:CMFCButton with Icon or Bitmap shows only a cut off text?带有图标或位图的 CMFCButton 仅显示截断的文本?
【发布时间】:2021-07-28 01:02:03
【问题描述】:

为什么CMFCButton 只显示一个截断的文本?

可以在VS2019中展示和重现,在IDD_ABOUTBOX中添加了Button。

【问题讨论】:

  • 图片并不能证明文字被截断。也许一开始它很短?显示您的代码。
  • 所有代码都在资源编辑器中。我刚刚在这里添加了一个标准的 MFCButton。标准文本是 MFCButton。请有人尝试确认一下?
  • 我试过了。您一定做了一些不同的事情:即使我选择图像类型位图,我也不会在不编写代码的情况下获得图像。显示您的代码。
  • 由于项目的“Unicode/多字节”设置与用作按钮标签/文本的字符串文字格式之间的冲突,我遇到了类似的问题。检查它们是否兼容(即带有或不带有 L".." 前缀的文字)。
  • 您的资源脚本代码。请显示该代码(不是整个资源脚本,只是一个minimal reproducible example)。

标签: winapi visual-c++ mfc


【解决方案1】:

我现在可以隔离并重现并解决问题。 (感谢 a.mole 的记忆)

如果您使用 Visual C++ 中的应用向导生成此项目,您的 stdafx.h(或较新版本中的 framework.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

一切都好!

现在,在我的旧项目中,我已经注释掉了 ifdef _UNICODE 以在 MBCS 中使用相同的清单。 https://stackoverflow.com/a/59631066/4303373

//#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

结论:您不应该更改 MS 生成的代码,这在未来的版本中可能无法正常工作。

【讨论】:

    猜你喜欢
    • 2013-12-06
    • 1970-01-01
    • 2019-10-14
    • 1970-01-01
    • 2016-08-31
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多