描述:
原帖地址如下:http://topic.csdn.net/u/20110212/23/928ca23d-3ab4-40dc-83d8-ae85c69d6340.html
在贴代码前,还是赘述下吧。我想做一个ocx,在这个OCX中内置入一个RichEdit控件。现在给这个ocx加入一个方法,当外界调用这个方法时:将弹出一个查找对话框,在对话框中输入要查找的内容,点击对话框上的按钮,将会在richedit的内容中查找。
经综合各路高手的意见,现在修改如下:
根据8楼的提示,以及模态对话框相当于单线程,非模态相当于多线程的提示,修改如下:
在查找对话框里新添加了一个成员变量,CRichEditCtrl* m_richedit;查找对话框中的查找按钮的消息响应函数如下:
void CFindDlg::OnFind() {
TCHAR FindBuffer[50];
DWORD uFlags =0;
FINDTEXTEX findtext;
GetDlgItemText(IDC_EDITFIND,FindBuffer,sizeof(FindBuffer));
//IDC_EDITFIND:为输入待查找内容的文本框
m_richedit->SendMessage(EM_EXGETSEL,0,(LPARAM)&findtext.chrg);
uFlags|=FR_DOWN;
if(findtext.chrg.cpMin != findtext.chrg.cpMax)
{
findtext.chrg.cpMin = findtext.chrg.cpMax;
findtext.chrg.cpMax = -1;}
findtext.lpstrText=FindBuffer;
long lResult = m_richedit->FindText(uFlags, &findtext);
if(lResult != -1)
m_richedit->SendMessage(EM_EXSETSEL,0,(LPARAM)&findtext.chrgText);
}
在ocx中的接口EditFind()修改如下:void CTestxCtrl::EditFind()
{
CFindDlg *FindDlg =new CFindDlg(this);
FindDlg->SetRtf(&m_rtf);//m_rtf为ocx中创建的richedit变量,将其指针传过去
FindDlg->DoModal();
delete FindDlg;
FindDlg=NULL;
return;
}
以上编译通过,不知为何还是不能查找的功能效果,在最后关闭查找对话框时,还出现以下错误提示:
0x73d311a3 指令引用的"0x00000004"内存,该内存不能为"read"
继续请高高手诊断!