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.
 
 
 
 
 
 

405 lines
15 KiB

#ifndef _HEADER_H
#define _HEADER_H
#include <richedit.h>
#ifndef _RICHOLE_H //hack as richole.h has no #ifdef around it
#define _RICHOLE_H
#include <richole.h>
#endif
#include <mimeole.h>
#include <wells.h>
#include <addrobj.h>
#include "iheader.h"
#include <envelope.h>
#include <mso.h>
#include "secutil.h"
#include "tom.h"
#include "reutil.h"
//
// Forwards
//
interface IImnAccount;
class CAttMan;
//
// Structures and other defintions
//
enum
{ // templates for types of note (defines header layout)
NT_SENDNOTE=0,
NT_READNOTE,
NT_NOTECOUNT
};
enum
{
VCardFALSE=0,
VCardTRUE,
VCardDONTKNOW
};
BOOL FHeader_Init(BOOL fInit);
HRESULT CreateInstance_Envelope(IUnknown* pUnkOuter, IUnknown** ppUnknown);
void HdrSetRichEditText(HWND hwnd, LPWSTR pwchBuff, BOOL fReplace);
DWORD HdrGetRichEditText(HWND hwnd, LPWSTR pwchBuff, DWORD dwNumChars, BOOL fSelection);
// enumeration of icons in the button image list
enum
{
iimlHdrAddrRolodex=0,
iimlHdrNewsRolodex,
//iimlHdrNext,
};
enum // HCINFO.dwFlags
{
HCF_MULTILINE =0x0001,
HCF_READONLY =0x0002,
HCF_HASBUTTON =0x0004,
HCF_ADVANCED =0x0008,
HCF_ADDRWELL =0x0010,
HCF_USECHARSET =0x0020,
HCF_OPTIONAL =0x0040,
HCF_HIDDEN =0x0080,
HCF_COMBO =0x0100,
HCF_BORDER =0x0200,
HCF_ATTACH =0x0400,
HCF_ADDRBOOK =0x0800,
HCF_NEWSPICK =0x1000,
};
enum
{
AC_IGNORE =0x01,
AC_SELECTION =0x02
};
// header control info structure
typedef struct tagHCI
{
DWORD dwFlags,
dwOpt; // valid if HCF_OPTIONAL
int idEdit, // id of well
idBtn, // id of button (if
idsLabel, // id used for label of well
idsEmpty, // id of string used for empty well
idsTT; // string for tooltip of the well
DWORD dwACFlags; // valid if HCF_ADDRWELL
BOOL fEmpty; // state info
LPRICHEDITOLE preole; // oleinterface; MUST ZeroInit
ITextDocument *pDoc; // RichEdit interface for text document
int cy, // y pos of the control (and hence the label)
height, // y size of control (used when growing control)
strlen, // strlen of label
strlenEmpty; // strlen of the empty string
WCHAR sz[cchHeaderMax+1], // string for label
szEmpty[cchHeaderMax+1]; // string for empty state
} HCI, *PHCI;
class CNoteHdr :
public IPersistMime,
public IOleCommandTarget,
public IHeader,
public IMsoEnvelope,
public IMsoComponent,
public IDropTarget,
public IFontCacheNotify
{
public:
// IUnknown
HRESULT STDMETHODCALLTYPE QueryInterface(REFIID, LPVOID FAR *);
ULONG STDMETHODCALLTYPE AddRef();
ULONG STDMETHODCALLTYPE Release();
// IPersistMime
HRESULT STDMETHODCALLTYPE Load(LPMIMEMESSAGE);
HRESULT STDMETHODCALLTYPE Save(LPMIMEMESSAGE, DWORD);
HRESULT STDMETHODCALLTYPE GetClassID(CLSID *pClsID);
// IOleCommandTarget
HRESULT STDMETHODCALLTYPE QueryStatus(const GUID *, ULONG, OLECMD prgCmds[], OLECMDTEXT *);
HRESULT STDMETHODCALLTYPE Exec(const GUID *, DWORD, DWORD, VARIANTARG *, VARIANTARG *);
// IHeader
HRESULT STDMETHODCALLTYPE Init(IHeaderSite* pHeaderSite, HWND hwndParent);
HRESULT STDMETHODCALLTYPE SetRect(LPRECT);
HRESULT STDMETHODCALLTYPE GetRect(LPRECT);
HRESULT STDMETHODCALLTYPE SetPriority(UINT pri);
HRESULT STDMETHODCALLTYPE GetPriority(UINT* ppri);
HRESULT STDMETHODCALLTYPE ShowAdvancedHeaders(BOOL fOn);
HRESULT STDMETHODCALLTYPE FullHeadersShowing(void);
HRESULT STDMETHODCALLTYPE ChangeLanguage(LPMIMEMESSAGE pMsg);
HRESULT STDMETHODCALLTYPE GetTitle(LPWSTR lpszTitle, ULONG cch);
HRESULT STDMETHODCALLTYPE UpdateRecipientMenu(HMENU hmenu);
HRESULT STDMETHODCALLTYPE SetInitFocus(BOOL fSubject);
HRESULT STDMETHODCALLTYPE SetVCard(BOOL fFresh);
HRESULT STDMETHODCALLTYPE IsSecured();
HRESULT STDMETHODCALLTYPE IsHeadSigned();
HRESULT STDMETHODCALLTYPE ForceEncryption(BOOL *fEncrypt, BOOL fSet);
HRESULT STDMETHODCALLTYPE AddRecipient(int idOffset);
HRESULT STDMETHODCALLTYPE GetTabStopArray(HWND *rgTSArray, int *pcArrayCount);
HRESULT STDMETHODCALLTYPE SetFlagState(MARK_TYPE markType);
HRESULT STDMETHODCALLTYPE WMCommand(HWND, int, WORD);
HRESULT STDMETHODCALLTYPE OnDocumentReady(LPMIMEMESSAGE pMsg);
HRESULT STDMETHODCALLTYPE DropFiles(HDROP hDrop, BOOL fMakeLinks);
HRESULT STDMETHODCALLTYPE HrGetAttachCount(ULONG *pcAttMan);
HRESULT STDMETHODCALLTYPE HrIsDragSource();
HRESULT STDMETHODCALLTYPE HrGetAccountInHeader(IImnAccount **ppAcct);
// IDropTarget
HRESULT STDMETHODCALLTYPE DragEnter(IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect);
HRESULT STDMETHODCALLTYPE DragOver(DWORD grfKeyState, POINTL pt, DWORD *pdwEffect);
HRESULT STDMETHODCALLTYPE DragLeave(void);
HRESULT STDMETHODCALLTYPE Drop(IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect);
// IMsoEnvelope
HRESULT STDMETHODCALLTYPE Init(IUnknown* punk, IMsoEnvelopeSite* pesit, DWORD grfInit);
HRESULT STDMETHODCALLTYPE SetParent(HWND hwndParent);
HRESULT STDMETHODCALLTYPE Resize(LPCRECT prc);
HRESULT STDMETHODCALLTYPE Show(BOOL fShow);
HRESULT STDMETHODCALLTYPE SetHelpMode(BOOL fEnter);
HRESULT STDMETHODCALLTYPE Save(IStream* pstm, DWORD grfSave);
HRESULT STDMETHODCALLTYPE GetAttach(const WCHAR* wszName,IStream** ppstm);
HRESULT STDMETHODCALLTYPE SetAttach(const WCHAR* wszName,const WCHAR* szFile,IStream** ppstm,DWORD* pgrfAttach);
HRESULT STDMETHODCALLTYPE NewAttach(const WCHAR* pwzName,DWORD grfAttach);
HRESULT STDMETHODCALLTYPE SetFocus(DWORD grfFocus);
HRESULT STDMETHODCALLTYPE GetHeaderInfo(ULONG dispid, DWORD grfHeader, void **ppv);
HRESULT STDMETHODCALLTYPE SetHeaderInfo(ULONG dispid, const void *pv);
HRESULT STDMETHODCALLTYPE IsDirty();
HRESULT STDMETHODCALLTYPE GetLastError(HRESULT hr, WCHAR __RPC_FAR *wszBuf, ULONG cchBuf);
HRESULT STDMETHODCALLTYPE DoDebug(DWORD grfDebug);
// IMsoComponent
BOOL STDMETHODCALLTYPE FDebugMessage(HMSOINST, UINT, WPARAM, LPARAM);
BOOL STDMETHODCALLTYPE FPreTranslateMessage(MSG *);
void STDMETHODCALLTYPE OnEnterState(ULONG, BOOL);
void STDMETHODCALLTYPE OnAppActivate(BOOL, DWORD);
void STDMETHODCALLTYPE OnLoseActivation();
void STDMETHODCALLTYPE OnActivationChange(IMsoComponent *, BOOL, const MSOCRINFO *, BOOL, const MSOCHOSTINFO *, DWORD);
BOOL STDMETHODCALLTYPE FDoIdle(DWORD grfidlef);
BOOL STDMETHODCALLTYPE FContinueMessageLoop(ULONG, void *, MSG *);
BOOL STDMETHODCALLTYPE FQueryTerminate(BOOL);
void STDMETHODCALLTYPE Terminate();
HWND STDMETHODCALLTYPE HwndGetWindow(DWORD, DWORD);
// IFontCacheNotify
HRESULT STDMETHODCALLTYPE OnPreFontChange(void);
HRESULT STDMETHODCALLTYPE OnPostFontChange(void);
static LRESULT EXPORT_16 CALLBACK ExtCNoteHdrWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
static LRESULT EXPORT_16 CALLBACK EditSubClassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
static LRESULT EXPORT_16 CALLBACK BtnSubClassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
static LRESULT EXPORT_16 CALLBACK IMESubClassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, PHCI phci);
CNoteHdr();
virtual ~CNoteHdr();
private:
ULONG m_cRef,
m_cHCI,
m_cAccountIDs,
m_cxLeftMargin;
BOOL m_fSendImmediate,//as opposed to sendlater.
m_fAdvanced,
m_fInSize,
m_fDirty,
m_fVCard,
m_fVCardSave,
m_fAutoComplete,
m_fMail,
m_fSecurityInited,
m_fThisHeadDigSigned,
m_fThisHeadEncrypted,
m_fSignTrusted,
m_fEncryptionOK,
m_fDigSigned,
m_fEncrypted,
m_fFlagged,
m_fOfficeInit,
m_fUIActive,
m_fResizing,
m_fHandleChange,
m_fAddressesChanged,
m_fForceEncryption,
m_fSkipLayout,
m_fStillLoading,
m_fDropTargetRegister,
m_fShowedUnicodeDialog;
HWND m_hwndToolbar,
m_hwnd,
m_hwndParent,
m_hwndTT,
m_hwndLastFocus,
m_hwndRebar;
UINT m_ntNote;
DWORD m_dwComponentMgrID,
m_dwFontNotify,
m_dwIMEStartCount;
RECT m_rcCurrentBtn;
HWND m_hwndOldCapture;
WORD m_wNoteType;
INT m_dxTBOffset;
int m_pri,
m_iCurrComboIndex,
m_iUnicodeDialogResult;
LPSTR *m_ppAccountIDs;
LPWSTR m_lpszSecurityField,
m_pszRefs;
TCHAR m_szLastLang[cchHeaderMax+1];
PHCI m_rgHCI;
CAddrWells *m_pAddrWells;
LPWABAL m_lpWabal;
SECSTATE m_SecState;
HCHARSET m_hCharset;
LPMAPITABLE m_pTable;
LPWAB m_lpWab;
CAttMan *m_lpAttMan;
MARK_TYPE m_MarkType;
CLIPFORMAT m_cfAccept;
DWORD m_dwDragType,
m_grfKeyState,
m_dwCurrentBtn,
m_dwClickedBtn,
m_cCapture,
m_dwEffect;
IHeaderSite *m_pHeaderSite; // valid if athena hosts header
IMsoEnvelopeSite *m_pEnvelopeSite; // valid if Office hosts header
IImnAccount *m_pAccount;
HINITREF m_hInitRef; // Application reference count
IMsoComponentManager *m_pMsoComponentMgr;
IMimeMessage *m_pMsgSend,
*m_pMsg;
HIMAGELIST m_himl;
BOOL m_fPoster;
private:
LRESULT CALLBACK CNoteHdrWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
BOOL IsReplyNote();
BOOL WMCreate();
BOOL WMNotify(WPARAM wParam, LPARAM lParam);
void WMPaint();
void OnDestroy();
void OnNCDestroy();
BOOL PostWMCreate();
void OnButtonClick(int idBtn);
void SetReferences(LPMIMEMESSAGE pMsg);
void HrPickGroups(int idWell, BOOL fFollowUpTo);
// VCard
HRESULT HrShowVCardProperties(HWND hwnd);
HRESULT HrShowVCardCtxtMenu(int x, int y);
HRESULT HrGetVCardName(LPTSTR pszName, DWORD cch);
HRESULT HrOnOffVCard();
HRESULT _AttachVCard(IMimeMessage *pMsg);
HRESULT HrInit(IMimeMessage *pMsg);
HRESULT HrFShowHeader(PHCI phci);
HRESULT HrAutoComplete(HWND hwnd, PHCI pHCI);
HRESULT HrUpdateCharSetFonts(HCHARSET hCharset, BOOL fUpdateFields);
HRESULT HrInitFieldList();
HRESULT HrFreeFieldList();
HRESULT HrCheckNames(BOOL fSilent, BOOL fSetCheckedFlag);
HRESULT HrClearUndoStack();
HRESULT HrNewsSave(LPMIMEMESSAGE pMsg, CODEPAGEID cpID, BOOL fCheckConflictOnly);
HRESULT HrCopyNonRecipientHeaders(LPMIMEMESSAGE pMsg);
HRESULT HrOfficeLoad();
HRESULT HrAutoAddToWAB();
HRESULT HrSetPri(LPMIMEMESSAGE pMsg);
HRESULT HrSetupNote(LPMIMEMESSAGE pMsg);
HRESULT HrSetMailRecipients(LPMIMEMESSAGE pMsg);
HRESULT HrSetNewsRecipients(LPMIMEMESSAGE pMsg);
HRESULT HrSetNewsWabal(LPMIMEMESSAGE pMsg, LPWSTR pwszCC);
HRESULT HrSetReplySubject(LPMIMEMESSAGE pMsg, BOOL fReply);
HRESULT HrQueryToolbarButtons(DWORD dwFlags, const GUID *pguidCmdGroup, OLECMD* pOleCmd);
HRESULT HrGetFieldText(LPWSTR* ppszText, int idHdrCtrl);
HRESULT HrGetFieldText(LPWSTR* ppszText, HWND hwnd);
HRESULT ResolveGroupNames(HWND hwnd, int idField, FOLDERID idServer, BOOL fPosterAllowed, BOOL *fOneOrMoreNames);
HRESULT HrAddSender();
HRESULT HrAddAllOnToList();
HRESULT HrCheckGroups(BOOL fPosting);
HRESULT HrSend();
HRESULT HrIsCoolToSendHTML();
HRESULT HrCheckSubject(BOOL fMail);
HRESULT HrCheckSendInfo();
HRESULT HrFillMessage(IMimeMessage *pMsg);
HRESULT HrPickNames(int iwell);
HRESULT HrUpdateCachedHeight(HWND hwndEdit, RECT *prc);
HRESULT HrUpdateTooltipPos();
HRESULT HrOfficeInitialize(BOOL fInit);
HRESULT HrGetVCardState(ULONG* pCmdf);
HRESULT HrFillToolbarColor(HDC hdc);
HRESULT HrViewContacts();
void HeaderCapture();
void HeaderRelease(BOOL fForce);
void ShowControls();
void RelayToolTip(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
void SetPosOfControls(int headerWidth, BOOL fChangeVisibleStates);
void SetDirtyFlag();
int GetRightMargin(BOOL fMax);
BOOL IsReadOnly();
// security
HRESULT HrInitSecurityOptions(LPMIMEMESSAGE pMsg, ULONG ulSecurityType);
HRESULT HrInitSecurity();
HRESULT HrHandleSecurityIDMs(BOOL fDigsign);
HRESULT HrSaveSecurity(LPMIMEMESSAGE pMsg);
HRESULT HrUpdateSecurity(LPMIMEMESSAGE pMsg=NULL);
LPWSTR SzGetDisplaySec(LPMIMEMESSAGE pMsg, int *pidsLabel);
HACCEL GetAcceleratorTable();
BOOL FDoCutCopyPaste(int wmCmd);
HRESULT ShowEnvOptions();
void ReLayout();
HRESULT UnloadAll();
void InvalidateRightMargin(int additionalWidth);
void InvalidateStatus();
DWORD GetButtonUnderMouse(int x, int y);
void GetButtonRect(DWORD iBtn, RECT *prc);
int BeginYPos();
void HandleButtonClicks(int x, int y, int iBtn);
void _UpdateTextFields(BOOL fSetWabal);
void _SetEmptyFieldStrings(void);
void _AddRecipTypeToMenu(HMENU hmenu);
HRESULT _CreateEnvToolbar();
HRESULT _LoadFromStream(IStream *pstm);
HRESULT _SetButtonText(int idmCmd, LPSTR pszText);
HRESULT _ConvertOfficeCmdIDToOE(LPDWORD pdwCmdId);
HRESULT _UIActivate(BOOL fActive, HWND hwndFocus);
HWND _GetNextDlgTabItem(HWND hwndDlg, HWND hwndFocus, BOOL fShift);
HRESULT _HandsOffComponentMgr();
int _GetLeftMargin();
HIMAGELIST _CreateToolbarBitmap(int idb, int cx);
HRESULT _ClearDirtyFlag();
HRESULT _RegisterAsDropTarget(BOOL fOn);
HRESULT _RegisterWithFontCache(BOOL fOn);
HRESULT _RegisterWithComponentMgr(BOOL fOn);
HRESULT _GetMsoBody(ULONG uBody, LPSTREAM *ppstm);
#ifdef YST
HRESULT _CheckMsoBodyCharsetConflict(CODEPAGEID cpID);
#endif
HRESULT _UnicodeSafeSave(IMimeMessage *pMsg, BOOL fCheckConflictOnly);
};
void GetUSKeyboardLayout(HKL *phkl);
// note header WM_COMMAND parent notifications
#define NHD_FIRST 0
#define NHD_SIZECHANGE (NHD_FIRST + 1)
#endif //_HEADER_H