Unicode字符进入CEdit

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unicode字符进入CEdit相关的知识,希望对你有一定的参考价值。

我正在生成一个自定义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");

我不明白为什么控件没有显示正确的字符。它仅显示以下内容:<。我究竟做错了什么?

UPDATE

这里是我正在使用的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());
}
答案

我正在查找CEdit::GetPasswordChar,但我注意到它说:

如果您以CEdit::GetPasswordChar样式创建编辑控件,则DLL支持控件的控件确定默认密码字符。清单或ES_PASSWORD方法确定哪个DLL支持编辑控件。如果user32.dll支持编辑控件,默认密码字符为ASTERISK('*',U + 002A)。 如果comctl32.dll版本6支持编辑控件,默认字符为BLACK CIRCLE('●',U + 25CF)。有关更多信息哪个DLL和版本支持常用控件,请参见InitCommonControlsEx

那就是说,为什么你不能只在说明中使用InitCommonControlsEx

指定要代替字符显示的字符由用户键入。如果ch为0,则由用户键入的实际字符显示。

以上是关于Unicode字符进入CEdit的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在不使用 /UNICODE 编译的情况下使用 MFC 的 CEdit 函数“ShowBalloonTip”?

在 CEdit 控件中显示省略号

如何修改CEdit控件的上下文菜单?

在 MFC 中,当 CEdit 控件达到最大字符时,退格不起作用

MFC的CEdit多于1024个字符自动换行

Node.js与HTTP响应主体的unicode问题