279 lines
12 KiB
C
279 lines
12 KiB
C
|
// Copyright (C) 1996-1997 Microsoft Corporation. All rights reserved.
|
||
|
|
||
|
#ifndef FASTCALL
|
||
|
#define FASTCALL __fastcall
|
||
|
#endif
|
||
|
|
||
|
#define SETTHIS(hwnd) SetWindowLongPtr(hwnd, GWLP_USERDATA, reinterpret_cast<LONG_PTR>(this));
|
||
|
#define GETTHIS(Class,hwnd) (reinterpret_cast<Class*>(GetWindowLongPtr(hwnd, GWLP_USERDATA)))
|
||
|
#define DESTROYIFVALID(hwnd) if (IsValidWindow(hwnd)) DestroyWindow(hwnd);
|
||
|
|
||
|
#define STR_BSTR 0
|
||
|
#define STR_OLESTR 1
|
||
|
#define BSTRFROMANSI(x) (BSTR)MakeWideStrFromAnsi((LPSTR)(x), STR_BSTR)
|
||
|
#define OLESTRFROMANSI(x) (LPOLESTR)MakeWideStrFromAnsi((LPSTR)(x), STR_OLESTR)
|
||
|
#define BSTRFROMRESID(x) (BSTR)MakeWideStrFromResourceId(x, STR_BSTR)
|
||
|
#define OLESTRFROMRESID(x) (LPOLESTR)MakeWideStrFromResourceId(x, STR_OLESTR)
|
||
|
#define COPYOLESTR(x) (LPOLESTR)MakeWideStrFromWide(x, STR_OLESTR)
|
||
|
#define COPYBSTR(x) (BSTR)MakeWideStrFromWide(x, STR_BSTR)
|
||
|
|
||
|
#define UnregisterControlObject UnregisterAutomationObject
|
||
|
|
||
|
#define ELEMENTS(array) (sizeof(array) / sizeof(array[0]))
|
||
|
|
||
|
#define HH_URL_PREFIX_LESS 1
|
||
|
#define HH_URL_UNQUALIFIED 2
|
||
|
#define HH_URL_QUALIFIED 3
|
||
|
#define HH_URL_JAVASCRIPT ((UINT)-2)
|
||
|
#define HH_URL_UNKNOWN ((UINT)-1)
|
||
|
|
||
|
// *********************** Assertion Definitions ************************** //
|
||
|
|
||
|
// Get rid of any previously defined versions
|
||
|
|
||
|
#undef ASSERT
|
||
|
#undef VERIFY
|
||
|
|
||
|
#ifndef THIS_FILE
|
||
|
#define THIS_FILE __FILE__
|
||
|
#endif
|
||
|
|
||
|
// *********************** Function Prototypes **************************** //
|
||
|
|
||
|
#if defined(_DEBUG)
|
||
|
void AssertErrorReport(PCSTR pszExpression, UINT line, LPCSTR pszFile);
|
||
|
#endif
|
||
|
|
||
|
class CStr; // forward reference
|
||
|
|
||
|
// functions formerly in hhctrlex.h
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif // __cplusplus
|
||
|
//PSTR stristr(PCSTR pszMain, PCSTR pszSub); // case-insensitive string search
|
||
|
PSTR FirstNonSpace(PCSTR psz); // return pointer to first non-space character
|
||
|
WCHAR *FirstNonSpaceW(WCHAR *psz); // return pointer to first non-space character
|
||
|
//PSTR StrChr(PCSTR pszString, char ch); // DBCS-aware character search
|
||
|
PSTR StrRChr(PCSTR pszString, char ch); // DBCS-aware character search
|
||
|
DWORD WinHelpHashFromSz(PCSTR pszKey); // converts string into a WinHelp-compatible hash number
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif // __cplusplus
|
||
|
|
||
|
BOOL __cdecl _FormatMessage(LPCSTR szTemplate, LPSTR szBuf, UINT cchBuf, ...);
|
||
|
|
||
|
LRESULT WINAPI HelpWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||
|
LRESULT WINAPI ChildWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||
|
|
||
|
DWORD CreatePath(PSTR pszPath);
|
||
|
void AddTrailingBackslash(PSTR psz);
|
||
|
LPSTR CatPath(LPSTR lpTop, LPCSTR lpTail);
|
||
|
HWND ChangeHtmlTopic(PCSTR pszFile, HWND hwndChild, BOOL bHighlight = FALSE);
|
||
|
BOOL CheckForLicense();
|
||
|
BOOL CheckLicenseKey(LPWSTR wszCheckme);
|
||
|
void CheckWindowPosition(RECT* prc, BOOL fAllowShrinkage);
|
||
|
void ConvertBackSlashToForwardSlash(PSTR pszUrl);
|
||
|
void ConvertSpacesToEscapes(PCSTR pszSrc, CStr* pcszDst);
|
||
|
BOOL ConvertToCacheFile(PCSTR pszSrc, PSTR pszDst);
|
||
|
int ConvertWz(const WCHAR * pwz, char * psz, int len);
|
||
|
HPALETTE CreateBIPalette(PBITMAPINFOHEADER pbihd);
|
||
|
HRESULT CreateComponentCategory(GUID catid, WCHAR* catDescription);
|
||
|
void CreateDefaultWindowType(PCSTR pszCompiledFile, PCSTR pszWindow);
|
||
|
BOOL CreateFolder(PCSTR pszPath);
|
||
|
int IEColorToWin32Color( PCWSTR pwsz );
|
||
|
HFONT CreateUserFont(PCSTR pszFont, COLORREF* pclrFont = NULL, HDC hDC = NULL, INT charset = -1);
|
||
|
HFONT CreateUserFontW(WCHAR *pszFont, COLORREF* pclrFont = NULL, HDC hDC = NULL, INT charset = -1);
|
||
|
void DeleteAllHmData();
|
||
|
BOOL DeleteKeyAndSubKeys(HKEY hk, LPSTR pszSubKey);
|
||
|
BOOL DlgOpenFile(HWND hwndParent, PCSTR pszFile, CStr* pcsz);
|
||
|
BOOL DlgOpenDirectory(HWND hwndParent, CStr* pcsz);
|
||
|
void doAuthorMsg(UINT idStringFormatResource, PCSTR pszSubString);
|
||
|
HWND doDisplayIndex(HWND hwndCaller, LPCSTR pszFile, LPCTSTR pszKeyword);
|
||
|
HWND doDisplayToc(HWND hwndCaller, LPCSTR pszFile, DWORD_PTR dwData);
|
||
|
void doHhctrlVersion(HWND hwndParent, PCSTR pszCHMVersion);
|
||
|
void doHHWindowJump(PCSTR pszUrl, HWND hwndChild);
|
||
|
BOOL doJumpUrl(HWND hwndParent, PCSTR pszCurUrl, PSTR pszDstUrl);
|
||
|
void doRelatedTopics(HWND);
|
||
|
HWND doTpHelpWmHelp(HWND hwndMain, LPCSTR pszFile, DWORD_PTR ulData);
|
||
|
HWND doTpHelpContextMenu(HWND hwndMain, LPCSTR pszFile, DWORD_PTR ulData);
|
||
|
BOOL FindDarwinURL(PCSTR pszGUID, PCSTR pszChmFile, CStr* pcszResult);
|
||
|
PCSTR FindEqCharacter(PCSTR pszLine);
|
||
|
PCSTR FindFilePortion(PCSTR pszFile);
|
||
|
HWND FindMessageParent(HWND hwndChild);
|
||
|
BOOL FindThisFile(HWND hwndParent, PCSTR pszFile, CStr* pcszFile, BOOL fAskUser = TRUE);
|
||
|
HWND FindTopLevelWindow(HWND hwnd);
|
||
|
DWORD GetButtonDimensions(HWND hwnd, HFONT hFont, PCSTR psz);
|
||
|
PCSTR GetCompiledName(PCSTR pszName, CStr* pcsz);
|
||
|
BOOL GetHighContrastFlag(void);
|
||
|
PSTR GetLeftOfEquals(PCSTR pszString);
|
||
|
BSTR GetLicenseKey(void);
|
||
|
HWND GetParentSize(RECT* prcParent, HWND hwndParent, int padding, int navpos);
|
||
|
HWND GetParkingWindow(void);
|
||
|
void GetRegWindowsDirectory(PSTR pszDstPath);
|
||
|
void GetScreenResolution(HWND hWnd, RECT* prc);
|
||
|
void GetWorkArea() ;
|
||
|
DWORD GetStaticDimensions(HWND hwnd, HFONT hFont, PCSTR psz, int max_len );
|
||
|
DWORD GetStaticDimensionsW(HWND hwnd, HFONT hFont, WCHAR *psz, int max_len );
|
||
|
PCSTR GetStringResource(int idString);
|
||
|
PCSTR GetStringResource(int idString, HINSTANCE);
|
||
|
PCWSTR GetStringResourceW(int idString);
|
||
|
PCWSTR GetStringResourceW(int idString, HINSTANCE);
|
||
|
HASH HashFromSz(PCSTR pszKey);
|
||
|
int HHA_Msg(UINT command, WPARAM wParam = 0, LPARAM lParam = 0);
|
||
|
void HiMetricToPixel(const SIZEL *pSizeInHiMetric, SIZEL *pSizeinPixels);
|
||
|
HWND xHtmlHelpA(HWND hwndCaller, LPCSTR pszFile, UINT uCommand, DWORD_PTR dwData);
|
||
|
HWND xHtmlHelpW(HWND hwndCaller, LPCWSTR pszFile, UINT uCommand, DWORD_PTR dwData);
|
||
|
BOOL IsCollectionFile(PCSTR pszFile);
|
||
|
BOOL IsCompiledURL( PCSTR pszFile );
|
||
|
UINT GetURLType( PCSTR pszURL );
|
||
|
BOOL IsCompiledHtmlFile(PCSTR pszFile, CStr* pcszFile = NULL);
|
||
|
BOOL IsHelpAuthor(HWND hwndCaller);
|
||
|
BOOL IsSamePrefix(PCWSTR pwszMain, PCWSTR pwszSub, int cchPrefix = -1);
|
||
|
BOOL IsSamePrefix(PCSTR pszMain, PCSTR pszSub, int cbPrefix = -1);
|
||
|
BOOL IsThisAWinHelpFile(HWND hwndCaller, PCSTR pszFile);
|
||
|
BOOL IsValidAddress(const void* lp, UINT nBytes, BOOL bReadWrite = TRUE);
|
||
|
BOOL IsValidString(LPCSTR lpsz, int nLength = -1);
|
||
|
BOOL IsValidString(LPCWSTR lpsz, int nLength = -1);
|
||
|
void ItDoesntWork(void);
|
||
|
LPWSTR MakeWideStr(LPSTR psz, UINT codepage);
|
||
|
LPWSTR MakeWideStrFromAnsi(LPSTR, BYTE bType);
|
||
|
LPWSTR MakeWideStrFromResourceId(WORD, BYTE bType);
|
||
|
LPWSTR MakeWideStrFromWide(LPWSTR, BYTE bType);
|
||
|
void MemMove(void * dst, const void * src, int count);
|
||
|
BOOL MoveClientWindow(HWND hwndParent, HWND hwndChild, const RECT *prc, BOOL fRedraw);
|
||
|
int MsgBox(int idFormatString, PCSTR pszSubString, UINT nType = MB_OK);
|
||
|
int MsgBox(int idString, UINT nType = MB_OK);
|
||
|
int MsgBox(PCSTR pszMsg, UINT nType = MB_OK);
|
||
|
LPVOID OleAlloc(UINT cb);
|
||
|
void OleFree(LPVOID pb);
|
||
|
HRESULT OleInitMalloc(void);
|
||
|
HWND OnDisplayPopup(HWND hwndCaller, LPCSTR pszFile, DWORD dwData);
|
||
|
HWND OnDisplayTopic(HWND hwndCaller, LPCSTR pszFile, DWORD_PTR dwData);
|
||
|
HWND OnHelpContext(HWND hwndCaller, LPCSTR pszFile, DWORD_PTR dwData);
|
||
|
void OOM(void);
|
||
|
BOOL PaintShadowBackground(HWND hwnd, HDC hdc, COLORREF clrBackground = (COLORREF) -1);
|
||
|
void PixelToHiMetric(const SIZEL *pSizeInPixels, SIZEL *pSizeInHiMetric);
|
||
|
void QSort(void *pbase, UINT num, UINT width, int (FASTCALL *compare)(const void *, const void *));
|
||
|
BOOL RegisterAutomationObject(LPCSTR pszLibName, LPCSTR pszObjectName, long lVersion, REFCLSID riidLibrary, REFCLSID riidObject);
|
||
|
HRESULT RegisterCLSIDInCategory(REFCLSID clsid, GUID catid);
|
||
|
BOOL RegisterControlObject(LPCSTR pszLibName, LPCSTR pszObjectName, long lVersion, REFCLSID riidLibrary, REFCLSID riidObject, DWORD dwMiscStatus, WORD wToolboxBitmapId);
|
||
|
void RegisterOurWindow();
|
||
|
BOOL RegisterUnknownObject(LPCSTR pszObjectName, REFCLSID riidObject);
|
||
|
BOOL RegSetMultipleValues(HKEY hkey, ...);
|
||
|
void RemoveTrailingSpaces(PSTR pszString);
|
||
|
void SendStringToParent(PCSTR pszMsg);
|
||
|
PSTR StrToken(PSTR pszList, PCSTR pszDelimeters);
|
||
|
PSTR SzTrimSz(PSTR pszOrg);
|
||
|
BOOL UnregisterAutomationObject(LPCSTR pszLibName, LPCSTR pszObjectName, long lVersion, REFCLSID riidObject);
|
||
|
HRESULT UnRegisterCLSIDInCategory(REFCLSID clsid, GUID catid);
|
||
|
BOOL UnregisterData(void);
|
||
|
BOOL UnregisterTypeLibrary(REFCLSID riidLibrary);
|
||
|
BOOL UnregisterUnknownObject(REFCLSID riidObject);
|
||
|
|
||
|
typedef UINT (WINAPI *PFN_GETWINDOWSDIRECTORY)( LPTSTR lpBuffer, UINT uSize );
|
||
|
typedef enum { HH_SYSTEM_WINDOWS_DIRECTORY, HH_USERS_WINDOWS_DIRECTORY } SYSDIRTYPES;
|
||
|
|
||
|
UINT HHGetWindowsDirectory( LPSTR lpBuffer, UINT uSize, UINT uiType = HH_SYSTEM_WINDOWS_DIRECTORY );
|
||
|
UINT HHGetHelpDirectory( LPSTR lpBuffer, UINT uSize );
|
||
|
UINT HHGetGlobalCollectionPathname( LPTSTR lpBuffer, UINT uSize , BOOL *pbNewPath);
|
||
|
UINT HHGetOldGlobalCollectionPathname( LPTSTR lpBuffer, UINT uSize );
|
||
|
|
||
|
HRESULT HHGetUserDataPath( LPSTR pszPath );
|
||
|
HRESULT HHGetHelpDataPath( LPSTR pszPath );
|
||
|
HRESULT HHGetUserDataPathname( LPSTR lpBuffer, UINT uSize );
|
||
|
HRESULT HHGetCurUserDataPath( LPSTR pszPath );
|
||
|
|
||
|
// Internal API definitions.
|
||
|
#include "hhpriv.h"
|
||
|
// Look for the information in the hhcolreg.dat file.
|
||
|
int GetLocationFromTitleTag(LPCSTR szCollection, HH_TITLE_FULLPATH* pTitleFullPath) ;
|
||
|
|
||
|
int FASTCALL CompareIntPointers(const void *pval1, const void *pval2);
|
||
|
void FASTCALL Itoa(int val, PSTR pszDst);
|
||
|
int FASTCALL Atoi(PCSTR psz);
|
||
|
|
||
|
// *********************** Debug/Internal Functions ********************** //
|
||
|
|
||
|
#ifdef _DEBUG
|
||
|
|
||
|
// IASSERT is available in _DEBUG builds
|
||
|
|
||
|
#define IASSERT(exp) \
|
||
|
{ \
|
||
|
((exp) ? (void) 0 : \
|
||
|
AssertErrorReport(#exp, __LINE__, THIS_FILE)); \
|
||
|
}
|
||
|
|
||
|
#define IASSERT_COMMENT(exp, pszComment) \
|
||
|
{ \
|
||
|
((exp) ? (void) 0 : \
|
||
|
AssertErrorReport(pszComment, __LINE__, THIS_FILE)); \
|
||
|
}
|
||
|
|
||
|
#else
|
||
|
|
||
|
#define IASSERT(exp)
|
||
|
#define IASSERT_COMMENT(exp, pszComment)
|
||
|
|
||
|
#endif
|
||
|
|
||
|
#ifdef _DEBUG
|
||
|
|
||
|
#define ASSERT(exp) \
|
||
|
{ \
|
||
|
((exp) ? (void) 0 : \
|
||
|
AssertErrorReport(#exp, __LINE__, THIS_FILE)); \
|
||
|
}
|
||
|
|
||
|
#define ASSERT_COMMENT(exp, pszComment) \
|
||
|
{ \
|
||
|
((exp) ? (void) 0 : \
|
||
|
AssertErrorReport(pszComment, __LINE__, THIS_FILE)); \
|
||
|
}
|
||
|
|
||
|
#define FAIL(pszComment) AssertErrorReport(pszComment, __LINE__, THIS_FILE);
|
||
|
|
||
|
#define VERIFY(exp) ASSERT(exp)
|
||
|
#define VERIFY_RESULT(exp1, exp2) ASSERT((exp1) == (exp2))
|
||
|
#define DEBUG_ReportOleError doReportOleError
|
||
|
void doReportOleError(HRESULT hres);
|
||
|
__inline void DBWIN(PCSTR psz) {
|
||
|
SendStringToParent(psz);
|
||
|
SendStringToParent("\r\n");
|
||
|
}
|
||
|
|
||
|
#define CHECK_POINTER(val) if (!(val) || IsBadWritePtr((void *)(val), sizeof(void *))) return E_POINTER
|
||
|
|
||
|
#else // non-debugging version
|
||
|
|
||
|
#define ASSERT(exp)
|
||
|
#define ASSERT_COMMENT(exp, pszComment)
|
||
|
#define VERIFY(exp) ((void)(exp))
|
||
|
#define VERIFY_RESULT(exp1, exp2) ((void)(exp))
|
||
|
#define DEBUG_ReportOleError(hres)
|
||
|
#define DBWIN(psz)
|
||
|
#define FAIL(pszComment)
|
||
|
#define CHECK_POINTER(val)
|
||
|
|
||
|
#define THIS_FILE __FILE__
|
||
|
|
||
|
#endif
|
||
|
|
||
|
// zero fill everything after the vtbl pointer
|
||
|
#define ZERO_INIT_CLASS(base_class) \
|
||
|
ClearMemory((PBYTE) ((base_class*) this) + sizeof(base_class*), \
|
||
|
sizeof(*this) - sizeof(base_class*));
|
||
|
#define ZERO_STRUCTURE(foo) ClearMemory(&foo, sizeof(foo))
|
||
|
#define ClearMemory(p, cb) memset(p, 0, cb)
|
||
|
|
||
|
__inline void StrCopyWide(LPWSTR psz1, LPCWSTR psz2) {
|
||
|
while (*psz1++ = *psz2++);
|
||
|
}
|
||
|
|
||
|
// HHA functions
|
||
|
|
||
|
extern int (STDCALL *pDllMsgBox)(int idFormatString, PCSTR pszSubString, UINT nType);
|
||
|
extern PCSTR (STDCALL *pGetDllStringResource)(int idFormatString);
|
||
|
|
||
|
void WINAPI AWMessagePump(HWND hwnd);
|