資源描述:
《Richedit控件_計算機(jī)軟件及應(yīng)用_IT計算機(jī)_專業(yè)資料》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、關(guān)于windowless白勺richedit:1?看了一個介紹:個人猜測就是首先要寫一個類,來實(shí)現(xiàn)ITextHost這個接口,同個這個類來把宿主窗口和無窗口的richedit聯(lián)系起來。然后調(diào)用CreateTextServices,傳入ITextHost指針,返回IUnknown指針。通過這個lllnown接口,可以查詢到ITextServices和ITextDocument接口。最后通過這兩個接口完成絕大多數(shù)功能。一般來說是無法直接通過調(diào)用接口的方式來獲取無窗口RichEdit所處的HostWindow的,但是可以利用ITextHost的一些函數(shù)配合Win32API來得到HostWind
2、ow的窗口句柄比如:ITextHost*pHost;〃此處可以通過ITextServices的QueryInterface得到ITextHost的指針然后調(diào)用pHost->TxSetCapture(TRUE)i±窗口捕獲鼠標(biāo),巧妙地地方就在這里,這時候你只要調(diào)用普通的Win32API:GetCapture()就可以得到HostWindow的窗口句柄了。注意獲取完窗口句柄后要調(diào)用TxSetCapture(FALSE)#放鼠標(biāo)。*#include"textserv.h"#defineFValidCF(_pcf)((_pcf)->cbSize==sizeof(CHARFORMAT))#defi
3、neFValidPF(_ppf)((_ppf)->cbSize==sizeof(PARAFORMAT))typedefvoid(*PNOTIFY_CALL)(intiNotify);#defineHOST_BORDER5#defineLY_PER_INCH1440EXTERNCconstIIDIIDITextEditControl;/***************************************************TXTEFFECT@enumDefinesdifferentbackgroundstylescontrolenumTXTEFFECT{TXTEFFECT_N
4、ONE=0,TXTEFFECT_SUNKEN,?Me************************************************************************///@ememnospecialbackgoroundeffect//@ememdrawa"sunkenDnlook};interfaceITextEditControl:publiclUnknownvirtualLRESULTTxWindowProc(HWNDhwnd,UINTmsg,WPARAMwparam,LPARAMIparam)=0;};classMyTextHost:publicI
5、TextHost{public:////lUnknowninterface//virtualHRESULT_stdcallQuerylnterface(REFIIDriid,void**ppvObject);virtualULONG_stdcallAddRef(void);virtualULONG_stdcallRelease(void);//MyTextHostf);~MyTextHost();BOOLlnit(HWNDh_wnd,constCREATESTRUCT*pcs,PNOTIFY_CALLp_nc);//@cmemberGettheDCforthehostHDCTxGetDC
6、();//@cmemberReleasetheDCgottenfromthehostINTTxReleaseDC(HDChdc);//@cmemberShowthescrollbarBOOLTxShowScrollBar(INTfnBar,BOOLfShow);//@cmemberEnablethescrollbarBOOLTxEnableScrollBar(INTfuSBFIags,INTfuArrowflags);//@cmemberSetthescrollrangeBOOLTxSetScrollRange(INTfnBar,LONGnMinPos,INTnMaxPos,BOOLfR
7、edraw);//@cmemberSetthescrollpositionBOOLTxSetScrollPos(INTfnBar,INTnPos,BOOLfRedraw);//@cmemberInvalidateRectvoidTxlnvalidateRect(LPCRECTpre,BOOLfMode);//@cmemberSendaWM_PAINTtothewindowvoidTxViewChange(BOOLfUpdate);/