Использование ↺ на кнопке в графическом интерфейсе Win32

Я делаю приложение с графическим интерфейсом Win32 и хочу отображать символ ↺ на кнопке.

Обычно я думаю, что можно было бы вставить символ юникода следующим образом:

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);

где "⟳" — символ Юникода, описанный здесь в разделе "C/C++/Java" http://www.fileformat.info/info/unicode/char/27f3/index.htm

Однако, когда я это делаю, я получаю не символ стрелки, а другой? Что происходит не так?

Спасибо!


person beenjaminnn    schedule 28.05.2013    source источник
comment
Вам нужно либо выбрать шрифт, поддерживающий символ Unicode, который вы хотите отобразить, либо использовать растровое изображение.   -  person Captain Obvlious    schedule 28.05.2013
comment
если вам все равно, получение такого изображения и использование кнопки «Изображение» может сэкономить вам много времени.   -  person David    schedule 28.05.2013
comment
Гм, вы помещаете символ Unicode в строку Ansi. Это никогда не заканчивается хорошо.   -  person Raymond Chen    schedule 28.05.2013
comment
Я предполагаю, что мотивация для этого вместо использования текста, такого как «Назад», заключается в ограниченном пространстве. Если да, то все в порядке, но настоятельно рекомендуется добавить всплывающую подсказку к кнопке, которая отображает текстовое объяснение ее функции при наведении курсора мыши. Что-то такое простое, как «Вернуться», подойдет — просто не думайте, что пользователь точно знает, что означает ↺.   -  person Cody Gray    schedule 28.05.2013


Ответы (2)


Я собираюсь бессовестно украсть комментарий Рэймонда Чена и показать исправленный код:

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);

Естественно, шрифт, который вы выбрали в окне, должен поддерживать символ.

person Mark Ransom    schedule 28.05.2013
comment
На самом деле, последние версии Windows способны выбирать другой шрифт для отсутствующих глифов, так что, возможно, он все равно будет работать. - person Igor Skochinsky; 28.05.2013

Ну, вы также можете сделать это, и это не сильно отличается от ответа @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.

person Pratik Singhal    schedule 22.06.2014
comment
Макрос TEXT полезен только в том случае, если вы хотите иметь возможность переключаться с одного типа символов на другой. Если вы используете функции API, которые заканчиваются на A или W, вы уже привязаны к типу символов для параметров, поэтому я предпочитаю говорить об этом явно. Я также вижу _T чаще, чем TEXT, хотя они означают одно и то же. - person Mark Ransom; 01.09.2016