|
|
/////////////////////////////////////////////////////////////////////////////
// Copyright (C) 1993-1998 Microsoft Corporation. All Rights Reserved.
//
// MODULE: msgview.h
//
// PURPOSE: Defines the Outlook Express view class that handles
// displaying the contents of folders with messages.
//
#pragma once
#include "browser.h"
#include "ibodyopt.h"
#include "mimeole.h"
#include "ibodyobj.h"
#include "dragdrop.h"
#define HANDLE_WM_FOLDER_LOADED(hwnd, wParam, lParam, fn) \
OnFolderLoaded((hwnd), (wParam), (lParam))
/////////////////////////////////////////////////////////////////////////////
// Forward References
//
interface IMessageList; interface IBodyObj2; class CGetNewGroups; class CViewMenu;
class CMessageView : IViewWindow, IMessageWindow, IDispatch, IOleCommandTarget, IBodyOptions, IMimeEditEventSink, IServerInfo { public: /////////////////////////////////////////////////////////////////////////
// Constructors, Destructors, and Initialization
//
CMessageView(); ~CMessageView();
HRESULT Initialize(FOLDERID idFolder);
/////////////////////////////////////////////////////////////////////////
// IUnknown
//
STDMETHOD(QueryInterface)(REFIID riid, void **ppvObj); STDMETHOD_(ULONG, AddRef)(void); STDMETHOD_(ULONG, Release)(void);
/////////////////////////////////////////////////////////////////////////
// IOleWindow
//
STDMETHOD(GetWindow)(HWND *pHwnd); STDMETHOD(ContextSensitiveHelp)(BOOL fEnterMode); /////////////////////////////////////////////////////////////////////////
// IViewWindow
//
STDMETHOD(TranslateAccelerator)(THIS_ LPMSG pMsg); STDMETHOD(UIActivate)(THIS_ UINT uState); STDMETHOD(CreateViewWindow)(THIS_ IViewWindow *pPrevView, IAthenaBrowser *pBrowser, RECT *prcView, HWND *pHwnd); STDMETHOD(DestroyViewWindow)(THIS); STDMETHOD(SaveViewState)(THIS); STDMETHOD(OnPopupMenu)(THIS_ HMENU hMenu, HMENU hMenuPopup, UINT uID);
/////////////////////////////////////////////////////////////////////////
// IMessageWindow
//
STDMETHOD(OnFrameWindowActivate)(THIS_ BOOL fActivate); STDMETHOD(GetCurCharSet)(THIS_ UINT *cp); STDMETHOD(UpdateLayout)(THIS_ BOOL fPreviewVisible, BOOL fPreviewHeader, BOOL fPreviewVert, BOOL fReload); STDMETHOD(GetMessageList)(THIS_ IMessageList ** ppMsgList); /////////////////////////////////////////////////////////////////////////
// IOleCommandTarget
//
STDMETHOD(QueryStatus)(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText); STDMETHOD(Exec)(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut); /////////////////////////////////////////////////////////////////////////
// IDispatch
//
STDMETHOD(GetIDsOfNames)(REFIID riid, OLECHAR **rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId) { return (E_NOTIMPL); } STDMETHOD(GetTypeInfo)(unsigned int iTInfo, LCID lcid, ITypeInfo **ppTInfo) { return (E_NOTIMPL); } STDMETHOD(GetTypeInfoCount)(unsigned int FAR* pctinfo) { return (E_NOTIMPL); } STDMETHOD(Invoke)(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pVarResult, EXCEPINFO* pExcepInfo, unsigned int* puArgErr);
/////////////////////////////////////////////////////////////////////////
// IBodyOptions
//
STDMETHOD(SignatureEnabled)(BOOL fAuto) { return (E_NOTIMPL); } STDMETHOD(GetSignature)(LPCSTR szSigID, LPDWORD pdwSigOptions, BSTR *pbstr) { return (E_NOTIMPL); } STDMETHOD(GetMarkAsReadTime)(LPDWORD pdwSecs); STDMETHOD(GetFlags)(LPDWORD pdwFlags); STDMETHOD(GetInfo)(BODYOPTINFO *pBOI) { return (E_NOTIMPL); } STDMETHOD(GetAccount)(IImnAccount **ppAcct);
/////////////////////////////////////////////////////////////////////////
// IMimeEditEventSink
//
STDMETHOD(EventOccurred)(DWORD cmdID, IMimeMessage *pMessage);
/////////////////////////////////////////////////////////////////////////
// IServerInfo
//
STDMETHOD(GetFolderId)(FOLDERID *pID); STDMETHOD(GetMessageFolder)(IMessageServer **ppServer);
/////////////////////////////////////////////////////////////////////////
// Window Handling
//
protected: static LRESULT CALLBACK ViewWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); LRESULT CALLBACK _WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
BOOL OnCreate(HWND hwnd, LPCREATESTRUCT lpCreateStruct); void OnPostCreate(HWND hwnd); void OnSize(HWND hwnd, UINT state, int cxClient, int cyClient); void OnLButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags); void OnMouseMove(HWND hwnd, int x, int y, UINT keyFlags); void OnLButtonUp(HWND hwnd, int x, int y, UINT keyFlags); void OnMenuSelect(HWND hwnd, WPARAM wParam, LPARAM lParam); LRESULT OnNotify(HWND hwnd, int idFrom, LPNMHDR pnmhdr); void OnDestroy(HWND hwnd); void OnSetFocus(HWND hwnd, HWND hwndOldFocus); void OnFolderLoaded(HWND hwnd, WPARAM wParam, LPARAM lParam); LRESULT OnTestGetMsgId(HWND hwnd); LRESULT OnTestSaveMessage(HWND hwnd);
/////////////////////////////////////////////////////////////////////////
// Command Handlers
//
HRESULT CmdOpen(DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut); HRESULT CmdFillPreview(DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut); HRESULT CmdShowPreview(DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut); HRESULT CmdReplyForward(DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut); HRESULT CmdCancelMessage(DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut); HRESULT CmdBlockSender(DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut); HRESULT CmdCreateRule(DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut); HRESULT CmdRefresh(DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut); HRESULT CmdAddToWab(DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut); HRESULT CmdCombineAndDecode(DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut);
/////////////////////////////////////////////////////////////////////////
// Utility functions
//
BOOL _InitMessageList(void); BOOL _InitPreviewPane(void); HRESULT _SetListOptions(void); BOOL _IsPreview(void); void _UpdatePreviewPane(BOOL fForceDownload=FALSE); void _SetProgressStatusText(BSTR bstr); void _SetDefaultStatusText(void); HRESULT _OnMessageAvailable(MESSAGEID idMessage, HRESULT hrCompletion); HRESULT _DoEmailBombCheck(LPMIMEMESSAGE pMsg); void _OptionUpdate(DWORD dwUpdate); BOOL _ReuseMessageFolder(IViewWindow *pPrevView); HRESULT _StoreCharsetOntoRows(HCHARSET hCharset);
/////////////////////////////////////////////////////////////////////////
// Member Data
private: ULONG m_cRef;
// Handy window handles
HWND m_hwnd; HWND m_hwndParent; HWND m_hwndList;
// Shell stuff
IAthenaBrowser *m_pBrowser; FOLDERID m_idFolder; CDropTarget *m_pDropTarget;
// Message List
IMessageList *m_pMsgList; IOleCommandTarget *m_pMsgListCT; IOleInPlaceActiveObject *m_pMsgListAO; DWORD m_dwCookie; IMessageServer *m_pServer;
// Preview Pane
IBodyObj2 *m_pPreview; IOleCommandTarget *m_pPreviewCT; MESSAGEID m_idMessageFocus; CStatusBar *m_pProgress; BOOL m_fNotDownloaded;
// Layout
BOOL m_fSplitHorz; RECT m_rcSplit; DWORD m_dwSplitVertPct; DWORD m_dwSplitHorzPct; BOOL m_fDragging;
// State
UINT m_uUIState; DWORD m_cItems; DWORD m_cUnread; DWORD m_cLastChar;
CGetNewGroups *m_pGroups;
// For View.Current View menu
CViewMenu *m_pViewMenu; };
|