需要写一个文本框控件,能够实现输入密码及显示灰色的提示信息(想达到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. 要以加粗或普通方式显示文字内容,该如何处理?请高手指点,谢谢~
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. 要以加粗或普通方式显示文字内容,该如何处理?请高手指点,谢谢~
解决方案 »
- 问一个比较偏门的问题:根据PCI插槽识别显卡和显示器
- 关于TCP状态---TIME_WAIT的问题
- Microsoft Visual C++ 6.0 启动起来,不能进行任何操作,鼠标点击任何地方都报错,退出。
- mfc,改变静态文本框的大小
- 如何更改文件中一小段内容??
- 用ado方式打开access数据库出现的问题
- 请问CBitmap的BOOL LoadBitmap(LPCTSTR lpszResourceName)怎么用?
- 菜鸟问题:关于connect()??
- 求教:COM控件远程调用的问题
- 如何将设备状态写入内存?
- 如何对U盘进行保护?
- afx_msg void OnTest2();其中 afx_msg 是什么意思呢?什么作用?
要想加粗,只能加粗整个编辑框,用SetFont即可
对于多行显示,如果希望对话框接受回车输入,需要ES_WANTRETURN风格。
而且如果你的对话框不够高的话,可能需要ES_AUTOHSCROLL,否则无法显示更多行时会拒绝换行。
是啊,我用以下代码,为什么显示的不是*? 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);
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);
要想要编辑框显示密码符号‘*’,需要用编辑框控件的SetPasswordChar方法设置字符密码