|
|
#pragma once
#ifndef __UTIL_H__
#define __UTIL_H__
////////////////////////////////////////////////////////
// Depends on....
typedef struct tagOPTPAGES OPTPAGES; typedef struct tagOPTINFO OPTINFO; typedef struct INETSERVER __RPC_FAR *LPINETSERVER;
interface IMimeMessage; typedef IMimeMessage *LPMIMEMESSAGE; interface IExplorerToolbar; interface IMsgContainer;
////////////////////////////////////////////////////////
// Begin
VOID DoReadme(HWND hwndOwner);
typedef VOID (*PVOIDFN)(VOID);
#define DoAboutAthena(hwnd, idIcon) \
DialogBoxParam(g_hLocRes, MAKEINTRESOURCE(iddVersion), hwnd, AboutAthena, (LPARAM) idIcon); INT_PTR CALLBACK AboutAthena(HWND hdlg, UINT msg, WPARAM wp, LPARAM lp);
#define TOOLBAR_BKGDCLR RGB(0xff, 0, 0xff)
#define __TOOLBAR_SEP__ {0,0,TBSTATE_ENABLED,TBSTYLE_SEP,{0,0},0,0}
#define BUTTONCOUNT(tb) (sizeof(tb) / sizeof(TBBUTTON))
UINT RegGetKeyNumbers(HKEY hkRegDataBase, const TCHAR *szRegSection); BOOL RegGetKeyNameFromIndex(HKEY hkRegDataBase, const TCHAR *szRegSection, UINT Index, TCHAR * szBuffer, DWORD *pcbBuffer);
#ifdef TIMING
void ResetTimingInfo(); void OutputTimingInfo(LPTSTR szOutputText); #else
#define ResetTimingInfo()
#define OutputTimingInfo(x)
#endif //TIMING
#define SPLITBAR_THICKNESS 6
#define IDS_IMAGEMASK 0x80000000
BOOL SetupLVColumns(HWND, UINT, const int *, const int *, const int *);
ULONG CbPidl(LPCITEMIDLIST pidl); LPVOID PidlAlloc(ULONG cb); VOID PidlFree(LPVOID pv); LPITEMIDLIST PidlDupIdList(LPCITEMIDLIST pidl, LPDWORD pcbPidl=NULL); LPITEMIDLIST PidlDupFirstId(LPCITEMIDLIST pidl); LPITEMIDLIST PidlDupParentIdList(LPCITEMIDLIST pidl); LPITEMIDLIST PidlCombineIdLists(LPCITEMIDLIST pidlRoot, LPCITEMIDLIST pidlLeaf); #ifdef DEBUG
LPITEMIDLIST NEXTID_C(LPCITEMIDLIST pidl); void DumpPidl(LPCITEMIDLIST pidl, LPSTR szComment); #else
#define DumpPidl(x,y)
#endif
#define AthMessageBox(hwnd, pszT, psz1, psz2, fu) MessageBoxInst(g_hLocRes, hwnd, pszT, psz1, psz2, fu)
#define AthMessageBoxW(hwnd, pwszT, pwsz1, pwsz2, fu) MessageBoxInstW(g_hLocRes, hwnd, pwszT, pwsz1, pwsz2, fu, LoadStringWrapW, MessageBoxWrapW)
void AthErrorMessage(HWND hwnd, LPTSTR pszTitle, LPTSTR pszError, HRESULT hrDetail); void AthErrorMessageW(HWND hwnd, LPWSTR pwszTitle, LPWSTR pwszError, HRESULT hrDetail);
#define AthFileTimeToDateTimeW(pft, wszDateTime, cch, dwFlags) \
CchFileTimeToDateTimeW(pft, wszDateTime, cch, dwFlags, \ GetDateFormatWrapW, GetTimeFormatWrapW, GetLocaleInfoWrapW) //
// string resource crap
//
int LoadStringReplaceSpecial(UINT id, LPTSTR sz, int cch); int LoadStringReplaceSpecialW(UINT id, LPWSTR wsz, int cch); LPTSTR AthLoadString(UINT id, LPTSTR lpBuffer, int nBufferMax); LPWSTR AthLoadStringW(UINT id, LPWSTR sz, int cch);
#ifdef YST
#undef LoadString
#define LoadString(_hinst, _id, _sz, _cch) _LoadString(_id, _sz, _cch)
int _LoadString(UINT id, LPTSTR lpBuffer, int nBufferMax);
#undef DialogBox
#define DialogBox(_hinst, _sz, _hwnd, _func) _DialogBox(_sz, _hwnd, _func)
int _DialogBox(LPCTSTR lpTemplate, HWND hwnd, DLGPROC func);
#undef DialogBoxIndirect
#define DialogBoxIndirect(_hinst, lpTemplate, hWndParent, lpDialogFunc) _DialogBoxIndirect(lpTemplate, hWndParent, lpDialogFunc)
int _DialogBoxIndirect(LPCTSTR lpTemplate, HWND hwnd, DLGPROC lpDialogFunc);
#undef DialogBoxIndirectParam
#define DialogBoxIndirectParam(_hinst, lpTemplate, hWndParent, lpDialogFunc, dwParam) _DialogBoxIndirectParam(lpTemplate, hWndParent, lpDialogFunc, dwParam)
int _DialogBoxIndirectParam(LPCTSTR lpTemplate, HWND hwnd, DLGPROC lpDialogFunc, LPARAM dwParam);
#undef DialogBoxParam
#define DialogBoxParam(x, y, z, m, n) _DialogBoxParam(y, z, m, n)
int _DialogBoxParam(LPCTSTR lpTemplate, HWND hwnd, DLGPROC func, LPARAM lParam);
#undef CreateDialog
#define CreateDialog(_hinst, _sz, _hwnd, _func) _CreateDialog(_sz, _hwnd, _func)
HWND _CreateDialog(LPCTSTR lpTemplate, HWND hwnd, DLGPROC func);
#undef CreateDialogIndirect
#undef CreateDialogIndirectParam
#undef CreateDialogParam
#define CreateDialogParam(_hinst, _sz, _hwnd, _func, _param) _CreateDialogParam(_sz, _hwnd, _func, _param)
HWND _CreateDialogParam(LPCTSTR lpTemplate, HWND hwnd, DLGPROC func, LPARAM lParam);
#undef LoadMenu
#define LoadMenu(_hinst, _sz) _LoadMenu(_sz)
HMENU _LoadMenu(LPCTSTR lpMenuName);
#undef LoadAccelerators
#define LoadAccelerators(hInst, y) _LoadAccelerators(y)
HACCEL _LoadAccelerators(LPCTSTR lpTableName);
#undef ImageList_LoadImage
#define ImageList_LoadImage(hi, lpbmp, cx, cGrow, crMask, uType, uFlags) _ImageList_LoadImage(lpbmp, cx, cGrow, crMask, uType, uFlags)
HIMAGELIST _ImageList_LoadImage(LPCTSTR lpbmp, int cx, int cGrow, COLORREF crMask, UINT uType, UINT uFlags); #endif // YST
HBITMAP FAR PASCAL CreateDitherBitmap(COLORREF crFG, COLORREF crBG); HBRUSH FAR PASCAL CreateDitherBrush(COLORREF crFG, COLORREF crBG);
LRESULT DoDontShowMeAgainDlg(HWND hwndOwner, LPCSTR pszRegString, LPTSTR pszTitle, LPTSTR pszMessage, UINT uType); DWORD DwGetDontShowAgain (LPCSTR pszRegString); VOID SetDontShowAgain (DWORD dwDontShow, LPCSTR pszRegString);
void nyi(LPSTR lpsz);
BOOL FNewMessage(HWND hwnd, BOOL fModal, BOOL fNoStationery, BOOL fNews, FOLDERID folderID, IUnknown *pUnkPump);
// Context-sensitive Help utility.
typedef struct _tagHELPMAP { DWORD id; DWORD hid; } HELPMAP, *LPHELPMAP;
BOOL OnContextHelp(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam, HELPMAP const * rgCtxMap);
enum { iLeft = 0, iTop, iRight, iBottom };
// from athena file macros, used when saving files, dragdrop etc.
#define FIsDirectory(szFile) PathIsDirectoryA(szFile)
#define MAX_CHARS_FOR_NUM 20
// ********* WARNING THESE ARE NOT READY FOR PRIME TIME USE *********//
HRESULT CreateLink(LPWSTR pwszPathObj, LPWSTR pwszPathLink, LPWSTR pwszDesc); void GetDisplayNameForFile(LPWSTR pwszPathName, LPWSTR pwszDisplayName, ULONG cchDisplayName); HRESULT CreateNewShortCut(LPWSTR pwszPathName, LPWSTR pwszLinkPath, DWORD cchLink); HRESULT ScGetTempFileName(LPTSTR szOrgName, LPTSTR szTempName, BOOL fPrompt, BOOL fLink); LPTSTR SzFileNameFromPathName( LPTSTR szPathName );
void AddWelcomeMessage(IMessageFolder *pFolder);
HRESULT HrSaveMessageToFile(HWND hwnd, LPMIMEMESSAGE pMsg, LPMIMEMESSAGE pSecMsg, BOOL fNews, BOOL fCanBeDirty); BOOL FIsSubDir(LPCSTR szOld, LPCSTR szNew);
VOID OnHelpGoto(HWND hwnd, UINT idh); VOID OnMailGoto(HWND); VOID OnNewsGoto(HWND); VOID OpenClient(HWND, LPCTSTR); VOID OnBrowserGoto(HWND hwnd, LPCTSTR szRegPage, UINT idDefault); BOOL GetClientCmdLine(LPCTSTR szClient, LPTSTR szCmdLine, int cch);
//////////////////////////////////////////////////////////////////////////////
// Shell Toolbar Integration Stuff
//
// The arrays of buttons that we can integrate with the shell are defined in
// cbarrays.cpp and are exported here. The views call Util_MergeToolbarButtons()
// to merge the correct array of buttons onto the shell's toolbar.
//
#if 0
//
// TOOLBARARRAYINFO - Contains the various arrays of default and extra toolbar
// buttons along with the array of strings for those buttons.
typedef struct tagTOOLBARARRAYINFO { const TBBUTTON *rgDefButtons; DWORD cDefButtons; const TBBUTTON *rgExtraButtons; DWORD cExtraButtons; const DWORD *rgidsButtons; DWORD cidsButtons; LPCTSTR pszRegKey; LPCTSTR pszRegValue; } TOOLBARARRAYINFO, *PTOOLBARARRAYINFO;
extern const TOOLBARARRAYINFO g_rgToolbarArrayInfo[]; extern const TOOLBARARRAYINFO g_rgNoteToolbarArrayInfo[]; extern const TOOLBARARRAYINFO g_rgRulesToolbarArray; #endif
//These values should be greater than
#define MailReadNoteType 0
#define MailSendNoteType 1
#define NewsReadNoteType 2
#define NewsSendNoteType 3
#define NOTETYPES_MAX 4
#ifdef DEAD
HRESULT Util_MergeToolbarButtons(IExplorerToolbar* pET, FOLDER_TYPE ftType, const GUID *cguid, LPTBBUTTON *ppTBButtons, DWORD *pcButtons); #endif
interface IImnAccount;
typedef struct tagGETSIGINFO { LPCSTR szSigID; IImnAccount *pAcct; HWND hwnd; BOOL fHtmlOk; BOOL fMail; UINT uCodePage; } GETSIGINFO;
HRESULT HrGetMailNewsSignature(GETSIGINFO *pSigInfo, LPDWORD pdwSigOptions, BSTR *pbstrSig);
HRESULT HrLoadStreamFileFromResource(LPCSTR lpszResourceName, LPSTREAM *ppstm); void ConvertTabsToSpaces(LPSTR lpsz); void ConvertTabsToSpacesW(LPWSTR lpsz); void CombineFilters(int *rgidsFilter, int nFilters, LPSTR pszFilter); void CombineFiltersW(int *rgidsFilter, int nFilters, LPWSTR pwszFilter);
void AthFormatSizeK(DWORD dw, LPTSTR szOut, UINT uiBufSize);
void GetDigitalIDs(IImnAccount *pCertAccount); INT_PTR CALLBACK ErrSecurityNoSigningCertDlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
BOOL FGetSelectedCachedMsg(IMsgContainer *pIMC, HWND hwndList, BOOL fSecure, LPMIMEMESSAGE *ppMsg);
BOOL FileExists(TCHAR *szFile, BOOL fNew);
//---------------------------------------------------------------------------
// Cached Password Support
//---------------------------------------------------------------------------
HRESULT SavePassword(DWORD dwPort, LPSTR pszServer, LPSTR pszUsername, LPSTR pszPassword); HRESULT GetPassword(DWORD dwPort, LPSTR pszServer, LPSTR pszUsername, LPSTR pszPassword, DWORD dwSizeOfPassword); void DestroyPasswordList(void);
//------------------------------
// Drag Drop utils
//------------------------------
HRESULT CALLBACK FreeAthenaDataObj(PDATAOBJINFO pDataObjInfo, DWORD celt);
HRESULT _IsSameObject(IUnknown* punk1, IUnknown* punk2);
// These macros are from \\trango\slmro\proj\win\src\shell\ccshell\inc\ccstock.h
#define SetFlag(f) do {m_dwState |= (f);} while (0)
#define ToggleFlag(f) do {m_dwState ^= (f);} while (0)
#define ClearFlag(f) do {m_dwState &= ~(f);} while (0)
#define IsFlagSet(f) (BOOL)(((m_dwState) & (f)) == (f))
#define IsFlagClear(f) (BOOL)(((m_dwState) & (f)) != (f))
// From wndutil.*
/*
* tabbing, parents etc */ HWND GetTopMostParent(HWND hwndChild); void GetChildRect(HWND hwndDlg, HWND hwndChild, RECT *prc); void SaveFocus(BOOL fActive, HWND *phwnd); void EnableThreadWindows(BOOL fEnable);
/*
* toobar helpers */
void DoToolbarDropdown(HWND hwnd, LPNMHDR lpnmh, HMENU hmenu);
/*
* paint blocker */ HWND HwndStartBlockingPaints(HWND hwnd); void StopBlockingPaints(HWND hwndBlock);
/*
* edit control helpers */ #define FReadOnlyEdit(hwndEdit) (BOOL)(GetWindowLong(hwndEdit, GWL_STYLE)&ES_READONLY)
//Enable/Disable flags for edit menu etc
enum { edfEditFocus =0x00000001, edfUndo =0x00000002, edfEditHasSel =0x00000004, edfEditHasSelAndIsRW=0x00000010, edfPaste =0x00000020 }; void GetEditDisableFlags(HWND hwndEdit, DWORD *pdwFlags); void EnableDisableEditMenu(HMENU hmenuEdit, DWORD dwFlags); void EnableDisableEditToolbar(HWND hwndToolbar, DWORD dwFlags);
/*
* dialog helpers */ BOOL AllocStringFromDlg(HWND hwnd, UINT id, LPTSTR * lplpsz);
/*
* general */ HCURSOR HourGlass();
class CEmptyList { public: CEmptyList() { m_hwndList = NULL; m_hwndBlocker = NULL; m_hwndHeader = NULL; m_pszString = NULL; m_pfnWndProc = NULL; m_hbrBack = NULL; }
~CEmptyList() { if (IsWindow(m_hwndBlocker)) DestroyWindow(m_hwndBlocker); SafeMemFree(m_pszString); if (NULL != m_hbrBack) DeleteObject(m_hbrBack); }
HRESULT Show(HWND hwndList, LPTSTR pszString); HRESULT Hide(void); static LRESULT SubclassWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
private: HWND m_hwndList; HWND m_hwndBlocker; HWND m_hwndHeader; LPTSTR m_pszString; WNDPROC m_pfnWndProc; HBRUSH m_hbrBack; };
HWND FindModalOwner();
void FreeMessageInfo(LPMESSAGEINFO pMsgInfo); LPWSTR Util_EnumFiles(LPCWSTR pwszDir, LPCWSTR pwszMatch);
HRESULT GetDefaultNewsServer(LPTSTR pszServerId, DWORD cchMax);
#define ETW_OE_WINDOWS_ONLY 0x0001
typedef struct _HWNDLIST { DWORD dwFlags; HWND *rgHwnd; int cAlloc; int cHwnd; } HWNDLIST;
HRESULT EnableThreadWindows(HWNDLIST *pHwndList, BOOL fEnable, DWORD dwFlags, HWND hwndExcept); HRESULT GetOEUserName(BSTR *pbstr); HRESULT CloseThreadWindows(HWND hwndExcept, DWORD dwThreadId);
void ActivatePopupWindow(HWND hwnd); BOOL HideHotmail(void); BOOL FIsIMAPOrHTTPAvailable(VOID); BOOL IsBiDiCalendar(void);
LPSTR PszAllocResUrl(LPSTR pszRelative);
BOOL GetTextExtentPoint32AthW(HDC hdc, LPCWSTR lpwString, int cchString, LPSIZE lpSize, DWORD dwFlags);
#endif // __UTIL_H__
|