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.

259 lines
5.5 KiB

  1. //
  2. // lbmenu.h
  3. //
  4. // Generic ITfTextEventSink object
  5. //
  6. #ifndef UTBMENU_H
  7. #define UTBMENU_H
  8. #include "ctfutb.h"
  9. #include "lbmenu.h"
  10. #include "cuimenu.h"
  11. #include "ptrary.h"
  12. #include "cresstr.h"
  13. #include "utbacc.h"
  14. #include "resource.h"
  15. class CUTBLBarMenu;
  16. class CUIFWindow;
  17. class CUTBMenuItem;
  18. //////////////////////////////////////////////////////////////////////////////
  19. //
  20. // CUTBMenuWnd
  21. //
  22. //////////////////////////////////////////////////////////////////////////////
  23. class CUTBMenuWnd : public CTipbarAccItem,
  24. public CTipbarCoInitialize,
  25. public CUIFMenu
  26. {
  27. public:
  28. CUTBMenuWnd(HINSTANCE hInst, DWORD dwWndStyle, DWORD dwMenuStyle) : CUIFMenu(hInst, dwWndStyle, dwMenuStyle)
  29. {
  30. }
  31. virtual CUIFObject *Initialize( void );
  32. BSTR GetAccName( void )
  33. {
  34. return SysAllocString(CRStr(IDS_MENUWINDOW));
  35. }
  36. LONG GetAccRole( void )
  37. {
  38. return ROLE_SYSTEM_WINDOW;
  39. }
  40. void GetAccLocation( RECT *prc )
  41. {
  42. GetRect(prc);
  43. }
  44. void OnTimer(UINT uId);
  45. BOOL StartDoAccDefaultActionTimer(CUTBMenuItem *pItem);
  46. CTipbarAccessible *GetAccessible() {return _pTipbarAcc;}
  47. void OnCreate(HWND hWnd);
  48. void OnDestroy(HWND hWnd);
  49. LRESULT OnGetObject( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
  50. LRESULT OnShowWindow( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
  51. private:
  52. CTipbarAccessible *_pTipbarAcc;
  53. int _nDoAccDefaultActionItemId;
  54. };
  55. //////////////////////////////////////////////////////////////////////////////
  56. //
  57. // CUTBMenuItem
  58. //
  59. //////////////////////////////////////////////////////////////////////////////
  60. class CUTBMenuItem : public CTipbarAccItem,
  61. public CUIFMenuItem
  62. {
  63. public:
  64. CUTBMenuItem(CUTBMenuWnd *pMenuWnd) : CUIFMenuItem(pMenuWnd)
  65. {
  66. _pMenuWnd = pMenuWnd;
  67. }
  68. virtual ~CUTBMenuItem()
  69. {
  70. if (_hbmp)
  71. {
  72. DeleteObject(_hbmp);
  73. _hbmp = NULL;
  74. }
  75. if (_hbmpMask)
  76. {
  77. DeleteObject(_hbmpMask);
  78. _hbmpMask = NULL;
  79. }
  80. }
  81. BSTR GetAccName( void )
  82. {
  83. return SysAllocString(_psz);
  84. }
  85. LONG GetAccRole( void )
  86. {
  87. if (IsSeparator() & TF_LBMENUF_SEPARATOR)
  88. return ROLE_SYSTEM_SEPARATOR;
  89. return ROLE_SYSTEM_MENUITEM;
  90. }
  91. void GetAccLocation( RECT *prc )
  92. {
  93. GetRect(prc);
  94. ClientToScreen(_pMenuWnd->GetWnd(), (POINT *)&prc->left);
  95. ClientToScreen(_pMenuWnd->GetWnd(), (POINT *)&prc->right);
  96. }
  97. //
  98. // MSAA Support
  99. //
  100. BSTR GetAccDefaultAction()
  101. {
  102. return SysAllocString(CRStr(IDS_LEFTCLICK));
  103. }
  104. BOOL DoAccDefaultAction()
  105. {
  106. if (!_pMenuWnd)
  107. return FALSE;
  108. _pMenuWnd->StartDoAccDefaultActionTimer(this);
  109. return TRUE;
  110. }
  111. BOOL DoAccDefaultActionReal()
  112. {
  113. if (GetSub())
  114. ShowSubPopup();
  115. else
  116. {
  117. POINT pt = {0,0};
  118. OnLButtonUp(pt);
  119. }
  120. return TRUE;
  121. }
  122. private:
  123. CUTBMenuWnd *_pMenuWnd;
  124. };
  125. //////////////////////////////////////////////////////////////////////////////
  126. //
  127. // ModalMenu
  128. //
  129. //////////////////////////////////////////////////////////////////////////////
  130. class CModalMenu
  131. {
  132. public:
  133. CModalMenu() {}
  134. virtual ~CModalMenu() {}
  135. void CancelMenu();
  136. void PostKey(BOOL fUp, WPARAM wParam, LPARAM lParam);
  137. HWND GetWnd()
  138. {
  139. if (!_pCuiMenu)
  140. return NULL;
  141. return _pCuiMenu->GetWnd();
  142. }
  143. protected:
  144. CUTBMenuItem *InsertItem(CUTBMenuWnd *pCuiMenu, int nId, int nIdStr)
  145. {
  146. CUTBMenuItem *pCuiItem = NULL;
  147. if (!(pCuiItem = new CUTBMenuItem(pCuiMenu)))
  148. return NULL;
  149. if (!pCuiItem->Initialize())
  150. goto ErrExit;
  151. if (!pCuiItem->Init(nId, CRStr(nIdStr)))
  152. goto ErrExit;
  153. if (!pCuiMenu->InsertItem(pCuiItem))
  154. {
  155. ErrExit:
  156. delete pCuiItem;
  157. return NULL;
  158. }
  159. return pCuiItem;
  160. }
  161. CUTBMenuWnd *_pCuiMenu;
  162. };
  163. //////////////////////////////////////////////////////////////////////////////
  164. //
  165. // CUTBLBarMenuItem
  166. //
  167. //////////////////////////////////////////////////////////////////////////////
  168. class CUTBLBarMenuItem : public CCicLibMenuItem
  169. {
  170. public:
  171. CUTBLBarMenuItem(CUTBLBarMenu *pUTBMenu)
  172. {
  173. _pUTBMenu = pUTBMenu;
  174. }
  175. ~CUTBLBarMenuItem() {}
  176. BOOL InsertToUI(CUTBMenuWnd *pCuiMenu);
  177. private:
  178. CUTBLBarMenu *_pUTBMenu;
  179. };
  180. //////////////////////////////////////////////////////////////////////////////
  181. //
  182. // CUTBLBarMenu
  183. //
  184. //////////////////////////////////////////////////////////////////////////////
  185. class CUTBLBarMenu : public CCicLibMenu,
  186. public CModalMenu
  187. {
  188. public:
  189. CUTBLBarMenu(HINSTANCE hInst);
  190. virtual ~CUTBLBarMenu();
  191. UINT ShowPopup(CUIFWindow *pcuiWndParent, const POINT pt, const RECT *prcArea);
  192. CUTBMenuWnd *CreateMenuUI();
  193. virtual CCicLibMenu *CreateSubMenu()
  194. {
  195. return new CUTBLBarMenu(_hInst);
  196. }
  197. virtual CCicLibMenuItem *CreateMenuItem()
  198. {
  199. return new CUTBLBarMenuItem(this);
  200. }
  201. CUTBMenuWnd *GetCuiMenu() {return _pCuiMenu;}
  202. private:
  203. HINSTANCE _hInst;
  204. };
  205. #endif UTBMENU_H