windows-nt/Source/XPSP1/NT/enduser/netmeeting/ui/conf/confutil.h
2020-09-26 16:20:57 +08:00

398 lines
9.4 KiB
C++

/*
* ConfUtil.h
*
* CConfRoom and app level utility functions
*/
#ifndef _CONFUTIL_H_
#define _CONFUTIL_H_
#include "SDKInternal.h"
#define QUICK_LAUNCH_SUBDIR _T("\\Microsoft\\Internet Explorer\\Quick Launch")
void DeleteShortcut(int csidl, LPCTSTR pszSubDir);
// File Transfer
BOOL FTransferInProgress(VOID);
BOOL FEnableSendFileMenu(VOID);
BOOL FEnableCancelSendMenu(VOID);
BOOL FEnableCancelReceiveMenu(VOID);
// Options Dialog
#define OPTIONS_GENERAL_PAGE 0
#define OPTIONS_SECURITY_PAGE 1
#define OPTIONS_MYINFO_PAGE 2
#define OPTIONS_FRIENDS_PAGE 3
#define OPTIONS_AUDIO_PAGE 4
#define OPTIONS_VIDEO_PAGE 5
#define OPTIONS_DEFAULT_PAGE OPTIONS_GENERAL_PAGE
VOID LaunchConfCpl(HWND hwnd, int nStartPage);
BOOL CanLaunchConfCpl();
// Capabilities
extern BOOL FIsAudioAllowed();
extern BOOL FIsSendVideoAllowed();
extern BOOL FIsReceiveVideoAllowed();
// String Functions
BOOL FLoadString(UINT id, LPTSTR psz, UINT cb = MAX_PATH);
BOOL FLoadString1(UINT id, LPTSTR psz, LPVOID pv);
int FLoadString2(UINT id, LPTSTR psz, UINT cb = MAX_PATH);
LPTSTR PszLoadString(UINT id);
LPTSTR PszAlloc(LPCTSTR pszSrc);
VOID FreePsz(LPTSTR psz);
LPTSTR PszFromBstr(PCWSTR pwStr);
int LoadResInt(UINT id, int iDefault);
HRESULT LPTSTR_to_BSTR(BSTR *pbstr, LPCTSTR psz);
HRESULT BSTR_to_LPTSTR(LPTSTR *ppsz, BSTR bstr);
// Other
BOOL GetDefaultName(LPTSTR pszName, int nBufferMax);
LPCTSTR ExtractServerName(LPCTSTR pcszAddr, LPTSTR pszServer, UINT cchMax);
BOOL FCreateIlsName(LPTSTR pszDest, LPCTSTR pszServer, LPCTSTR pszEmail, int cchMax);
BOOL FLocalIpAddress(DWORD dwIP);
INmConference2 * GetActiveConference(void);
BOOL FIsConferenceActive(void);
// Forward declaration
interface ITranslateAccelerator;
VOID AddModelessDlg(HWND hwnd);
VOID RemoveModelessDlg(HWND hwnd);
VOID AddTranslateAccelerator(ITranslateAccelerator* pTrans);
VOID RemoveTranslateAccelerator(ITranslateAccelerator* pTrans);
BOOL FBrowseForFolder(LPTSTR pszFolder, UINT cchMax, LPCTSTR pszTitle, HWND hwndParent);
VOID DisableControl(HWND hdlg, int id);
VOID KillScrnSaver(void);
int DxpSz(LPCTSTR pcszName);
BOOL FAnsiSz(LPCTSTR psz);
extern int g_cBusyOperations;
VOID DecrementBusyOperations(void);
VOID IncrementBusyOperations(void);
// Useful Macros
#define ClearStruct(lpv) ZeroMemory((LPVOID) (lpv), sizeof(*(lpv)))
// ZONE bitmasks (depends on _rgZonesOther)
#define ZONE_API 0x01
#define ZONE_VIDEO 0x02
#define ZONE_WIZARD 0x04
#define ZONE_QOS 0x08
#define ZONE_REFCOUNT 0x10
#define ZONE_OBJECTS 0x20
#define ZONE_UI 0x40
#define ZONE_CALL 0x0080
// Zone indexes
#define iZONE_API 0
#define iZONE_VIDEO 1
#define iZONE_WIZARD 2
#define iZONE_QOS 3
#define iZONE_REFCOUNT 4
#define iZONE_OBJECTS 5
#define iZONE_UI 6
#define iZONE_CALL 7
// Debugging Macros
#ifdef DEBUG
BOOL InitDebugZones(VOID);
VOID DeinitDebugZones(VOID);
extern HDBGZONE ghZoneOther; // initialized in conf.cpp
// Old: requires double brackets ApiDebugMsg(("x=%d", x));
#define ApiDebugMsg(s) DBGMSG(ghZoneOther, iZONE_API, s)
#define VideoDebugMsg(s) DBGMSG(ghZoneOther, iZONE_VIDEO, s)
// General: DbgMsg(iZONE_API, "x=%d", x);
VOID DbgMsg(UINT iZone, PSTR pszFormat,...);
// Specific: DbgMsgApi("x=%d", x);
VOID DbgMsgApi(PSTR pszFormat,...);
VOID DbgMsgVideo(PSTR pszFormat,...);
VOID DbgMsgRefCount(PSTR pszFormat,...);
VOID DbgMsgUI(PSTR pszFormat,...);
VOID DbgMsgCall(PSTR pszFormat,...);
LPCTSTR PszWSALastError(void);
LPCTSTR PszLastError(void);
LPCTSTR PszHResult(HRESULT hr);
// Redefine the standard HR result display macro
#undef DBGEXIT_HR
#define DBGEXIT_HR(s,hr) DbgZPrintFunction("Exit " #s " (result=%s)", PszHResult(hr));
#else
#define ApiDebugMsg(s)
#define VideoDebugMsg(s)
inline void WINAPI DbgMsgNop(LPCTSTR, ...) { }
#define DbgMsgRefCount 1 ? (void)0 : ::DbgMsgNop
#define DbgMsgApi 1 ? (void)0 : ::DbgMsgNop
#define DbgMsgVideo 1 ? (void)0 : ::DbgMsgNop
#define DbgMsgUI 1 ? (void)0 : ::DbgMsgNop
#define DbgMsgCall 1 ? (void)0 : ::DbgMsgNop
inline void WINAPI DbgMsgZoneNop(UINT, LPCTSTR, ...) { }
#define DbgMsg 1 ? (void) 0 : ::DbgMsgZoneNop
#endif /* DEBUG */
interface ITranslateAccelerator : public IUnknown
{
public:
// Copied from IOleControlSite, but I don't use grfModifiers
virtual HRESULT TranslateAccelerator(
LPMSG pMsg , //Pointer to the structure
DWORD grfModifiers //Flags describing the state of the keys
) = 0;
// Copied from IOleWindow
virtual HRESULT GetWindow(
HWND * phwnd //Pointer to where to return window handle
) = 0;
} ;
BOOL IsWindowActive(HWND hwnd);
class CTranslateAccel : public ITranslateAccelerator, RefCount
{
private:
HWND m_hwnd;
public:
CTranslateAccel(HWND hwnd) : m_hwnd(hwnd)
{
}
HWND GetWindow() const { return(m_hwnd); }
HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, LPVOID *ppvObj)
{ return(E_NOTIMPL); }
ULONG STDMETHODCALLTYPE AddRef()
{ return(RefCount::AddRef()); }
ULONG STDMETHODCALLTYPE Release()
{ return(RefCount::Release()); }
HRESULT TranslateAccelerator(
LPMSG pMsg , //Pointer to the structure
DWORD grfModifiers //Flags describing the state of the keys
)
{
return(S_FALSE);
}
HRESULT GetWindow(
HWND * phwnd //Pointer to where to return window handle
)
{
*phwnd = m_hwnd;
return(S_OK);
}
} ;
class CTranslateAccelTable : public CTranslateAccel
{
private:
HACCEL m_hAccel;
int m_nEntries;
public:
CTranslateAccelTable(HWND hwnd, HACCEL hAccel) : CTranslateAccel(hwnd), m_hAccel(hAccel)
{
m_nEntries = CopyAcceleratorTable(m_hAccel, NULL, 0);
}
HRESULT TranslateAccelerator(
LPMSG pMsg , //Pointer to the structure
DWORD grfModifiers //Flags describing the state of the keys
)
{
HWND hwnd = GetWindow();
WORD cmd = 0;
if (!IsAccelerator(m_hAccel, m_nEntries, pMsg, &cmd) || !IsWindowActive(hwnd))
{
return(S_FALSE);
}
return(::TranslateAccelerator(hwnd, m_hAccel, pMsg) ? S_OK : S_FALSE);
}
} ;
// Global list of modeless dialogs (declared in conf.cpp)
extern CSimpleArray<ITranslateAccelerator*>* g_pDialogList;
extern CRITICAL_SECTION dialogListCriticalSection;
/////////////////////////////////////////////////////////////////////////////
// Connection Point Helpers
HRESULT NmAdvise(IUnknown* pUnkCP, IUnknown* pUnk, const IID& iid, LPDWORD pdw);
HRESULT NmUnadvise(IUnknown* pUnkCP, const IID& iid, DWORD dw);
/////////////////////////////////////////////////////////////////////////////
// NmMkCert wrapper
DWORD MakeCertWrap(LPCSTR szFirstName, LPCSTR szLastName, LPCSTR szEmailName,
DWORD dwFlags );
/////////////////////////////////////////////////////////////////////////////
// MessageBox routines
int ConfMsgBox(HWND hwndParent, LPCTSTR pcszMsg, UINT uType=(MB_OK | MB_ICONINFORMATION));
VOID PostConfMsgBox(UINT uStringID);
VOID DisplayMsgIdsParam(int ids, LPCTSTR pcsz);
int DisplayMsg(LPTSTR pcsz, UINT uType);
VOID DisplayErrMsg(INT_PTR ids);
HWND GetMainWindow();
BOOL FDontShowEnabled(LPCTSTR pszKey);
/////////////////////////////////////////////////////////////////////////////
// Icon utilties
VOID LoadIconImages(void);
VOID FreeIconImages(void);
VOID DrawIconSmall(HDC hdc, int iIcon, int x, int y);
extern HIMAGELIST g_himlIconSmall;
// Create an array that can be easily copied
template <class T>
class CCopyableArray : public CSimpleArray<T>
{
public:
CCopyableArray()
{
}
CCopyableArray(const CCopyableArray<T>& rhs)
{
*this = rhs;
}
CCopyableArray<T>& operator=(const CCopyableArray<T>& rhs)
{
if (&rhs == this)
{
return(*this);
}
RemoveAll();
for (int i=0; i<rhs.GetSize(); ++i)
{
Add(rhs[i]);
}
return(*this);
}
} ;
HFONT GetDefaultFont(void);
// Dialog utilities
BOOL FEmptyDlgItem(HWND hdlg, UINT id);
UINT GetDlgItemTextTrimmed(HWND hdlg, int id, PTCHAR psz, int cch);
UINT TrimDlgItemText(HWND hdlg, UINT id);
int FmtDateTime(LPSYSTEMTIME pst, LPTSTR pszDateTime, int cchMax);
VOID CombineNames(LPTSTR pszResult, int cchResult, LPCTSTR pcszFirst, LPCTSTR pcszLast);
BOOL NMGetSpecialFolderPath(HWND hwndOwner, LPTSTR lpszPath, int nFolder, BOOL fCreate);
//--------------------------------------------------------------------------//
// CDirectoryManager class. //
//--------------------------------------------------------------------------//
class CDirectoryManager
{
public: // public static methods --------------------------------//
static
const TCHAR * const
get_DomainDirectory(void);
static
const TCHAR * const
get_defaultServer(void);
static
void
set_defaultServer
(
const TCHAR * const serverName
);
static
bool
isWebDirectory
(
const TCHAR * const directory = NULL
);
static
const TCHAR * const
get_dnsName
(
const TCHAR * const name
);
static
const TCHAR * const
get_displayName
(
const TCHAR * const name
);
static
const TCHAR * const
loadDisplayName(void);
static
void
get_webDirectoryUrl(LPTSTR szWebDir, int cchmax);
static
const TCHAR * const
get_webDirectoryIls(void);
static
bool
isWebDirectoryEnabled(void);
private: // private static members --------------------------------//
static bool m_webEnabled;
static TCHAR m_ils[ MAX_PATH ];
static TCHAR m_displayName[ MAX_PATH ];
static TCHAR m_displayNameDefault[ MAX_PATH ];
static TCHAR m_defaultServer[ MAX_PATH ];
static TCHAR m_DomainDirectory[ MAX_PATH ];
}; // End of class CDirectoryManager.
//--------------------------------------------------------------------------//
#endif /* _CONFUTIL_H_ */