Юникод символ в CEdit - PullRequest
       25

Юникод символ в CEdit

1 голос
/ 13 марта 2020

Я создаю пользовательский элемент управления CEdit, который позволяет мне устанавливать для него несколько разных цветов. Он работает нормально, пока я не сгенерирую на элементе управления стиль ES_PASSWORD.

. В этих случаях я не могу найти способ написать нужный символ (большая черная точка). Вот некоторые коды, которые я пробовал:

Первый вариант:

int lenght = text.GetLength();
text = "";
for (int i = 0; i < lenght; i++) text.AppendChar('\u25CF');

Второй вариант:

int lenght = text.GetLength();
text = "";
for (int i = 0; i < lenght; i++) text.Append("\u25CF");

Третий вариант:

int lenght = text.GetLength();
text = "";
for (int i = 0; i < lenght; i++) text.AppendChar((char)"\u25CF");

Я не понимаю, почему элемент управления не отображает правильный символ. Это только показывает это: <. Что я делаю неправильно?

ОБНОВЛЕНИЕ

Вот метод OnPaint(), который я использую:

void CEasyEdit::OnPaint()
{
    // I generate all requiered objects.
    CPaintDC dc(this);
    CRect ClientRect;
    GetClientRect(&ClientRect);

    // I define which colors I want to use.
    SetDefaultColors();

    // I paint the background and its borders.
    CBrush brush(m_clrBack);
    dc.FillRect(ClientRect, &brush);
    CRect border_rect;
    this->GetClientRect(border_rect);
    border_rect.InflateRect(1, 1);
    dc.Draw3dRect(border_rect, m_clrBack, m_clrBack);
    border_rect.InflateRect(1, 1);
    dc.Draw3dRect(border_rect, m_clrBack, m_clrBack);

    // I redefine the size of the rect.
    CRect textRect(ClientRect);
    textRect.DeflateRect(4, 1);

    // I define the text to draw.
    CString text;
    GetWindowText(text);

    // If it displays a password, I change its characters.
    if (GetStyle() & ES_PASSWORD)
    {
        // I redefine the text to show.
        int lenght = text.GetLength();
        wchar_t f = '1060';
        text = "";
        for (int i = 0; i < lenght; i++) text.Append("\u0053");
    }

    // I draw the text.
    dc.SetTextColor(m_clrText);
    dc.SetBkColor(m_clrBack);   
    dc.SelectObject(GetFont());
    dc.DrawText(text, -1, textRect, GetStyle());
}

1 Ответ

2 голосов
/ 13 марта 2020

Я искал CEdit::GetPasswordChar и заметил, что там написано:

Если вы создаете элемент управления для редактирования в стиле ES_PASSWORD, DLL, которая поддерживает управление, определяет пароль по умолчанию символ . Манифест или метод InitCommonControlsEx определяет, какая DLL поддерживает элемент управления для редактирования. Если user32.dll поддерживает управление редактированием, пароль по умолчанию будет обозначен звездочкой ('*', U + 002A). Если comctl32.dll версии 6 поддерживает управление редактированием, по умолчанию используется символ ЧЕРНЫЙ КРУГ ('●', U + 25CF) . Для получения дополнительной информации о том, какая DLL и версия поддерживает общие элементы управления, см. Версии оболочки и общих элементов управления .

Тем не менее, почему вы не можете просто использовать CEdit::SetPasswordChar где указано:

Указывает символ, который будет отображаться вместо символа, введенного пользователем. Если ch равно 0, отображаются фактические символы, набранные пользователем.

...