#include #include #include #include #include #include RichEditControl::RichEditControl(void) : mhLibInst(0) { loadLibrary(); getLogPixelsy(); } RichEditControl::RichEditControl(HWND hControlWnd,BOOL destroyWindow) : Control(hControlWnd,destroyWindow), mhLibInst(0) { loadLibrary(); getLogPixelsy(); } RichEditControl::~RichEditControl() { freeLibrary(); } BOOL RichEditControl::createControl(GUIWindow &parentWnd,const Rect &initRect,UINT controlID,UINT styles) { Control::createControl(WS_EX_CLIENTEDGE,"RICHEDIT","",WS_VISIBLE|WS_CLIPCHILDREN|WS_CLIPSIBLINGS|ES_MULTILINE|ES_SUNKEN|ES_SAVESEL|ES_AUTOHSCROLL|ES_AUTOVSCROLL|styles,initRect,parentWnd,controlID); if(!isValid())return FALSE; return isValid(); } void RichEditControl::loadLibrary(void) { freeLibrary(); mhLibInst=::LoadLibrary("RICHED32.DLL"); } void RichEditControl::freeLibrary(void) { if(!mhLibInst)return; ::FreeLibrary(mhLibInst); } BOOL RichEditControl::setBkGndColor(const RGBColor &bkGndColor)const { if(!isValid())return FALSE; sendMessage(EM_SETBKGNDCOLOR,0,(COLORREF)bkGndColor); return TRUE; } BOOL RichEditControl::limitText(DWORD cchMax)const { if(!isValid())return FALSE; sendMessage(EM_EXLIMITTEXT,0,(LPARAM)cchMax?cchMax:MaxText); return TRUE; } BOOL RichEditControl::findText(FindTextEx &findTextEx,BOOL matchCase,BOOL wholeWord) { if(!isValid())return FALSE; if(-1==sendMessage(EM_FINDTEXTEX,0,(LPARAM)&(findTextEx.findTextEx())))return FALSE; sendMessage(EM_SETSEL,0,0); setFocus(); scrollLine(lineFromCharPos(findTextEx.foundRange().posMin())); // getCaretPosition() sendMessage(EM_SETSEL,findTextEx.foundRange().posMin(),findTextEx.foundRange().posMax()); return TRUE; } BOOL RichEditControl::setReadOnly(BOOL isReadOnly)const { if(!isValid())return FALSE; return sendMessage(EM_SETREADONLY,(WPARAM)isReadOnly,0L); } String RichEditControl::getLine(int lineNumber)const { String strControl; if(!isValid())return strControl; strControl.reserve(MaxLine); *((int*)(char*)strControl)=MaxLine; sendMessage(EM_GETLINE,(WPARAM)lineNumber,(LPARAM)(LPSTR)strControl); return strControl; } BOOL RichEditControl::getSelectedText(String &strText)const { LONG charCount; if(!isValid())return FALSE; strText.reserve(MaxText); charCount=sendMessage(EM_GETSELTEXT,(WPARAM)0,(LPARAM)(LPSTR)strText); return charCount?TRUE:FALSE; } BOOL RichEditControl::pasteSpecial(UINT cbFormat)const { if(!isValid())return FALSE; sendMessage(EM_PASTESPECIAL,(WPARAM)cbFormat,0); return TRUE; } BOOL RichEditControl::cutSelection(BOOL canUndo)const { return replaceSelection(String(),canUndo); } BOOL RichEditControl::replaceSelection(const String &strReplacementText,BOOL canUndo)const { if(!isValid())return FALSE; sendMessage(EM_REPLACESEL,(WPARAM)canUndo,strReplacementText.isNull()?(LPARAM)0:(LPARAM)(LPSTR)(String&)strReplacementText); return TRUE; } int RichEditControl::lineFromCharPos(int charPos) { if(!isValid())return 0; return sendMessage(EM_LINEFROMCHAR,(WPARAM)charPos,0); } BOOL RichEditControl::getLines(Block &strLines) { int lines(lineCount()); for(int lineIndex=0;lineIndex &codeLines)const { if(!codeLines.size())return; String strLine; for(int lineIndex=0;lineIndex