資源描述:
《Richedit控件》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在教育資源-天天文庫。
1、關于windowless的richedit:1.看了一個介紹:個人猜測就是首先要寫一個類,來實現(xiàn)ITextHost這個接口,同個這個類來把宿主窗口和無窗口的richedit聯(lián)系起來。然后調(diào)用CreateTextServices,傳入ITextHost指針,返回IUnknown指針。通過這個IUnown接口,可以查詢到ITextServices和ITextDocument接口。最后通過這兩個接口完成絕大多數(shù)功能。一般來說是無法直接通過調(diào)用接口的方式來獲取無窗口RichEdit所處的HostWindow的,但
2、是可以利用ITextHost的一些函數(shù)配合Win32API來得到HostWindow的窗口句柄比如:ITextHost*pHost;//此處可以通過ITextServices的QueryInterface得到ITextHost的指針然后調(diào)用pHost->TxSetCapture(TRUE)讓窗口捕獲鼠標,巧妙地地方就在這里,這時候你只要調(diào)用普通的Win32API:GetCapture()就可以得到HostWindow的窗口句柄了。注意獲取完窗口句柄后要調(diào)用TxSetCapture(FALSE)釋放鼠標。*
3、#include"textserv.h"#defineFValidCF(_pcf)((_pcf)->cbSize==sizeof(CHARFORMAT))#defineFValidPF(_ppf)((_ppf)->cbSize==sizeof(PARAFORMAT))typedefvoid(*PNOTIFY_CALL)(intiNotify);#defineHOST_BORDER5#defineLY_PER_INCH1440EXTERN_CconstIIDIID_ITextEditControl;/***
4、***********************************************************************TXTEFFECT@enumDefinesdifferentbackgroundstylescontrol**************************************************************************/enumTXTEFFECT{TXTEFFECT_NONE=0,//@ememnospecialbackgorou
5、ndeffectTXTEFFECT_SUNKEN,//@ememdrawa"sunken3-D"look};interfaceITextEditControl:publicIUnknown{virtualLRESULTTxWindowProc(HWNDhwnd,UINTmsg,WPARAMwparam,LPARAMlparam)=0;};classMyTextHost:publicITextHost{public://-----------------------------//IUnknowninter
6、face//-----------------------------virtualHRESULT_stdcallQueryInterface(REFIIDriid,void**ppvObject);virtualULONG_stdcallAddRef(void);virtualULONG_stdcallRelease(void);//-----------------------------MyTextHost();~MyTextHost();BOOLInit(HWNDh_wnd,constCREATE
7、STRUCT*pcs,PNOTIFY_CALLp_nc);//@cmemberGettheDCforthehostHDCTxGetDC();//@cmemberReleasetheDCgottenfromthehostINTTxReleaseDC(HDChdc);//@cmemberShowthescrollbarBOOLTxShowScrollBar(INTfnBar,BOOLfShow);//@cmemberEnablethescrollbarBOOLTxEnableScrollBar(INTfuSB
8、Flags,INTfuArrowflags);//@cmemberSetthescrollrangeBOOLTxSetScrollRange(INTfnBar,LONGnMinPos,INTnMaxPos,BOOLfRedraw);//@cmemberSetthescrollpositionBOOLTxSetScrollPos(INTfnBar,INTnPos,BOOLfRedraw);//@cmemberInvalidate