MFC高级控件RichEdit的使用
- MFC高级控件RichEdit的使用
- MFC控件设置焦点,实现回车后编辑框内容清空,焦点停留在该编辑框内
MFC高级控件RichEdit的使用
RichEdit控件,可以设置编辑框内不同的行、不同的段落有不同的字体、颜色。
效果如下:
1、添加一个对话框,设置如下(下图上面的框是RichEdit2.0控件,下面的框是编辑框):
2、给上图这两个控件设置关联的成员变量(控件类型):
3、在类向导中添加对话框虚函数OnInitDialog
BOOL CMFCApplication1Dlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
DWORD dwOldStyle = m_redit.GetExStyle(); //默认包含透明属性
m_redit.ModifyStyleEx(dwOldStyle, WS_EX_CLIENTEDGE); //去除透明属性
//m_redit.SetBackgroundColor(TRUE, GetSysColor(COLOR_3DFACE));
m_redit.SetBackgroundColor(FALSE, RGB(30, 30, 30));
CHARFORMAT2 cf2;
//memset(&cf2, 0, sizeof(CHARFORMAT2));
cf2.cbSize = sizeof(CHARFORMAT2);
cf2.dwMask = CFM_FACE | CFM_SIZE | CFM_COLOR;
_tcscpy_s(cf2.szFaceName, _countof(cf2.szFaceName), _T("隶书"));
cf2.yHeight = 320;
cf2.crTextColor = 255; 设置默认字体颜色
//cf2.crTextColor = RGB(0, 255, 0); //也可以用RGB宏
cf2.dwEffects = CFE_AUTOCOLOR & 0xBFFFFFFF; //缺省为CFE_AUTOCOLOR 0x40000000
m_redit.SetDefaultCharFormat(cf2);
m_redit.SetWindowTextW(_T("---欢迎使用本软件---\r\n"));
m_redit.SetSel(-1, -1);
m_redit.ReplaceSel(_T("祝你聊天愉快\r\n"));
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
4、编写发送按钮处理函数
void CMFCApplication1Dlg::OnBnClickedOk()
{
//CRichEditCtrl使用大全http://www.cppblog.com/kyelin/archive/2010/11/03/132300.aspx
UpdateData(TRUE);
CString str;
COleDateTime time = COleDateTime::GetCurrentTime();
str.Format(_T("梦飞龙卷风<mfljf@qq.com> %d:%d:%d\r\n"), time.GetHour(), time.GetMinute(), time.GetSecond());
CHARFORMAT2 cf2;
cf2.cbSize = sizeof(CHARFORMAT2);
cf2.dwMask = CFM_FACE | CFM_SIZE | CFM_COLOR;
cf2.crTextColor = RGB(210, 115, 25);
cf2.yHeight = 160;
cf2.dwEffects = 0;
_tcscpy_s(cf2.szFaceName, _countof(cf2.szFaceName), _T("宋体"));
m_redit.SetSel(-1, -1);
//m_redit.SetSel(m_redit.GetTextLength(), -1);
//m_redit.SetDefaultCharFormat(cf2);
m_redit.SetSelectionCharFormat(cf2);
m_redit.ReplaceSel(str);
GetDlgItemText(IDC_EDT_INPUT, str);
cf2.dwMask |= CFM_UNDERLINE | CFM_BOLD | CFM_ITALIC;
cf2.dwEffects |= CFE_UNDERLINE | CFE_BOLD | CFE_ITALIC;
cf2.dwEffects &= 0xBFFFFFFF;
_tcscpy_s(cf2.szFaceName, _countof(cf2.szFaceName), _T("楷体"));
cf2.yHeight = 250;
cf2.crTextColor = RGB(190, 160, 250);
m_redit.SetSel(-1, -1);
//m_redit.SetSel(m_redit.GetTextLength(), -1);
m_redit.SetSelectionCharFormat(cf2);
m_redit.ReplaceSel(str + _T("\r\n"));
//cf2.dwEffects &= ~CFE_UNDERLINE;
m_edit.SetSel(0, -1);
m_edit.Clear();
UpdateData(FALSE);
m_edit.SetFocus();
/*CWnd* pWnd = GetDlgItem(IDC_EDT_INPUT);
HWND hWnd = pWnd->GetSafeHwnd();
::SetFocus(hWnd);*/
}
MFC控件设置焦点,实现回车后编辑框内容清空,焦点停留在该编辑框内
-
设置对话框控件的tab order。 按Ctrl+D即可看见。将需要被设置到焦点的控件的tab order设为1。
-
代码设置(实现回车后编辑框内容清空,焦点停留在该编辑框内):
m_edit.SetSel(0, -1);
m_edit.Clear();
UpdateData(FALSE);
m_edit.SetFocus();
- 其他代码设置方式
//方式一
myedit1.SetFocus(); //设置焦点
//myedit1是控件变量名
//方式而
CWnd* pWnd = GetDlgItem(IDC_EDIT1);//设置焦点
pWnd->SetFocus();
//方式三
CWnd* pWnd2 = GetDlgItem(IDC_EDIT2);
HWND hWnd = pWnd2->GetSafeHwnd();
::SetFocus(hWnd); //设置焦点
//全局函数
//返回值:若函数调用成功,则返回原先拥有键盘焦点的窗口句柄。若hWnd参数无效或窗口未与调用线程的消息队列相关,则返回值为NULL
- 其他参考
对话框的OnInitDialog返回FALSE。解释如下:(摘抄至msdn)
If OnInitDialog returns nonzero, Windows sets the input focus to the first control in the dialog box.
The application can return 0 only if it has explicitly set the input focus to one of the controls in the dialog box.
- 转载
用回车键替代TAB键传递焦点比较符合我们的输入习惯,在MFC中实现的大致不走如下:
1、建立一个基于对话框的MFC应用程序;
2、在对话框中添加若干编辑框和控件,按住ctrl+D键设置焦点顺序(例如你想编辑框IDC_EDIT1设置为第一个焦点,只需要第一个点这个编辑框即可,接下来的依次点就可以了);
3、将所有编辑框的属性中mutilline和want return设为true;
4、在dlg类中重载PreTranslateMessage函数,如下所示:
BOOL **Dlg::PreTranslateMessage(MSG pMsg)//传递焦点
{
// TODO: 在此添加专用代码和/或调用基类
if((pMsg->message == WM_KEYDOWN) && (VK_RETURN == (int) pMsg->wParam))
{
if(GetFocus()->GetDlgCtrlID() != IDOK)
{
pMsg->wParam = VK_TAB;
}
}
return CDialogEx::PreTranslateMessage(pMsg);
}
注意:1、IDOK为对话框中的缺省按钮ID,若对话框的缺省按钮已更改,则写相对应的缺省按钮的ID号;
2、此方法可以实现在编辑框之间的依次切换,当遇到第一个按钮控件时(一般设置为缺省按钮),按下回车键相当于执行鼠标点击该按钮的功能。
————————————————
版权声明:本文为CSDN博主「hswangjiajia」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hswangjiajia/article/details/12979379