|
|
//
// lbmenu.h
//
// Generic ITfTextEventSink object
//
#ifndef UTBMENU_H
#define UTBMENU_H
#include "ctfutb.h"
#include "lbmenu.h"
#include "cuimenu.h"
#include "ptrary.h"
#include "cresstr.h"
#include "utbacc.h"
#include "resource.h"
class CUTBLBarMenu; class CUIFWindow; class CUTBMenuItem;
//////////////////////////////////////////////////////////////////////////////
//
// CUTBMenuWnd
//
//////////////////////////////////////////////////////////////////////////////
class CUTBMenuWnd : public CTipbarAccItem, public CTipbarCoInitialize, public CUIFMenu { public:
CUTBMenuWnd(HINSTANCE hInst, DWORD dwWndStyle, DWORD dwMenuStyle) : CUIFMenu(hInst, dwWndStyle, dwMenuStyle) { }
virtual CUIFObject *Initialize( void );
BSTR GetAccName( void ) { return SysAllocString(CRStr(IDS_MENUWINDOW)); }
LONG GetAccRole( void ) { return ROLE_SYSTEM_WINDOW; }
void GetAccLocation( RECT *prc ) { GetRect(prc); }
void OnTimer(UINT uId); BOOL StartDoAccDefaultActionTimer(CUTBMenuItem *pItem); CTipbarAccessible *GetAccessible() {return _pTipbarAcc;}
void OnCreate(HWND hWnd); void OnDestroy(HWND hWnd); LRESULT OnGetObject( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); LRESULT OnShowWindow( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
private: CTipbarAccessible *_pTipbarAcc; int _nDoAccDefaultActionItemId; };
//////////////////////////////////////////////////////////////////////////////
//
// CUTBMenuItem
//
//////////////////////////////////////////////////////////////////////////////
class CUTBMenuItem : public CTipbarAccItem, public CUIFMenuItem { public: CUTBMenuItem(CUTBMenuWnd *pMenuWnd) : CUIFMenuItem(pMenuWnd) { _pMenuWnd = pMenuWnd; }
virtual ~CUTBMenuItem() { if (_hbmp) { DeleteObject(_hbmp); _hbmp = NULL; }
if (_hbmpMask) { DeleteObject(_hbmpMask); _hbmpMask = NULL; } }
BSTR GetAccName( void ) { return SysAllocString(_psz); }
LONG GetAccRole( void ) { if (IsSeparator() & TF_LBMENUF_SEPARATOR) return ROLE_SYSTEM_SEPARATOR;
return ROLE_SYSTEM_MENUITEM; }
void GetAccLocation( RECT *prc ) { GetRect(prc); ClientToScreen(_pMenuWnd->GetWnd(), (POINT *)&prc->left); ClientToScreen(_pMenuWnd->GetWnd(), (POINT *)&prc->right); }
//
// MSAA Support
//
BSTR GetAccDefaultAction() { return SysAllocString(CRStr(IDS_LEFTCLICK)); }
BOOL DoAccDefaultAction() { if (!_pMenuWnd) return FALSE;
_pMenuWnd->StartDoAccDefaultActionTimer(this); return TRUE; }
BOOL DoAccDefaultActionReal() { if (GetSub()) ShowSubPopup(); else { POINT pt = {0,0}; OnLButtonUp(pt); } return TRUE; }
private: CUTBMenuWnd *_pMenuWnd; };
//////////////////////////////////////////////////////////////////////////////
//
// ModalMenu
//
//////////////////////////////////////////////////////////////////////////////
class CModalMenu { public: CModalMenu() {} virtual ~CModalMenu() {}
void CancelMenu(); void PostKey(BOOL fUp, WPARAM wParam, LPARAM lParam); HWND GetWnd() { if (!_pCuiMenu) return NULL;
return _pCuiMenu->GetWnd(); }
protected: CUTBMenuItem *InsertItem(CUTBMenuWnd *pCuiMenu, int nId, int nIdStr) { CUTBMenuItem *pCuiItem = NULL;
if (!(pCuiItem = new CUTBMenuItem(pCuiMenu))) return NULL;
if (!pCuiItem->Initialize()) goto ErrExit;
if (!pCuiItem->Init(nId, CRStr(nIdStr))) goto ErrExit;
if (!pCuiMenu->InsertItem(pCuiItem)) { ErrExit: delete pCuiItem; return NULL; }
return pCuiItem; }
CUTBMenuWnd *_pCuiMenu; };
//////////////////////////////////////////////////////////////////////////////
//
// CUTBLBarMenuItem
//
//////////////////////////////////////////////////////////////////////////////
class CUTBLBarMenuItem : public CCicLibMenuItem { public: CUTBLBarMenuItem(CUTBLBarMenu *pUTBMenu) { _pUTBMenu = pUTBMenu; }
~CUTBLBarMenuItem() {}
BOOL InsertToUI(CUTBMenuWnd *pCuiMenu);
private: CUTBLBarMenu *_pUTBMenu; };
//////////////////////////////////////////////////////////////////////////////
//
// CUTBLBarMenu
//
//////////////////////////////////////////////////////////////////////////////
class CUTBLBarMenu : public CCicLibMenu, public CModalMenu { public: CUTBLBarMenu(HINSTANCE hInst); virtual ~CUTBLBarMenu();
UINT ShowPopup(CUIFWindow *pcuiWndParent, const POINT pt, const RECT *prcArea); CUTBMenuWnd *CreateMenuUI();
virtual CCicLibMenu *CreateSubMenu() { return new CUTBLBarMenu(_hInst); }
virtual CCicLibMenuItem *CreateMenuItem() { return new CUTBLBarMenuItem(this); }
CUTBMenuWnd *GetCuiMenu() {return _pCuiMenu;} private: HINSTANCE _hInst; };
#endif UTBMENU_H
|