/* Miranda IM: the free IM client for Microsoft* Windows* Copyright 2000-2009 Miranda ICQ/IM project, all portions of this codebase are copyrighted to the people listed in contributors.txt. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #define OPTIONPAGE_OLD_SIZE offsetof(OPTIONSDIALOGPAGE,hLangpack) #define NEWSTR_ALLOCA(A) (A == NULL)?NULL:strcpy((char*)alloca(strlen(A)+1), A) #define NEWTSTR_ALLOCA(A) (A == NULL)?NULL:_tcscpy((TCHAR*)alloca((_tcslen(A)+1)* sizeof(TCHAR)), A) typedef HMONITOR (WINAPI *pfnMyMonitorFromPoint)(POINT, DWORD); extern pfnMyMonitorFromPoint MyMonitorFromPoint; typedef HMONITOR (WINAPI *pfnMyMonitorFromRect)(LPCRECT, DWORD); extern pfnMyMonitorFromRect MyMonitorFromRect; typedef HMONITOR(WINAPI *pfnMyMonitorFromWindow) (HWND, DWORD); extern pfnMyMonitorFromWindow MyMonitorFromWindow; typedef BOOL(WINAPI *pfnMyGetMonitorInfo) (HMONITOR, LPMONITORINFO); extern pfnMyGetMonitorInfo MyGetMonitorInfo; typedef HRESULT (STDAPICALLTYPE *pfnSHAutoComplete)(HWND, DWORD); extern pfnSHAutoComplete shAutoComplete; typedef HRESULT (STDAPICALLTYPE *pfnSHGetSpecialFolderPathA)(HWND, LPSTR, int, BOOL); typedef HRESULT (STDAPICALLTYPE *pfnSHGetSpecialFolderPathW)(HWND, LPWSTR, int, BOOL); extern pfnSHGetSpecialFolderPathA shGetSpecialFolderPathA; extern pfnSHGetSpecialFolderPathW shGetSpecialFolderPathW; #define shGetSpecialFolderPath shGetSpecialFolderPathW typedef HDESK (WINAPI* pfnOpenInputDesktop)(DWORD, BOOL, DWORD); extern pfnOpenInputDesktop openInputDesktop; typedef HDESK (WINAPI* pfnCloseDesktop)(HDESK); extern pfnCloseDesktop closeDesktop; typedef BOOL (WINAPI* pfnAnimateWindow)(HWND, DWORD, DWORD); extern pfnAnimateWindow animateWindow; typedef BOOL (WINAPI * pfnSetLayeredWindowAttributes) (HWND, COLORREF, BYTE, DWORD); extern pfnSetLayeredWindowAttributes setLayeredWindowAttributes; typedef HTHEME (STDAPICALLTYPE *pfnOpenThemeData)(HWND, LPCWSTR); typedef HRESULT (STDAPICALLTYPE *pfnIsThemeBackgroundPartiallyTransparent)(HTHEME, int, int); typedef HRESULT (STDAPICALLTYPE *pfnDrawThemeParentBackground)(HWND, HDC, const RECT *); typedef HRESULT (STDAPICALLTYPE *pfnDrawThemeBackground)(HTHEME, HDC, int, int, const RECT *, const RECT *); typedef HRESULT (STDAPICALLTYPE *pfnDrawThemeText)(HTHEME, HDC, int, int, LPCWSTR, int, DWORD, DWORD, const RECT *); typedef HRESULT (STDAPICALLTYPE *pfnDrawThemeTextEx)(HTHEME, HDC, int, int, LPCWSTR, int, DWORD, LPRECT, const struct _DTTOPTS *); typedef HRESULT (STDAPICALLTYPE *pfnGetThemeBackgroundContentRect)(HTHEME, HDC, int, int, LPCRECT, LPRECT); typedef HRESULT (STDAPICALLTYPE *pfnGetThemeFont)(HTHEME, HDC, int, int, int, LOGFONT *); typedef HRESULT (STDAPICALLTYPE *pfnCloseThemeData)(HTHEME); typedef HRESULT (STDAPICALLTYPE *pfnEnableThemeDialogTexture)(HWND hwnd, DWORD dwFlags); typedef HRESULT (STDAPICALLTYPE *pfnSetWindowTheme)(HWND, LPCWSTR, LPCWSTR); typedef HRESULT (STDAPICALLTYPE *pfnSetWindowThemeAttribute)(HWND, enum WINDOWTHEMEATTRIBUTETYPE, PVOID, DWORD); typedef BOOL (STDAPICALLTYPE *pfnIsThemeActive)(); typedef HRESULT (STDAPICALLTYPE *pfnBufferedPaintInit)(void); typedef HRESULT (STDAPICALLTYPE *pfnBufferedPaintUninit)(void); typedef HANDLE (STDAPICALLTYPE *pfnBeginBufferedPaint)(HDC, RECT *, BP_BUFFERFORMAT, BP_PAINTPARAMS *, HDC *); typedef HRESULT (STDAPICALLTYPE *pfnEndBufferedPaint)(HANDLE, BOOL); typedef HRESULT (STDAPICALLTYPE *pfnGetBufferedPaintBits)(HANDLE, RGBQUAD **, int *); extern pfnOpenThemeData openThemeData; extern pfnIsThemeBackgroundPartiallyTransparent isThemeBackgroundPartiallyTransparent; extern pfnDrawThemeParentBackground drawThemeParentBackground; extern pfnDrawThemeBackground drawThemeBackground; extern pfnDrawThemeText drawThemeText; extern pfnDrawThemeTextEx drawThemeTextEx; extern pfnGetThemeBackgroundContentRect getThemeBackgroundContentRect; extern pfnGetThemeFont getThemeFont; extern pfnCloseThemeData closeThemeData; extern pfnEnableThemeDialogTexture enableThemeDialogTexture; extern pfnSetWindowTheme setWindowTheme; extern pfnSetWindowThemeAttribute setWindowThemeAttribute; extern pfnIsThemeActive isThemeActive; extern pfnBufferedPaintInit bufferedPaintInit; extern pfnBufferedPaintUninit bufferedPaintUninit; extern pfnBeginBufferedPaint beginBufferedPaint; extern pfnEndBufferedPaint endBufferedPaint; extern pfnGetBufferedPaintBits getBufferedPaintBits; extern ITaskbarList3 * pTaskbarInterface; typedef HRESULT (STDAPICALLTYPE *pfnDwmExtendFrameIntoClientArea)(HWND hwnd, const MARGINS *margins); typedef HRESULT (STDAPICALLTYPE *pfnDwmIsCompositionEnabled)(BOOL *); extern pfnDwmExtendFrameIntoClientArea dwmExtendFrameIntoClientArea; extern pfnDwmIsCompositionEnabled dwmIsCompositionEnabled; extern LPFN_GETADDRINFO MyGetaddrinfo; extern LPFN_FREEADDRINFO MyFreeaddrinfo; extern LPFN_WSASTRINGTOADDRESSA MyWSAStringToAddress; extern LPFN_WSAADDRESSTOSTRINGA MyWSAAddressToString; /**** file.cpp *************************************************************************/ void PushFileEvent(HANDLE hContact, HANDLE hdbe, LPARAM lParam); /**** miranda.cpp **********************************************************************/ extern HINSTANCE hInst; extern HANDLE hOkToExitEvent, hModulesLoadedEvent; /**** utf.cpp **************************************************************************/ __forceinline char* Utf8DecodeA(const char* src) { char* tmp = mir_strdup(src); Utf8Decode(tmp, NULL); return tmp; } #pragma optimize("", on) /**** options.cpp **********************************************************************/ HTREEITEM FindNamedTreeItemAtRoot(HWND hwndTree, const TCHAR* name); /**** skin2icons.cpp *******************************************************************/ HANDLE IcoLib_AddNewIcon(int hLangpack, SKINICONDESC* sid); HICON IcoLib_GetIcon(const char* pszIconName, bool big); HICON IcoLib_GetIconByHandle(HANDLE hItem, bool big); HANDLE IcoLib_IsManaged(HICON hIcon); int IcoLib_ReleaseIcon(HICON hIcon, char* szIconName, bool big); /**** skinicons.cpp ********************************************************************/ HICON LoadSkinProtoIcon(const char* szProto, int status, bool big = false); HICON LoadSkinIcon(int idx, bool big = false); HANDLE GetSkinIconHandle(int idx); HICON LoadIconEx(HINSTANCE hInstance, LPCTSTR lpIconName, BOOL bShared); int ImageList_AddIcon_NotShared(HIMAGELIST hIml, LPCTSTR szResource); int ImageList_ReplaceIcon_NotShared(HIMAGELIST hIml, int iIndex, HINSTANCE hInstance, LPCTSTR szResource); int ImageList_AddIcon_IconLibLoaded(HIMAGELIST hIml, int iconId); int ImageList_AddIcon_ProtoIconLibLoaded(HIMAGELIST hIml, const char* szProto, int iconId); int ImageList_ReplaceIcon_IconLibLoaded(HIMAGELIST hIml, int nIndex, HICON hIcon); void Button_SetIcon_IcoLib(HWND hDlg, int itemId, int iconId, const char* tooltip); void Button_FreeIcon_IcoLib(HWND hDlg, int itemId); void Window_SetIcon_IcoLib(HWND hWnd, int iconId); void Window_SetProtoIcon_IcoLib(HWND hWnd, const char* szProto, int iconId); void Window_FreeIcon_IcoLib(HWND hWnd); #define IconLib_ReleaseIcon(hIcon, szName) IcoLib_ReleaseIcon(hIcon, szName, false); #define Safe_DestroyIcon(hIcon) if (hIcon) DestroyIcon(hIcon) /**** clistmenus.cpp ********************************************************************/ extern HANDLE hMainMenuObject, hContactMenuObject, hStatusMenuObject; extern HANDLE hPreBuildMainMenuEvent, hPreBuildContactMenuEvent; extern const int statusModeList[ MAX_STATUS_COUNT ]; extern const int skinIconStatusList[ MAX_STATUS_COUNT ]; extern const int skinIconStatusFlags[ MAX_STATUS_COUNT ]; int TryProcessDoubleClick(HANDLE hContact); /**** protocols.cpp *********************************************************************/ #define OFFSET_PROTOPOS 200 #define OFFSET_VISIBLE 400 #define OFFSET_ENABLED 600 #define OFFSET_NAME 800 extern LIST accounts; PROTOACCOUNT* __fastcall Proto_GetAccount(const char* accName); PROTOACCOUNT* __fastcall Proto_GetAccount(HANDLE hContact); PROTOCOLDESCRIPTOR* __fastcall Proto_IsProtocolLoaded(const char* szProtoName); bool __fastcall Proto_IsAccountEnabled(PROTOACCOUNT* pa); bool __fastcall Proto_IsAccountLocked(PROTOACCOUNT* pa); PROTO_INTERFACE* AddDefaultAccount(const char* szProtoName); int FreeDefaultAccount(PROTO_INTERFACE* ppi); BOOL ActivateAccount(PROTOACCOUNT* pa); void EraseAccount(const char* pszProtoName); void DeactivateAccount(PROTOACCOUNT* pa, bool bIsDynamic, bool bErase); void UnloadAccount(PROTOACCOUNT* pa, bool bIsDynamic, bool bErase); void OpenAccountOptions(PROTOACCOUNT* pa); void LoadDbAccounts(void); void WriteDbAccounts(void); INT_PTR CallProtoServiceInt(HANDLE hContact, const char* szModule, const char* szService, WPARAM wParam, LPARAM lParam); /**** utils.cpp ************************************************************************/ void HotkeyToName(TCHAR *buf, int size, BYTE shift, BYTE key); WORD GetHotkeyValue(INT_PTR idHotkey); HBITMAP ConvertIconToBitmap(HICON hIcon, HIMAGELIST hIml, int iconId); class StrConvUT { private: wchar_t* m_body; public: StrConvUT(const char* pSrc) : m_body(mir_a2u(pSrc)) {} ~StrConvUT() { mir_free(m_body); } operator const wchar_t* () const { return m_body; } }; class StrConvAT { private: char* m_body; public: StrConvAT(const wchar_t* pSrc) : m_body(mir_u2a(pSrc)) {} ~StrConvAT() { mir_free(m_body); } operator const char* () const { return m_body; } operator const wchar_t* () const { return (wchar_t*)m_body; } // type cast to fake the interface definition operator const LPARAM () const { return (LPARAM)m_body; } }; #define StrConvT(x) StrConvUT(x) #define StrConvTu(x) x #define StrConvA(x) StrConvAT(x) #define StrConvU(x) x