在 Win32 GUI 中使用 ↺ 按钮

4

我正在制作一个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" 是unicode字符,可以参考 "C/C++/Java" http://www.fileformat.info/info/unicode/char/27f3/index.htm

然而,当我这样做时,我没有得到箭头字符,而是另一个字符?出了什么问题吗?

谢谢!


1
你需要选择一个支持你想要显示的Unicode字符的字体,或者使用位图图像。 - Captain Obvlious
如果你不介意的话,获取这样一个图像并使用Image按钮可能会节省你很多时间。 - David
12
嗯,你正在将一个Unicode字符放入一个Ansi字符串中。这样做通常不会有好结果。 - Raymond Chen
1
我假设这样做的动机是为了节省空间,而不是使用像“返回”这样的文本。如果是这样,那么一切都很好,但强烈建议在按钮上添加工具提示,在鼠标悬停时显示其功能的文字说明。简单的“返回”之类的东西就可以了,只是不要假设用户知道↺的确切含义。 - Cody Gray
2个回答

8
我将不怀羞耻地从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版本能够为缺失的字形选择另一种字体,因此它可能会“自动适应”。 - Igor Skochinsky

0

好的,你也可以这样做,这与@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 

解释:- 如果定义了UNICODE,则TEXT是一个宏,它会扩展为Unicode等效字符串,否则它将评估为普通的ASCII字符串。


TEXT 宏仅在您想要能够从一种字符类型切换到另一种字符类型时才有用。如果您使用以 AW 结尾的 API 函数,则已经锁定了参数的字符类型,因此我更喜欢明确说明。尽管它们的含义相同,但我更常见 _T 而不是 TEXT - Mark Ransom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接