Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//
// mes.cpp
//
#include "private.h"
#include "mes.h"
//////////////////////////////////////////////////////////////////////////////
//
// CMouseSink
//
//////////////////////////////////////////////////////////////////////////////
//+---------------------------------------------------------------------------
//
// IUnknown
//
//----------------------------------------------------------------------------
STDAPI CMouseSink::QueryInterface(REFIID riid, void **ppvObj) { *ppvObj = NULL;
if (IsEqualIID(riid, IID_IUnknown) || IsEqualIID(riid, IID_ITfMouseSink)) { *ppvObj = SAFECAST(this, CMouseSink *); }
if (*ppvObj) { AddRef(); return S_OK; }
return E_NOINTERFACE; }
STDAPI_(ULONG) CMouseSink::AddRef() { return ++_cRef; }
STDAPI_(ULONG) CMouseSink::Release() { long cr;
cr = --_cRef; Assert(cr >= 0);
if (cr == 0) { delete this; }
return cr; }
//+---------------------------------------------------------------------------
//
// ctor
//
//----------------------------------------------------------------------------
CMouseSink::CMouseSink(MOUSECALLBACK pfnCallback, void *pv) { Dbg_MemSetThisName(TEXT("CMouseSink"));
_cRef = 1; _pfnCallback = pfnCallback; _pv = pv; Assert(_pic == NULL); }
//+---------------------------------------------------------------------------
//
// OnMouseEvent
//
//----------------------------------------------------------------------------
STDAPI CMouseSink::OnMouseEvent(ULONG uEdge, ULONG uQuadrant, DWORD dwBtnStatus, BOOL *pfEaten) { return _pfnCallback(uEdge, uQuadrant, dwBtnStatus, pfEaten, _pv); }
//+---------------------------------------------------------------------------
//
// CMouseSink::Advise
//
//----------------------------------------------------------------------------
HRESULT CMouseSink::_Advise(ITfRange *range, ITfContext *pic) { HRESULT hr; ITfMouseTracker *tracker = NULL;
Assert(_pic == NULL); hr = E_FAIL;
if (FAILED(pic->QueryInterface(IID_ITfMouseTracker, (void **)&tracker))) goto Exit;
if (FAILED(tracker->AdviseMouseSink(range, this, &_dwCookie))) goto Exit;
_pic = pic; _pic->AddRef();
hr = S_OK;
Exit: SafeRelease(tracker); return hr; }
//+---------------------------------------------------------------------------
//
// CMouseSink::Unadvise
//
//----------------------------------------------------------------------------
HRESULT CMouseSink::_Unadvise() { HRESULT hr; ITfMouseTracker *tracker = NULL;
hr = E_FAIL;
if (_pic == NULL) goto Exit;
if (FAILED(_pic->QueryInterface(IID_ITfMouseTracker, (void **)&tracker))) goto Exit;
if (FAILED(tracker->UnadviseMouseSink(_dwCookie))) goto Exit;
hr = S_OK;
Exit: SafeRelease(tracker); SafeReleaseClear(_pic); return hr; }
|