#ifndef _PROTO_RICHEDIT_HPP_ #define _PROTO_RICHEDIT_HPP_ #ifndef _COMMON_CONTROL_HPP_ #include #endif #ifndef _COMMON_RICHEDIT_HPP_ #include #endif #ifndef _COMMON_FONT_HPP_ #include #endif #ifndef _PROTO_CHARFORMAT_HPP_ #include #endif class RichEditControl : public Control { public: RichEditControl(void); RichEditControl(HWND hControlWnd,BOOL destroyWindow=TRUE); virtual ~RichEditControl(); BOOL setTextColor(RGBColor textColor); BOOL setBkGndColor(RGBColor bkGndColor); BOOL wantReturn(BOOL wantReturn); BOOL setFont(const Font &someFont); BOOL setCharFormat(const String faceName,int charHeight); BOOL limitText(WORD cchMax); BOOL createControl(Window &parentWnd,const Rect &initRect,UINT controlID); private: void loadLibrary(void); void freeLibrary(void); void getLogPixelsy(void); int mLogPixelsy; HINSTANCE mhLibInst; }; inline RichEditControl::RichEditControl(void) : mhLibInst(0) { loadLibrary(); getLogPixelsy(); } inline RichEditControl::RichEditControl(HWND hControlWnd,BOOL destroyWindow) : Control(hControlWnd,destroyWindow), mhLibInst(0) { loadLibrary(); getLogPixelsy(); } inline RichEditControl::~RichEditControl() { freeLibrary(); } inline BOOL RichEditControl::createControl(Window &parentWnd,const Rect &initRect,UINT controlID) { Control::createControl(WS_EX_CLIENTEDGE,"RICHEDIT","",WS_VISIBLE|ES_MULTILINE|ES_SUNKEN|ES_SAVESEL|ES_AUTOHSCROLL|ES_AUTOVSCROLL|WS_VSCROLL,initRect,parentWnd,controlID); return isValid(); } inline void RichEditControl::loadLibrary(void) { freeLibrary(); mhLibInst=::LoadLibrary("RICHED32.DLL"); } inline void RichEditControl::freeLibrary(void) { if(!mhLibInst)return; ::FreeLibrary(mhLibInst); } inline BOOL RichEditControl::setTextColor(RGBColor textColor) { if(!isValid())return FALSE; CharFormat charFormat; sendMessage(EM_GETCHARFORMAT,0,(LPARAM)(LPSTR)&((CHARFORMAT&)charFormat)); charFormat.mask(CharFormat::MaskColor); charFormat.effects(0); charFormat.textColor(textColor); sendMessage(EM_SETCHARFORMAT,SCF_ALL,(LPARAM)(LPSTR)&((CHARFORMAT&)charFormat)); return TRUE; } #include inline BOOL RichEditControl::setFont(const Font &someFont) { if(!isValid())return FALSE; CharFormat charFormat; sendMessage(EM_GETCHARFORMAT,0,(LPARAM)(LPSTR)&((CHARFORMAT&)charFormat)); charFormat.mask(CharFormat::MaskCharSet|CharFormat::MaskFace|CharFormat::MaskSize); charFormat.effects(0); charFormat.charSet(someFont.charSet()); charFormat.yHeight(-(((int)someFont.sizeFont()*mLogPixelsy)/72)); // charFormat.yHeight(-((50*mLogPixelsy)/72)); // charFormat.yHeight(200); charFormat.pitchAndFamily(someFont.pitchAndFamily()); charFormat.faceName(someFont.fontStyle()); sendMessage(EM_SETCHARFORMAT,SCF_ALL,(LPARAM)(LPSTR)&((CHARFORMAT&)charFormat)); return TRUE; } inline BOOL RichEditControl::setCharFormat(const String faceName,int charHeight) { if(!isValid())return FALSE; CharFormat charFormat; charFormat.mask(CharFormat::MaskCharSet|CharFormat::MaskFace|CharFormat::MaskSize); charFormat.effects(0); charFormat.charSet(0); charFormat.yHeight(charHeight); charFormat.faceName(faceName); sendMessage(EM_SETCHARFORMAT,SCF_ALL,(LPARAM)(LPSTR)&((CHARFORMAT&)charFormat)); return TRUE; } inline BOOL RichEditControl::setBkGndColor(RGBColor bkGndColor) { if(!isValid())return FALSE; sendMessage(EM_SETBKGNDCOLOR,0,(COLORREF)bkGndColor); return TRUE; } inline BOOL RichEditControl::limitText(WORD cchMax) { if(!isValid())return FALSE; sendMessage(EM_LIMITTEXT,(WPARAM)cchMax,0L); return TRUE; } inline BOOL RichEditControl::wantReturn(BOOL wantReturn) { if(!isValid())return FALSE; sendMessage(EM_SETOPTIONS,ECOOP_OR,ECO_WANTRETURN); return TRUE; } inline void RichEditControl::getLogPixelsy(void) { PureDevice screenDevice; screenDevice.screenDevice(); mLogPixelsy=::GetDeviceCaps(screenDevice,LOGPIXELSY); } #endif