📄 host.cpp
字号:
*
* @mfunc
* Create new shape for Text Host's caret
*
* @rdesc
* TRUE on success, FALSE otherwise.
*
* @comm
* This method is only valid when the control is in-place active;
* calls while inactive may fail.
*/
BOOL CTxtWinHost::TxCreateCaret(
HBITMAP hbmp, //@parm Handle of bitmap for caret shape
INT xWidth, //@parm Caret width
INT yHeight ) //@parm Caret height
{
TRACEBEGIN(TRCSUBSYSHOST, TRCSCOPEEXTERN, "CTxtWinHost::TxCreateCaret");
Assert(_hwnd);
return ::CreateCaret (_hwnd, hbmp, xWidth, yHeight);
}
/*
* CTxtWinHost::TxShowCaret (fShow)
*
* @mfunc
* Make caret visible/invisible at caret position in Text Host window.
*
* @rdesc
* TRUE - call succeeded <nl>
* FALSE - call failed <nl>
*
* @comm
* This method is only valid when the control is in-place active;
* calls while inactive may fail.
*/
BOOL CTxtWinHost::TxShowCaret(
BOOL fShow ) //@parm Flag whether caret is visible
{
TRACEBEGIN(TRCSUBSYSHOST, TRCSCOPEEXTERN, "CTxtWinHost::TxShowCaret");
return fShow ? ::ShowCaret(_hwnd) : ::HideCaret(_hwnd);
}
/*
* CTxtWinHost::TxSetCaretPos (x, y)
*
* @mfunc
* Move caret position to specified coordinates in Text Host window.
*
* @rdesc
* TRUE - call succeeded <nl>
* FALSE - call failed <nl>
*
* @comm
* This method is only valid when the control is in-place active;
* calls while inactive may fail.
*/
BOOL CTxtWinHost::TxSetCaretPos(
INT x, //@parm Horizontal position (in client coordinates)
INT y ) //@parm Vertical position (in client coordinates)
{
TRACEBEGIN(TRCSUBSYSHOST, TRCSCOPEEXTERN, "CTxtWinHost::TxSetCaretPos");
return ::SetCaretPos(x, y);
}
/*
* CTxtWinHost::TxSetTimer (idTimer, uTimeout)
*
* @mfunc
* Request Text Host to creates a timer with specified time out.
*
* @rdesc
* TRUE - call succeeded <nl>
* FALSE - call failed <nl>
*/
BOOL CTxtWinHost::TxSetTimer(
UINT idTimer, //@parm Timer identifier
UINT uTimeout ) //@parm Timeout in msec
{
TRACEBEGIN(TRCSUBSYSHOST, TRCSCOPEEXTERN, "CTxtWinHost::TxSetTimer");
Assert(_hwnd);
return ::SetTimer(_hwnd, idTimer, uTimeout, NULL);
}
/*
* CTxtWinHost::TxKillTimer (idTimer)
*
* @mfunc
* Destroy specified timer
*
* @rdesc
* TRUE - call succeeded <nl>
* FALSE - call failed <nl>
*
* @comm
* This method may be called at any time irrespective of active versus
* inactive state.
*/
void CTxtWinHost::TxKillTimer(
UINT idTimer ) //@parm id of timer
{
TRACEBEGIN(TRCSUBSYSHOST, TRCSCOPEEXTERN, "CTxtWinHost::TxKillTimer");
Assert(_hwnd);
::KillTimer(_hwnd, idTimer);
}
/*
* CTxtWinHost::TxScrollWindowEx (dx, dy, lprcScroll, lprcClip, hrgnUpdate,
* lprcUpdate, fuScroll)
* @mfunc
* Request Text Host to scroll the content of the specified client area
*
* @comm
* This method is only valid when the control is in-place active;
* calls while inactive may fail.
*/
void CTxtWinHost::TxScrollWindowEx (
INT dx, //@parm Amount of horizontal scrolling
INT dy, //@parm Amount of vertical scrolling
LPCRECT lprcScroll, //@parm Scroll rectangle
LPCRECT lprcClip, //@parm Clip rectangle
HRGN hrgnUpdate, //@parm Handle of update region
LPRECT lprcUpdate, //@parm Update rectangle
UINT fuScroll ) //@parm Scrolling flags
{
TRACEBEGIN(TRCSUBSYSHOST, TRCSCOPEEXTERN, "CTxtWinHost::TxScrollWindowEx");
Assert(_hwnd);
::ScrollWindowEx(_hwnd, dx, dy, lprcScroll, lprcClip, hrgnUpdate, lprcUpdate, fuScroll);
}
/*
* CTxtWinHost::TxSetCapture (fCapture)
*
* @mfunc
* Set mouse capture in Text Host's window.
*
* @comm
* This method is only valid when the control is in-place active;
* calls while inactive may do nothing.
*/
void CTxtWinHost::TxSetCapture(
BOOL fCapture ) //@parm Whether to get or release capture
{
TRACEBEGIN(TRCSUBSYSHOST, TRCSCOPEEXTERN, "CTxtWinHost::TxSetCapture");
Assert(_hwnd);
if (fCapture)
::SetCapture(_hwnd);
else
::ReleaseCapture();
}
/*
* CTxtWinHost::TxSetFocus ()
*
* @mfunc
* Set focus in text host window.
*
* @comm
* This method is only valid when the control is in-place active;
* calls while inactive may fail.
*/
void CTxtWinHost::TxSetFocus()
{
TRACEBEGIN(TRCSUBSYSHOST, TRCSCOPEEXTERN, "CTxtWinHost::TxSetFocus");
Assert(_hwnd);
::SetFocus(_hwnd);
}
/*
* CTxtWinHost::TxSetCursor (hcur, fText)
*
* @mfunc
* Establish a new cursor shape in the Text Host's window.
*
* @comm
* This method may be called at any time, irrespective of
* active vs. inactive state.
*
* ITextHost::TxSetCursor should be called back by the Text Services
* to actually set the mouse cursor. If the fText parameter is TRUE,
* Text Services is trying to set the "text" cursor (cursor over text
* that is not selected, currently an IBEAM). In that case, the host
* can set it to whatever the control MousePointer property is. This is
* required by VB compatibility since, via the MousePointer property,
* the VB programmer has control over the shape of the mouse cursor,
* whenever it would normally be set to an IBEAM.
*/
void CTxtWinHost::TxSetCursor(
HCURSOR hcur, //@parm Handle to cursor
BOOL fText ) //@parm Indicates caller wants to set text cursor
// (IBeam) if true.
{
TRACEBEGIN(TRCSUBSYSHOST, TRCSCOPEEXTERN, "CTxtWinHost::TxSetCursor");
::SetCursor(hcur);
}
/*
* CTxtWinHost::TxScreenToClient (lppt)
*
* @mfunc
* Convert screen coordinates to Text Host window coordinates.
*
* @rdesc
* TRUE - call succeeded <nl>
* FALSE - call failed <nl>
*/
BOOL CTxtWinHost::TxScreenToClient(
LPPOINT lppt ) //@parm Coordinates for point
{
TRACEBEGIN(TRCSUBSYSHOST, TRCSCOPEEXTERN, "CTxtWinHost::TxScreenToClient");
Assert(_hwnd);
return ::ScreenToClient(_hwnd, lppt);
}
/*
* CTxtWinHost::TxClientToScreen (lppt)
*
* @mfunc
* Convert Text Host coordinates to screen coordinates
*
* @rdesc
* TRUE - call succeeded <nl>
* FALSE - call failed <nl>
*
* @comm
* This call is valid at any time, although it is allowed to
* fail. In general, if text services has coordinates it needs
* to translate from client coordinates (e.g. for TOM's
* PointFromRange method) the text services will actually be
* visible.
*
* However, if no conversion is possible, then the method will fail.
*/
BOOL CTxtWinHost::TxClientToScreen(
LPPOINT lppt ) //@parm Client coordinates to convert.
{
TRACEBEGIN(TRCSUBSYSHOST, TRCSCOPEEXTERN, "CTxtWinHost::TxClientToScreen");
Assert(_hwnd);
return ::ClientToScreen(_hwnd, lppt);
}
/*
* CTxtWinHost::TxActivate (plOldState)
*
* @mfunc
* Notify Text Host that control is active
*
* @rdesc
* S_OK - call succeeded. <nl>
* E_FAIL - activation is not possible at this time
*
* @comm
* It is legal for the host to refuse an activation request;
* the control may be minimized and thus invisible, for instance.
*
* The caller should be able to gracefully handle failure to activate.
*
* Calling this method more than once does not cumulate; only
* once TxDeactivate call is necessary to deactive.
*
* The callee will will in <p plOldState> with an arbitrary
* value. The caller (Text Services) should hang onto this
* handle and return it in a subsequent call to TxDeactivate.
*/
HRESULT CTxtWinHost::TxActivate(
LONG *plOldState ) //@parm Where to put previous activation state
{
TRACEBEGIN(TRCSUBSYSHOST, TRCSCOPEEXTERN, "CTxtWinHost::TxActivate");
return S_OK;
}
/*
* CTxtWinHost::TxDeactivate (lNewState)
*
* @mfunc
* Notify Text Host that control is now inactive
*
* @rdesc
* S_OK - call succeeded. <nl>
* E_FAIL <nl>
*
* @comm
* Calling this method more than once does not cumulate
*/
HRESULT CTxtWinHost::TxDeactivate(
LONG lNewState ) //@parm New state (typically value returned by
// TxActivate
{
TRACEBEGIN(TRCSUBSYSHOST, TRCSCOPEEXTERN, "CTxtWinHost::TxDeactivate");
return S_OK;
}
/*
* CTxtWinHost::TxGetClientRect (prc)
*
* @mfunc
* Retrive client coordinates of Text Host's client area.
*
* @rdesc
* HRESULT = (success) ? S_OK : E_FAIL
*/
HRESULT CTxtWinHost::TxGetClientRect(
LPRECT prc ) //@parm Where to put client coordinates
{
TRACEBEGIN(TRCSUBSYSHOST, TRCSCOPEEXTERN, "CTxtWinHost::TxGetClientRect");
Assert(_hwnd && prc);
return ::GetClientRect(_hwnd, prc) ? S_OK : E_FAIL;
}
/*
* CTxtWinHost::TxGetViewInset (prc)
*
* @mfunc
* Get inset for Text Host window. Inset is the "white space"
* around text.
*
* @rdesc
* HRESULT = NOERROR
*
* @comm
* The Inset rectangle is not strictly a rectangle. The top, bottom,
* left, and right fields of the rect structure indicate how far in
* each direction drawing should be inset. Inset sizes are in client
* coordinates.
*/
HRESULT CTxtWinHost::TxGetViewInset(
LPRECT prc ) //@parm Where to put inset rectangle
{
TRACEBEGIN(TRCSUBSYSHOST, TRCSCOPEEXTERN, "CTxtWinHost::TxGetViewInset");
Assert(prc);
*prc = _rcViewInset;
return NOERROR;
}
/*
* CTxtWinHost::TxGetCharFormat (ppCF)
*
* @mfunc
* Get Text Host's default character format
*
* @rdesc
* HRESULT = E_NOTIMPL (not needed in simple Windows host, since text
* services provides desired default)
*
* @comm
* The callee retains ownwership of the charformat returned. However,
* the pointer returned must remain valid until the callee notifies
* Text Services via OnTxPropertyBitsChange that the default character
* format has changed.
*/
HRESULT CTxtWinHost::TxGetCharFormat(
const CHARFORMAT **ppCF) //@parm Where to put ptr to default
// character format
{
TRACEBEGIN(TRCSUBSYSHOST, TRCSCOPEEXTERN, "CTxtWinHost::TxGetCharFormat");
return E_NOTIMPL;
}
/*
* CTxtWinHost::TxGetParaFormat (ppPF)
*
* @mfunc
* Get Text Host default paragraph format
*
* @rdesc
* HRESULT = E_NOTIMPL (not needed in simple Windows host, since text
* services provides desired default)
*
* @comm
* The callee retains ownwership of the charformat returned. However,
* the pointer returned must remain valid until the callee notifies
* Text Services via OnTxPropertyBitsChange that the default paragraph
* format has changed.
*/
HRESULT CTxtWinHost::TxGetParaFormat(
const PARAFORMAT **ppPF) //@parm Where to put ptr to default
// paragraph format
{
TRACEBEGIN(TRCSUBSYSHOST, TRCSCOPEEXTERN, "CTxtWinHost::TxGetParaFormat");
return E_NOTIMPL;
}
/*
* CTxtWinHost::TxGetSysColor (nIndex)
*
* @mfunc
* Get specified color identifer from Text Host.
*
* @rdesc
* Color identifier
*
* @comm
* Note that the color returned may be *different* than the
* color that would be returned from a call to GetSysColor.
* This allows hosts to override default system behavior.
*
* Needless to say, hosts should be very careful about overriding
* normal system behavior as it could result in inconsistent UI
* (particularly with respect to Accessibility options).
*/
COLORREF CTxtWinHost::TxGetSysColor(
int nIndex) //@parm Color to get, same parameter as
// GetSysColor Win32 API
{
TRACEBEGIN(TRCSUBSYSHOST, TRCSCOPEEXTERN, "CTxtWinHost::TxGetSysColor");
if (!_fDisabled
|| ((nIndex != COLOR_WINDOW) && (nIndex != COLOR_WINDOWTEXT)))
{
// This window is not disabled or the color is not interesting
// in the disabled case.
return (nIndex == COLOR_WINDOW && _fNotSysBkgnd)
? _crBackground : GetSysColor(nIndex);
}
// Disabled case
if (COLOR_WINDOWTEXT == nIndex)
{
// Color of text for disabled window
return GetSysColor(COLOR_GRAYTEXT);
}
// Background color for disabled window
return GetSysColor(COLOR_3DFACE);
}
/*
* CTxtWinHost::TxGetBackStyle (pstyle)
*
* @mfunc
* Get Text Host background style.
*
* @rdesc
* HRESULT = S_OK
*
* @xref <e TXTBACKSTYLE>
*/
HRESULT CTxtWinHost::TxGetBackStyle(
TXTBACKSTYLE *pstyle) //@parm Where to put background style
{
TRACEBEGIN(TRCSUBSYSHOST, TRCSCOPEEXTERN, "CTxtWinHost::TxGetBackStyle");
*pstyle = (_dwExStyle & WS_EX_TRANSPARENT)
? TXTBACK_TRANSPARENT : TXTBACK_OPAQUE;
return NOERROR;
}
/*
* CTxtWinHost::TxGetMaxLength (pLength)
*
* @mfunc
* Get Text Host's maximum allowed length.
*
* @rdesc
* HRESULT = S_OK
*
* @comm
* This method parallels the EM_LIMITTEXT message.
* If INFINITE (0xFFFFFFFF) is returned, then text services
* will use as much memory as needed to store any given text.
*
* If the limit returned is less than the number of characters
* currently in the text engine, no data is lost. Instead,
* no edits will be allowed to the text *other* than deletion
* until the text is reduced to below the limit.
*/
HRESULT CTxtWinHost::TxGetMaxLength(
DWORD *pLength) //@parm Maximum allowed length, in number of
// characters
{
TRACEBEGIN(TRCSUBSYSHOST, TRCSCOPEEXTERN, "CTxtWinHost::TxGetMaxLength");
AssertSz(FALSE, "CTxtWinHost::TxGetMaxLength why is this being called?");
return NOERROR;
}
/*
* CTxtWinHost::TxGetScrollBars (pdwScrollBar)
*
* @mfunc
* Get Text Host's scroll bars supported.
*
* @rdesc
* HRESULT = S_OK
*
* @comm
* <p pdwScrollBar> is filled with a boolean combination of the
* window styles related to scroll bars. Specifically, these are:
*
* WS_VSCROLL <nl>
* WS_HSCROLL <nl>
* ES_AUTOVSCROLL <nl>
* ES_AUTOHSCROLL <nl>
* ES_DISABLENOSCROLL <nl>
*/
HRESULT CTxtWinHost::TxGetScrollBars(
DWORD *pdwScrollBar) //@parm Where to put scrollbar information
{
TRACEBEGIN(TRCSUBSYSHOST, TRCSCOPEEXT
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -