需要写一个文本框控件,能够实现输入密码及显示灰色的提示信息(想达到CEdit的SetCueBanner的效果,但我在XP系统上直接用SetCueBanner无效),因考虑其扩展性,想让其支持多行输入(即不仅限于密码输入还可以用于处理普通文本),现遇到的问题如下:1. 当输入密码时,如何实现将内容显示为*的效果?是否需要响应WM_KEYDOWN,然后判断是否是可显示字符及退格等,并作相应处理,若是字符,则保存其内容并显示*。请问有没有更好的方法?2. 如何让文本框显示多行?BOOL CPromptEdit::Create(
DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd,
UINT nID 
)
{
m_dwStyle = dwStyle;  // 重写Create函数,并将style保存到m_dwStyle
return CEdit::Create(dwStyle, rect, pParentWnd, nID);
}BOOL CPromptEdit::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class if (WM_KEYDOWN == pMsg->message)
{
if (13 == (CHAR)pMsg->wParam)
{
if (m_dwStyle & ES_MULTILINE)  //判断是否具有多行风格
{
CString str = _T("");
this->GetWindowText(str);
this->SetWindowText(str + _T("\r\n"));
}

                        return TRUE;
}
}
return CEdit::PreTranslateMessage(pMsg);
}但以上代码执行时,若输入回车,则仅是将光标移到文本框的行首,并不能实现多行输入,请问如何处理?3. 要以加粗或普通方式显示文字内容,该如何处理?请高手指点,谢谢~

解决方案 »

  1.   

     没看明白你的意思
    要想加粗,只能加粗整个编辑框,用SetFont即可
      

  2.   

    指定Style就行了,一般来说简单的密码框,只要CreateWindow时加入ES_PASSWORD分割就会显示*。或者给它发EEM_SETPASSWORDCHAR消息可以启用/禁用这种风格。
    对于多行显示,如果希望对话框接受回车输入,需要ES_WANTRETURN风格。
    而且如果你的对话框不够高的话,可能需要ES_AUTOHSCROLL,否则无法显示更多行时会拒绝换行。
      

  3.   


    是啊,我用以下代码,为什么显示的不是*? CPromptEdit *pEdit = new CPromptEdit;
    pEdit->Create(ES_MULTILINE | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER | ES_PASSWORD,
    CRect(10, 10, 400, 80), this, 2011);
    pEdit->SetPromptString("Enter your password here");
    pEdit->ShowWindow(SW_SHOW);
      

  4.   

    MSDN说明:ES_PASSWORD   Displays all characters as an asterisk (*) as they are typed into the edit control. An application can use the SetPasswordChar member function to change the character that is displayed.LZ可以尝试  SetPasswordChar 这个方法哦!
      

  5.   


    CPromptEdit *pEdit = new CPromptEdit;
        pEdit->Create(ES_MULTILINE | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER | ES_PASSWORD,
            CRect(10, 10, 400, 80), this, 2011);
        pEdit->SetPromptString("Enter your password here");
        pEdit->SetPasswordChar(_T('*'));
        pEdit->ShowWindow(SW_SHOW);
      

  6.   


    要想要编辑框显示密码符号‘*’,需要用编辑框控件的SetPasswordChar方法设置字符密码