/* * 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* 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 CCopyableArray : public CSimpleArray { public: CCopyableArray() { } CCopyableArray(const CCopyableArray& rhs) { *this = rhs; } CCopyableArray& operator=(const CCopyableArray& rhs) { if (&rhs == this) { return(*this); } RemoveAll(); for (int i=0; i