|
// Handler.cpp : Implementation of CHandler
#include "stdafx.h"
#include "ObjectROTToken.h"
#include "NotepadHandler.h"
#include "Handler.h"
/////////////////////////////////////////////////////////////////////////////
// CHandler
STDMETHODIMP CHandler::RegisterWithROT()
{
CComPtr<IUnknown> spUnk;
HRESULT hr = QueryInterface( IID_IUnknown, (void**)&spUnk );
#ifdef _MONIKER
CComPtr<IRunningObjectTable> spTable;
hr = GetRunningObjectTable( 0, &spTable );
if ( SUCCEEDED(hr) )
{
CComPtr<IMoniker> spMoniker;
TCHAR szItemName[_MAX_PATH];
_tcscpy( szItemName, g_szROTRegToken );
hr = CreateItemMoniker( NULL, (CComBSTR)szItemName, &spMoniker );
if ( SUCCEEDED(hr) )
{
DWORD dwRegister;
CComPtr<IUnknown> spUnk;
hr = QueryInterface( IID_IUnknown, (void**)&spUnk );
if ( SUCCEEDED(hr) )
hr = spTable->Register( 1, spUnk, spMoniker, &dwRegister );
if ( SUCCEEDED(hr) )
m_dwRotId = dwRegister;
}
}
#else
if ( SUCCEEDED(hr) )
{
CLSID clsid;
CLSIDFromProgID( g_szProgID, &clsid );
hr = RegisterActiveObject( spUnk, clsid, ACTIVEOBJECT_WEAK, &m_dwRegister );
}
#endif
return hr;
}
STDMETHODIMP CHandler::UnregisterWithROT()
{
HRESULT hr = E_FAIL;
#ifdef _MONIKER
if ( 0 == m_dwRotId )
return E_FAIL;
CComPtr<IRunningObjectTable> spTable;
hr = GetRunningObjectTable( 0, &spTable );
if ( SUCCEEDED(hr) )
{
hr = spTable->Revoke( m_dwRotId );
m_dwRotId = 0;
}
#else
if ( 0 == m_dwRegister )
return E_FAIL;
hr = RevokeActiveObject( m_dwRegister, NULL );
#endif
return hr;
}
STDMETHODIMP CHandler::SetWnd(DWORD dwWnd)
{
m_hWnd = (HWND)dwWnd;
return S_OK;
}
STDMETHODIMP CHandler::SetText(BSTR bsText)
{
m_bsBuf += bsText;
CComBSTR cbsText( bsText );
if ( CComBSTR(_T(".")) == cbsText ||
CComBSTR(_T("!")) == cbsText ||
CComBSTR(_T("?")) == cbsText )
{
Fire_SentenceCompleted( m_bsBuf );
m_bsBuf.Empty();
}
return S_OK;
}
STDMETHODIMP CHandler::GetLastTypedCharSequence(BSTR *pbsText)
{
*pbsText = m_bsBuf;
m_bsBuf.Empty();
return S_OK;
}
STDMETHODIMP CHandler::DoMenuCommand(DWORD dwMenuId)
{
HRESULT hr = E_FAIL;
if ( 0 != m_hWnd )
{
SendMessage( m_hWnd, WM_COMMAND, dwMenuId, 0 );
hr = S_OK;
}
return hr;
}
STDMETHODIMP CHandler::AppendMenu()
{
HRESULT hr = E_FAIL;
if ( 0 != m_hWnd )
{
HMENU hMenu = GetMenu( m_hWnd );
HMENU hMenuLines = CreatePopupMenu();
::AppendMenu( hMenu, MF_STRING | MF_POPUP, (UINT)hMenuLines, _T("&My Menu Extension") );
::AppendMenu( hMenuLines, MF_STRING, ID_MENU_SAVE_AS, _T("Duplicate Save &As...") );
::AppendMenu( hMenuLines, MF_STRING, ID_MENU_FIND, _T("Duplicate &Find...") );
DrawMenuBar( m_hWnd );
hr = S_OK;
}
return hr;
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.