win32(4)

来源:互联网 发布:疯狂java博客 编辑:程序博客网 时间:2024/04/30 20:43

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);
}
                                             
0 0