1.RichEditView单文档工程——实现查找第一个选中的字符串
(1)新建查找对话框
#include "DlgFind.h"
void CMainFrame::OnButtonFind()
{
// TODO: Add your command handler code here
CDlgFind *pDlg=new CDlgFind(this);
//pDlg->DoModal();
pDlg->Create(IDD_FIND_DIALOG,this);
//使对话框居中
pDlg->CenterWindow(this);
pDlg->ShowWindow(SW_SHOW);
}
(2)在编辑框中显示选中文本
class CTestDoc;//会报错,添加此声明
#include "TestView.h"
#include "MainFrm.h"
void CDlgFind::OnShowWindow(BOOL bShow, UINT nStatus)
{
CDialog::OnShowWindow(bShow, nStatus);
// TODO: Add your message handler code here
CEdit *pEdit=(CEdit *)GetDlgItem(IDC_WORD);
pEdit->SetFocus();
CMainFrame *pFrame=(CMainFrame*)AfxGetMainWnd();
CTestView *pView=(CTestView*)pFrame->GetActiveView();
CRichEditCtrl *pCtrl=&(pView->GetRichEditCtrl());
this->SetDlgItemText(IDC_WORD,pCtrl->GetSelText());
//编辑框内的内容设置为选中
pEdit->SetSel(0,-1);
}
(3)查找第一个匹配的文本
void CDlgFind::OnFind()
{
// TODO: Add your control notification handler code here
CString word;
GetDlgItemText(IDC_WORD,word);
CMainFrame *pFrame=(CMainFrame*)AfxGetMainWnd();
CTestView *pView=(CTestView*)pFrame->GetActiveView();
CRichEditCtrl *pCtrl=&(pView->GetRichEditCtrl());
FINDTEXTEX ft;
ft.chrg.cpMin = 0;
ft.chrg.cpMax = -1;
ft.lpstrText= (LPSTR) word.GetBuffer(word.GetLength());
long n = pCtrl->FindText(FR_MATCHCASE|FR_DOWN, &ft);
if (n != -1)
pCtrl->SetSel(ft.chrgText);
}
2.在RichEditView中写文本一、在文本末尾写文字
{
CString str;
int nTextLength;
CRichEditView *pView = GetView();
CRichEditCtrl &edit = pView->GetRichEditCtrl();
//要写的内容为ABCDEFG
str = "ABCDEFG";
//加入换行
str += " ";
//获得文字的长度
nTextLength = edit.GetWindowTextLength();
//将光标放在文本最末
edit.SetSel(nTextLength, nTextLength);
//写入文本
edit.ReplaceSel(str);
}
二、在光标后插入文本,可以使用CHARRANGE结构
{
CString str;
CHARRANGE crPos;
CRichEditView *pView = GetView();
CRichEditCtrl &edit = pView->GetRichEditCtrl();
//用CHARRANGE结构体获得选择的文本位置
edit.GetSel(crPos);
//要写的内容为12345
str = "12345";
//如果没有选中文本,就直接写在光标后
//如果选中了文本,就替代选中的文本
if (crPos.cpMin != crPos.cpMax)
{
edit.SetSel(crPos.cpMin, crPos.cpMax);
}
else
{
edit.SetSel(crPos.cpMax, crPos.cpMax);
}
edit.ReplaceSel(str);
}
三、全选文本
{
CRichEditView *pView = GetView();
CRichEditCtrl &edit = pView->GetRichEditCtrl();
edit.SetSel(0, -1);
}