【问题标题】:Using ↺ on a button in Win32 GUI在 Win32 GUI 中的按钮上使用 ↺
【发布时间】:2013-05-22 22:05:09
【问题描述】:

我正在制作一个 Win32 GUI 应用程序,我想在按钮上显示 ↺ 字符。

通常,我认为人们会像这样插入一个 unicode 字符:

HWND button = CreateWindow("BUTTON", "\u27F3",
        WS_TABSTOP|WS_VISIBLE|WS_CHILD|BS_PUSHBUTTON, size - 105,
        size - 29, 100, 24, hwnd, (HMENU)IDI_BUTTON,
        GetModuleHandle(NULL), NULL);

其中“\u27F3”是此处在“C/C++/Java”下描述的 unicode 字符 http://www.fileformat.info/info/unicode/char/27f3/index.htm

但是,当我这样做时,我没有得到箭头字符而是一个不同的字符?怎么了?

谢谢!

【问题讨论】:

  • 您需要选择支持您要显示的Unicode字符的字体或使用位图图像。
  • 如果您不在乎,获取这样的图像并使用图像按钮可能会节省您很多时间。
  • 嗯,您将 Unicode 字符放入 Ansi 字符串中。这永远不会结束。
  • 我假设这样做而不是使用像“Back”这样的文本的动机是有限的空间。如果是这样,这一切都很好,但强烈考虑在您的按钮上添加一个工具提示,在鼠标悬停时显示其功能的文字说明。像“Go Back”这样简单的东西就可以了——只是不要假设用户完全知道 ↺ 的含义。

标签: c++ winapi unicode win32gui


【解决方案1】:

我要厚颜无耻地抄袭Raymond Chen的评论并展示更正后的代码:

HWND button = CreateWindowW(L"BUTTON", L"\u27F3",
        WS_TABSTOP|WS_VISIBLE|WS_CHILD|BS_PUSHBUTTON, size - 105,
        size - 29, 100, 24, hwnd, (HMENU)IDI_BUTTON,
        GetModuleHandle(NULL), NULL);

您在窗口中选择的字体自然需要支持该字符。

【讨论】:

  • 实际上,最新版本的 Windows 能够为丢失的字形选择另一种字体,因此它可能会“正常工作”。
【解决方案2】:

好吧,你也可以这样做,这与@Mark Ransom 的回答没有太大区别:-

HWND button = CreateWindowW(TEXT("BUTTON"), TEXT("\u27F3"),
    WS_TABSTOP|WS_VISIBLE|WS_CHILD|BS_PUSHBUTTON, size - 105,
    size - 29, 100, 24, hwnd, (HMENU)IDI_BUTTON,
    GetModuleHandle(NULL), NULL);

并像这样在你的程序中定义一个 UNICODE:-

 #define UNICODE 

解释:- TEXT 是一个宏,如果 UNICODE 被定义为其他方式,它会扩展为 unicode 等效项,否则它会计算为普通的 ASCII 字符串。

【讨论】:

  • TEXT 宏仅在您希望能够从一种字符类型切换到另一种字符类型时才有用。如果您使用以AW 结尾的API 函数,您已经锁定了参数的字符类型,所以我更愿意明确说明。我也看到 _TTEXT 更多,即使它们的意思相同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-26
  • 1970-01-01
  • 2010-10-13
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多