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.

435 lines
17 KiB

  1. // abui.h : Declaration of the CMsgrAb
  2. // Messanger integration to OE
  3. // Created 04/20/98 by YST
  4. #ifndef __BAUI_H_
  5. #define __BAUI_H_
  6. class CFolderBar;
  7. class CPaneFrame;
  8. #include "resource.h" // main symbols
  9. #include "shfusion.h"
  10. #include "badata.h"
  11. #include "bactrl.h"
  12. #include "instance.h"
  13. #include "ourguid.h"
  14. #include "ddfldbar.h"
  15. #include <wab.h>
  16. #include <mapiguid.h>
  17. #include "bllist.h"
  18. #include "menures.h"
  19. #include <wabapi.h>
  20. #include "util.h"
  21. /////////////////////////////////////////////////////////////////////////////
  22. // Bitmap Indices
  23. //
  24. enum {
  25. IMAGE_NEW_MESSAGE = 0,
  26. IMAGE_DISTRIBUTION_LIST,
  27. IMAGE_ONLINE,
  28. IMAGE_OFFLINE,
  29. IMAGE_STOPSIGN,
  30. IMAGE_CLOCKSIGN,
  31. IMAGE_CERT,
  32. IMAGE_EMPTY,
  33. ABIMAGE_MAX
  34. };
  35. enum {
  36. BASORT_STATUS_ACSEND = 0,
  37. BASORT_STATUS_DESCEND,
  38. BASORT_NAME_ACSEND,
  39. BASORT_NAME_DESCEND
  40. };
  41. HRESULT CreateMsgrAbCtrl(IMsgrAb **pMsgrAb);
  42. typedef struct _tag_MABEntry
  43. {
  44. MABENUM tag;
  45. TCHAR * pchWABName;
  46. TCHAR * pchWABID;
  47. LPSBinary lpSB;
  48. LPMINFO lpMsgrInfo;
  49. BOOL fCertificate;
  50. } mabEntry;
  51. typedef mabEntry * LPMABENTRY;
  52. /////////////////////////////////////////////////////////////////////////////
  53. // CMsgrAb
  54. class ATL_NO_VTABLE CMsgrAb :
  55. public CComObjectRootEx<CComSingleThreadModel>,
  56. public CComCoClass<CMsgrAb, &CLSID_MsgrAb>,
  57. public CComControl<CMsgrAb>,
  58. public IDispatchImpl<IMsgrAb, &IID_IMsgrAb, &LIBID_MsgrAbLib>,
  59. public IProvideClassInfo2Impl<&CLSID_MsgrAb, NULL, &LIBID_MsgrAbLib>,
  60. public IPersistStreamInitImpl<CMsgrAb>,
  61. public IPersistStorageImpl<CMsgrAb>,
  62. public IQuickActivateImpl<CMsgrAb>,
  63. public IOleControlImpl<CMsgrAb>,
  64. public IOleObjectImpl<CMsgrAb>,
  65. public IOleInPlaceActiveObjectImpl<CMsgrAb>,
  66. public IViewObjectExImpl<CMsgrAb>,
  67. public IOleInPlaceObjectWindowlessImpl<CMsgrAb>,
  68. public IDataObjectImpl<CMsgrAb>,
  69. public IConnectionPointContainerImpl<CMsgrAb>,
  70. public ISpecifyPropertyPagesImpl<CMsgrAb>,
  71. public IDropTarget,
  72. public IOleCommandTarget,
  73. public IFontCacheNotify,
  74. public IInputObject,
  75. public IObjectWithSite,
  76. public IDropDownFldrBar,
  77. public IMAPIAdviseSink,
  78. public IWABExtInit,
  79. public IShellPropSheetExt
  80. {
  81. public:
  82. // Declare our own window class that doesn't have the CS_HREDRAW etc set
  83. static CWndClassInfo& GetWndClassInfo()
  84. {
  85. static CWndClassInfo wc =
  86. {
  87. { sizeof(WNDCLASSEX), 0, StartWindowProc,
  88. 0, 0, 0, 0, 0, 0 /*(HBRUSH) (COLOR_DESKTOP + 1) */, 0, "Outlook Express Address Book Control", 0 },
  89. NULL, NULL, IDC_ARROW, TRUE, 0, _T("")
  90. };
  91. return wc;
  92. }
  93. CMsgrAb();
  94. ~CMsgrAb();
  95. DECLARE_NO_REGISTRY()
  96. BEGIN_COM_MAP(CMsgrAb)
  97. COM_INTERFACE_ENTRY(IDispatch)
  98. COM_INTERFACE_ENTRY(IMsgrAb)
  99. COM_INTERFACE_ENTRY_IMPL(IViewObjectEx)
  100. COM_INTERFACE_ENTRY_IMPL_IID(IID_IViewObject2, IViewObjectEx)
  101. COM_INTERFACE_ENTRY_IMPL_IID(IID_IViewObject, IViewObjectEx)
  102. COM_INTERFACE_ENTRY_IMPL(IOleInPlaceObjectWindowless)
  103. COM_INTERFACE_ENTRY_IMPL_IID(IID_IOleInPlaceObject, IOleInPlaceObjectWindowless)
  104. COM_INTERFACE_ENTRY_IMPL_IID(IID_IOleWindow, IOleInPlaceObjectWindowless)
  105. COM_INTERFACE_ENTRY_IMPL(IOleInPlaceActiveObject)
  106. COM_INTERFACE_ENTRY_IMPL(IOleControl)
  107. COM_INTERFACE_ENTRY_IMPL(IOleObject)
  108. COM_INTERFACE_ENTRY_IMPL(IQuickActivate)
  109. COM_INTERFACE_ENTRY_IMPL(IPersistStorage)
  110. COM_INTERFACE_ENTRY_IMPL(IPersistStreamInit)
  111. COM_INTERFACE_ENTRY_IMPL(ISpecifyPropertyPages)
  112. COM_INTERFACE_ENTRY_IMPL(IDataObject)
  113. COM_INTERFACE_ENTRY(IProvideClassInfo)
  114. COM_INTERFACE_ENTRY(IProvideClassInfo2)
  115. COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)
  116. COM_INTERFACE_ENTRY(IDropTarget)
  117. COM_INTERFACE_ENTRY(IInputObject)
  118. COM_INTERFACE_ENTRY(IOleCommandTarget)
  119. COM_INTERFACE_ENTRY(IFontCacheNotify)
  120. COM_INTERFACE_ENTRY(IObjectWithSite)
  121. COM_INTERFACE_ENTRY_IID(IID_IDropDownFldrBar, IDropDownFldrBar)
  122. COM_INTERFACE_ENTRY(IMAPIAdviseSink)
  123. COM_INTERFACE_ENTRY(IWABExtInit)
  124. COM_INTERFACE_ENTRY(IShellPropSheetExt)
  125. END_COM_MAP()
  126. BEGIN_PROPERTY_MAP(CMsgrAb)
  127. // Example entries
  128. // PROP_ENTRY("Property Description", dispid, clsid)
  129. PROP_PAGE(CLSID_StockColorPage)
  130. END_PROPERTY_MAP()
  131. BEGIN_CONNECTION_POINT_MAP(CMsgrAb)
  132. END_CONNECTION_POINT_MAP()
  133. BEGIN_MSG_MAP(CMsgrAb)
  134. MESSAGE_HANDLER(WM_PAINT, OnPaint)
  135. MESSAGE_HANDLER(WM_SIZE, OnSize)
  136. MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
  137. MESSAGE_HANDLER(WM_KILLFOCUS, OnKillFocus)
  138. MESSAGE_HANDLER(WM_CREATE, OnCreate)
  139. MESSAGE_HANDLER(WM_CONTEXTMENU, OnContextMenu)
  140. MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
  141. MESSAGE_HANDLER(WM_WININICHANGE, OnSysParamsChange)
  142. MESSAGE_HANDLER(WM_SYSCOLORCHANGE, OnSysParamsChange)
  143. MESSAGE_HANDLER(WM_FONTCHANGE, OnSysParamsChange)
  144. MESSAGE_HANDLER(WM_QUERYNEWPALETTE, OnSysParamsChange)
  145. MESSAGE_HANDLER(WM_PALETTECHANGED, OnSysParamsChange)
  146. MESSAGE_HANDLER(WM_USER_STATUS_CHANGED, OnUserStateChanged)
  147. MESSAGE_HANDLER(WM_USER_MUSER_REMOVED, OnUserRemoved)
  148. MESSAGE_HANDLER(WM_USER_MUSER_ADDED, OnUserAdded)
  149. MESSAGE_HANDLER(WM_USER_NAME_CHANGED, OnUserNameChanged)
  150. MESSAGE_HANDLER(WM_MSGR_LOGOFF, OnUserLogoffEvent)
  151. MESSAGE_HANDLER(WM_MSGR_SHUTDOWN, OnMsgrShutDown)
  152. MESSAGE_HANDLER(WM_MSGR_LOGRESULT, OnUserLogResultEvent)
  153. COMMAND_ID_HANDLER(ID_NEW_CONTACT, CmdNewContact)
  154. COMMAND_ID_HANDLER(ID_NEW_ONLINE_CONTACT, CmdNewOnlineContact)
  155. COMMAND_ID_HANDLER(ID_SET_ONLINE_CONTACT, CmdSetOnline)
  156. // COMMAND_ID_HANDLER(ID_NEW_MSG_DEFAULT, CmdNewMessage)
  157. COMMAND_ID_HANDLER(ID_PROPERTIES, CmdProperties)
  158. COMMAND_ID_HANDLER(ID_DELETE_CONTACT, CmdDelete)
  159. COMMAND_ID_HANDLER(ID_FIND_PEOPLE, CmdFind)
  160. COMMAND_ID_HANDLER(ID_ADDRESS_BOOK, CmdMsgrAb)
  161. COMMAND_ID_HANDLER(ID_NEW_GROUP, CmdNewGroup)
  162. COMMAND_ID_HANDLER(ID_SEND_INSTANT_MESSAGE, CmdNewIMsg)
  163. COMMAND_ID_HANDLER(ID_SEND_INSTANT_MESSAGE2, CmdNewMessage)
  164. COMMAND_ID_HANDLER(ID_SEND_MESSAGE, CmdNewEmaile)
  165. COMMAND_ID_HANDLER(ID_NEW_MSG_DEFAULT, CmdNewEmaile)
  166. NOTIFY_CODE_HANDLER(LVN_GETINFOTIP, NotifyGetInfoTip)
  167. NOTIFY_CODE_HANDLER(LVN_DELETEITEM, NotifyDeleteItem)
  168. NOTIFY_CODE_HANDLER(LVN_ITEMCHANGED, NotifyItemChanged)
  169. NOTIFY_CODE_HANDLER(LVN_ITEMACTIVATE, NotifyItemActivate)
  170. NOTIFY_CODE_HANDLER(LVN_GETDISPINFO, NotifyGetDisplayInfo)
  171. NOTIFY_CODE_HANDLER(NM_SETFOCUS, NotifySetFocus)
  172. ALT_MSG_MAP(1)
  173. #ifdef OLDTOOLTIPS
  174. MESSAGE_RANGE_HANDLER(WM_MOUSEFIRST, WM_MOUSELAST, OnListMouseEvent)
  175. MESSAGE_HANDLER(WM_MOUSEMOVE, OnListMouseMove)
  176. MESSAGE_HANDLER(WM_MOUSELEAVE, OnListMouseLeave)
  177. #endif // OLDTOOLTIPS
  178. ALT_MSG_MAP(2)
  179. END_MSG_MAP()
  180. // CComControlBase
  181. HWND CreateControlWindow(HWND hWndParent, RECT& rcPos)
  182. {
  183. return Create(hWndParent, rcPos, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
  184. WS_EX_CONTROLPARENT);
  185. }
  186. // IViewObjectEx
  187. STDMETHOD(GetViewStatus)(DWORD* pdwStatus)
  188. {
  189. ATLTRACE(_T("IViewObjectExImpl::GetViewStatus\n"));
  190. *pdwStatus = VIEWSTATUS_SOLIDBKGND | VIEWSTATUS_OPAQUE;
  191. return S_OK;
  192. }
  193. // IQuickActivate
  194. STDMETHOD(QuickActivate)(QACONTAINER *pQACont, QACONTROL *pQACtrl)
  195. {
  196. // $REVIEW - Someone updated the size of QACONTAINER to add two
  197. // new members, pOleControlSite and pServiceProvider.
  198. // This causes ATL to assert in a big way, but to
  199. // avoid the assert we tweek the structure size. This
  200. // is a bad thing. -- steveser
  201. pQACont->cbSize = sizeof(QACONTAINER);
  202. return (IQuickActivateImpl<CMsgrAb>::QuickActivate(pQACont, pQACtrl));
  203. }
  204. // IOleInPlaceActiveObjectImpl
  205. STDMETHOD(TranslateAccelerator)(LPMSG lpmsg)
  206. {
  207. if (lpmsg->message == WM_CHAR && lpmsg->wParam == VK_DELETE)
  208. {
  209. PostMessage(WM_COMMAND, ID_DELETE, 0);
  210. return (S_OK);
  211. }
  212. return (S_FALSE);
  213. }
  214. // IMsgrAb
  215. public:
  216. STDMETHOD(get_InstMsg)(/*[out, retval]*/ BOOL *pVal);
  217. // STDMETHOD(put_InstMsg)(/*[in]*/ BOOL newVal);
  218. HRESULT OnDraw(ATL_DRAWINFO& di);
  219. // IDropTarget
  220. STDMETHOD(DragEnter)(THIS_ IDataObject *pDataObject, DWORD grfKeyState,
  221. POINTL pt, DWORD *pdwEffect);
  222. STDMETHOD(DragOver)(THIS_ DWORD grfKeyState, POINTL pt, DWORD *pdwEffect);
  223. STDMETHOD(DragLeave)(THIS);
  224. STDMETHOD(Drop)(THIS_ IDataObject *pDataObject, DWORD grfKeyState,
  225. POINTL pt, DWORD *pdwEffect);
  226. //IOleCommandTarget
  227. HRESULT STDMETHODCALLTYPE QueryStatus(const GUID *pguidCmdGroup,
  228. ULONG cCmds,
  229. OLECMD rgCmds[],
  230. OLECMDTEXT *pCmdText);
  231. HRESULT STDMETHODCALLTYPE Exec(const GUID *pguidCmdGroup,
  232. DWORD nCmdID,
  233. DWORD nCmdExecOpt,
  234. VARIANTARG *pvaIn,
  235. VARIANTARG *pvaOut);
  236. // IInputObject
  237. STDMETHOD(HasFocusIO)(THIS);
  238. STDMETHOD(TranslateAcceleratorIO)(THIS_ LPMSG lpMsg);
  239. STDMETHOD(UIActivateIO)(THIS_ BOOL fActivate, LPMSG lpMsg);
  240. /////////////////////////////////////////////////////////////////////////
  241. // IFontCacheNotify
  242. //
  243. STDMETHOD(OnPreFontChange)(void);
  244. STDMETHOD(OnPostFontChange)(void);
  245. //IObjectWithSite
  246. STDMETHOD(SetSite)(IUnknown *punksite);
  247. STDMETHOD(GetSite)(REFIID riid, LPVOID *ppvSite);
  248. //IDropDownFolderBar
  249. HRESULT RegisterFlyOut(CFolderBar *pFolderBar);
  250. HRESULT RevokeFlyOut();
  251. // IMAPIAdviseSink
  252. STDMETHOD_(ULONG, OnNotify)(ULONG cNotif, LPNOTIFICATION pNotifications);
  253. // IShellPropSheetExt interface
  254. STDMETHOD(AddPages)(LPFNADDPROPSHEETPAGE lpfnAddPage, LPARAM lParam);
  255. STDMETHOD(ReplacePage)(UINT uPageID, LPFNADDPROPSHEETPAGE lpfnReplaceWith, LPARAM lParam);
  256. // IWABExtInit interface
  257. STDMETHOD(Initialize)(LPWABEXTDISPLAY lpWED);
  258. // STDMETHOD (EventUserStateChanged)(THIS_ IMsgrUserOE * pUser);
  259. LPMABENTRY AddBlabEntry(MABENUM tag, LPSBinary lpSB, LPMINFO lpMsgrInfo = NULL, TCHAR *pchMail = NULL, TCHAR *pchDisplayName = NULL, BOOL fCert = FALSE);
  260. void CheckAndAddAbEntry(LPSBinary lpSB, TCHAR *pchEmail, TCHAR *pchDisplayName, DWORD nFlag);
  261. // Message Handlers
  262. private:
  263. LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  264. LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  265. LRESULT OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  266. LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  267. LRESULT OnSetFocus(UINT nMsg , WPARAM wParam , LPARAM lParam , BOOL& bHandled );
  268. LRESULT OnSysParamsChange(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
  269. {
  270. m_ctlList.SendMessage(nMsg, wParam, lParam);
  271. return 0;
  272. }
  273. HRESULT OnMsgrShutDown(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  274. HRESULT OnUserStateChanged(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  275. HRESULT OnUserRemoved(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  276. HRESULT OnUserLogoffEvent(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  277. HRESULT OnUserLogResultEvent(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  278. HRESULT OnUserAdded(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  279. HRESULT OnUserNameChanged(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  280. LRESULT CmdNewContact(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  281. LRESULT CmdNewOnlineContact(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  282. LRESULT CmdNewMessage(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  283. LRESULT CmdNewGroup(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  284. LRESULT CmdProperties(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  285. LRESULT CmdDelete(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  286. LRESULT CmdFind(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  287. LRESULT CmdMsgrAb(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  288. LRESULT CmdNewEmaile(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  289. LRESULT CmdNewIMsg(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  290. LRESULT CmdSetOnline(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  291. // LRESULT CmdMsgrOptions(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  292. LRESULT NotifyGetInfoTip(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
  293. LRESULT NotifyDeleteItem(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
  294. LRESULT NotifyItemChanged(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
  295. LRESULT NotifyItemActivate(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
  296. LRESULT NotifyGetDisplayInfo(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
  297. // LRESULT NotifyColumnClick(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
  298. LRESULT NotifySetFocus(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
  299. LRESULT NewInstantMessage(LPMABENTRY pEntry);
  300. HRESULT OnListMouseEvent(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  301. HRESULT OnListMouseMove(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  302. HRESULT OnListMouseLeave(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  303. // Utility Functions
  304. HRESULT _ResizeElements(LPCRECT prcPos = NULL, LPCRECT prcClip = NULL);
  305. void _AutosizeColumns(void);
  306. void _EnableCommands(void);
  307. HRESULT _DoDropMessage(LPMIMEMESSAGE pMessage);
  308. HRESULT _DoDropMenu(POINTL pt, LPMIMEMESSAGE pMessage);
  309. void _ReloadListview(void);
  310. LRESULT SetUserIcon(LPMABENTRY pEntry, int nStatus, int * pImage);
  311. void AddMsgrListItem(LPMINFO lpMsgrInfo);
  312. HRESULT FillMsgrList();
  313. void RemoveBlabEntry(LPMABENTRY lpEntry);
  314. LPMABENTRY FindUserEmail(TCHAR *pchEmail, int *pIndex = NULL, BOOL fMsgrOnly = TRUE);
  315. BOOL _UpdateViewTip(int x, int y);
  316. BOOL _IsItemTruncated(int iItem, int iSubItem);
  317. LPMABENTRY GetSelectedEntry(void);
  318. LPMABENTRY GetEntryForSendInstMsg(LPMABENTRY pEntry = NULL);
  319. HRESULT PromptToGoOnline(void);
  320. void RemoveMsgrInfo(LPMINFO lpMsgrInfo);
  321. // Member Data
  322. private:
  323. // Address Book Object
  324. CAddressBookData m_cAddrBook;
  325. // Child windows
  326. CContainedWindow m_ctlList; // Displays the list of people
  327. // Trucated listview items Tooltips
  328. CContainedWindow m_ctlViewTip;
  329. BOOL m_fViewTip;
  330. BOOL m_fViewTipVisible;
  331. BOOL m_fTrackSet;
  332. int m_iItemTip;
  333. int m_iSubItemTip;
  334. HIMAGELIST m_himl;
  335. DWORD m_dwFontCacheCookie; // For the Advise on the font cache
  336. POINT m_ptToolTip;
  337. CEmptyList m_cEmptyList;
  338. TCHAR * m_szOnline;
  339. // TCHAR * m_szInvisible;
  340. TCHAR * m_szBusy;
  341. TCHAR * m_szBack;
  342. TCHAR * m_szAway;
  343. TCHAR * m_szOnPhone;
  344. TCHAR * m_szLunch;
  345. TCHAR * m_szOffline;
  346. TCHAR * m_szIdle;
  347. TCHAR * m_szEmptyList;
  348. BOOL m_fNoRemove;
  349. int m_delItem;
  350. // Drag & Drop stuff
  351. IDataObject *m_pDataObject;
  352. CLIPFORMAT m_cf;
  353. BOOL m_fRight;
  354. BOOL m_fLogged;
  355. // Properties
  356. //Site ptr
  357. IInputObjectSite *m_pObjSite;
  358. HWND m_hwndParent;
  359. CFolderBar *m_pFolderBar;
  360. int m_nSortType;
  361. CMsgrList *m_pCMsgrList; // pointer to OE Msgr
  362. int m_nChCount;
  363. // WAB extension
  364. UINT m_cRefThisDll; // Reference count for this DLL
  365. HPROPSHEETPAGE m_hPage1; // Handle to the property sheet page
  366. LPWABEXTDISPLAY m_lpWED;
  367. LPWABEXTDISPLAY m_lpWEDContext;
  368. LPMAPIPROP m_lpPropObj; // For context menu extensions, hang onto the prop obj
  369. };
  370. int CALLBACK BA_Sort(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);
  371. INT_PTR CALLBACK WabExtDlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
  372. #endif //__BAUI_H_