391 lines
11 KiB
C++
391 lines
11 KiB
C++
// Copyright (C) 1996-1997 Microsoft Corporation. All rights reserved.
|
|
|
|
#ifndef __HEADER_H__
|
|
#define __HEADER_H__
|
|
|
|
#ifndef STDCALL
|
|
#define STDCALL __stdcall
|
|
#endif
|
|
|
|
#ifndef INLINE
|
|
#define INLINE __inline // Remove for profiling
|
|
#endif
|
|
|
|
#define MAX_TOPIC_NAME 256
|
|
#define MAX_STRING_RESOURCE_LEN 256
|
|
#define STRING_SEP_CHAR '|'
|
|
const int MAX_FLAGS = 3;
|
|
|
|
const char CH_MACRO = '!'; // means a macro in a .hhc file
|
|
|
|
typedef unsigned long HASH;
|
|
|
|
#define _WINUSERP_ // so winuserp.h doesn't get pulled (which causes fatal errors)
|
|
|
|
//////////////////////////////////// Includes ///////////////////////////////
|
|
|
|
// Don't mess with the order header files are included
|
|
#include <windows.h>
|
|
#include <winnls.h>
|
|
#include <ole2.h>
|
|
#include <stddef.h>
|
|
#include <malloc.h>
|
|
#include <crtdbg.h>
|
|
|
|
#include "IPServer.h"
|
|
|
|
#define NO_SHLWAPI_PATH
|
|
#define NO_SHLWAPI_REG
|
|
#define NO_SHLWAPI_STREAM
|
|
#define NO_SHLWAPI_GDI
|
|
#include <shlwapi.h>
|
|
|
|
|
|
//
|
|
// W2K contants which aren't in our headers.
|
|
//
|
|
#ifndef WM_CHANGEUISTATE
|
|
//--- New messages in NT5 only.
|
|
#define WM_CHANGEUISTATE 0x0127
|
|
#define WM_UPDATEUISTATE 0x0128
|
|
#define WM_QUERYUISTATE 0x0129
|
|
//--- LOWORD(wParam) values in WM_*UISTATE.
|
|
#define UIS_SET 1
|
|
#define UIS_CLEAR 2
|
|
#define UIS_INITIALIZE 3
|
|
//--- HIWORD(wParam) values in WM_*UISTATE
|
|
#define UISF_HIDEFOCUS 0x1
|
|
#define UISF_HIDEACCEL 0x2
|
|
#endif
|
|
|
|
// Debugging Support Class --- ClassObjectCount
|
|
#include "objcnt.h"
|
|
|
|
#undef StrChr
|
|
#undef StrRChr
|
|
#include "unicode.h"
|
|
#include "funcs.h"
|
|
#include "cstr.h"
|
|
#include "shared.h"
|
|
#include "lcmem.h"
|
|
#include "ctable.h"
|
|
#include "wmp.h"
|
|
|
|
// Language Information
|
|
#include "language.h"
|
|
|
|
// Get the ATL includes.
|
|
#include "atlinc.h"
|
|
|
|
#ifdef HHCTRL
|
|
// Include the definitions for HTML Help API
|
|
#include "htmlhelp.h"
|
|
|
|
// Include out global resource cache
|
|
#include "rescache.h"
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
// map as many CRT functions to Win32, ShlWAPI, or private functions as we can
|
|
//
|
|
|
|
// UNICODE
|
|
#define wcscat StrCatW
|
|
#define wcscpy StrCpyW
|
|
#define _wcscpy StrCpyW
|
|
#define wcsncpy StrCpyNW
|
|
#define _wcsncpy StrCpyNW
|
|
#define wcscmp StrCmpW
|
|
#define _wcscmp StrCmpW
|
|
#define wcsicmp StrCmpIW
|
|
#define _wcsicmp StrCmpIW
|
|
#define wcsnicmp StrCmpNIW
|
|
#define wcslen lstrlenW
|
|
|
|
// intrinsics -- no need to map these
|
|
// #define strcat lstrcatA
|
|
// #define strlen lstrlenA
|
|
// #define strcpy lstrcpyA
|
|
// #define strcmp lstrcmpA
|
|
|
|
// ANSI
|
|
#define StrChr StrChrA
|
|
#define strchr StrChrA
|
|
#define strncpy lstrcpynA
|
|
#define stricmp lstrcmpiA
|
|
#define _stricmp lstrcmpiA
|
|
#define strcmpi lstrcmpiA
|
|
#define _strcmpi lstrcmpiA
|
|
#define strncmp StrCmpNA
|
|
#define strnicmp StrCmpNIA
|
|
#define _strnicmp StrCmpNIA
|
|
#define strstr StrStrA
|
|
#define stristr StrStrIA
|
|
|
|
// #define strncat StrCatN --> not supported in IE3 shlwapi
|
|
|
|
// MISC
|
|
#define splitpath SplitPath
|
|
#define _splitpath SplitPath
|
|
#define atoi Atoi
|
|
#define isspace IsSpace
|
|
#define strpbrk StrPBrk
|
|
#define qsort QSort
|
|
#define tolower ToLower
|
|
#define strrchr StrRChr
|
|
|
|
#ifdef _DEBUG
|
|
#define STATIC // because icecap doesn't believe in static functions
|
|
#else
|
|
#define STATIC static
|
|
#endif
|
|
|
|
// the length of a guid once printed out with -'s, leading and trailing bracket,
|
|
// plus 1 for NULL
|
|
|
|
const int GUID_STR_LEN = 40;
|
|
|
|
typedef enum {
|
|
ACT_NOTHING,
|
|
ACT_ABOUT_BOX,
|
|
ACT_CONTENTS,
|
|
ACT_INDEX,
|
|
ACT_RELATED_TOPICS,
|
|
ACT_TEXT_POPUP,
|
|
ACT_WINHELP,
|
|
ACT_HHCTRL_VERSION,
|
|
ACT_SPLASH,
|
|
ACT_SHORTCUT,
|
|
ACT_CLOSE,
|
|
ACT_MINIMIZE,
|
|
ACT_MAXIMIZE,
|
|
ACT_KEYWORD_SEARCH,
|
|
ACT_TCARD, // data stored in m_pszActionData, not m_ptblItems
|
|
ACT_HHWIN_PRINT, // tell hhwin to print the current frameset
|
|
ACT_KLINK,
|
|
ACT_ALINK,
|
|
ACT_SAMPLE,
|
|
} CTRL_ACTION;
|
|
|
|
// The type of image to display for the control
|
|
|
|
typedef enum {
|
|
IMG_BITMAP,
|
|
IMG_CHILD_WINDOW,
|
|
IMG_TEXT,
|
|
IMG_RELATED, // Related topics
|
|
IMG_BUTTON,
|
|
} IMAGE_TYPE;
|
|
|
|
enum THRD_COMMAND {
|
|
THRD_ANY,
|
|
THRD_TERMINATE,
|
|
};
|
|
|
|
typedef enum {
|
|
SK_SET,
|
|
SK_CUR,
|
|
SK_END
|
|
} SEEK_TYPE;
|
|
|
|
#define CH_OPEN_PAREN '('
|
|
#define CH_CLOSE_PAREN ')'
|
|
#define CH_COLON ':'
|
|
#define CH_SEMICOLON ';'
|
|
#define CH_START_QUOTE '`'
|
|
#define CH_END_QUOTE '\''
|
|
#define CH_QUOTE '"'
|
|
#define CH_BACKSLASH '\\'
|
|
#define CH_FORWARDSLASH '/'
|
|
#define CH_EQUAL '='
|
|
#define CH_SPACE ' '
|
|
#define CH_COMMA ','
|
|
#define CH_LEFT_BRACKET '['
|
|
#define CH_RIGHT_BRACKET ']'
|
|
#define CH_TAB '\t'
|
|
|
|
// Same errors as used by hha.dll
|
|
|
|
typedef enum { // File System errors
|
|
FSERR_NONE = 0, // no error
|
|
FSERR_CANCELLED, // user cancelled
|
|
FSERR_CANT_OPEN, // can't open file
|
|
FSERR_CANT_READ, // error while reading the file
|
|
FSERR_CANT_WRITE, // error while writing to the file
|
|
FSERR_INVALID_FORMAT, // invalid file format
|
|
FSERR_TRUNCATED, // file is truncated
|
|
FSERR_INSF_MEMORY, // insuficient global memory
|
|
FSERR_INTERNAL, // internal error
|
|
FSERR_24BIT_NOT_SUPPORTED, // not supported by this file format
|
|
FSERR_REALLY_A_BMP, // This is really a BMP file.
|
|
FSERR_MONO_NOT_SUPPORTED,
|
|
FSERR_256_NOT_SUPPORTED,
|
|
FSERR_NOROOM_FOR_TMP, // insufficient room in windows directory
|
|
FSERR_NON_FLASH_EPS, // not a Flash EPS file
|
|
FSERR_GETDIBITS_FAILURE,
|
|
FSERR_ACCESS_DENIED,
|
|
FSERR_INS_FILE_HANDLES,
|
|
FSERR_INVALID_PATH,
|
|
FSERR_FILE_NOT_FOUND,
|
|
FSERR_DISK_FULL,
|
|
FSERR_UNSUPPORTED_FORMAT,
|
|
FSERR_UNSUPPORTED_GIF_FORMAT,
|
|
FSERR_INVALID_GIF_COLOR,
|
|
FSERR_UNSUPPORTED_GIF_EXTENSION,
|
|
FSERR_CORRUPTED_FILE,
|
|
FSERR_TRY_FILTER, // native doesn't support, so use filter
|
|
FSERR_UNSUPPORTED_JPEG,
|
|
FSERR_UNSUPPORTED_OUTPUT_FORMAT,
|
|
|
|
} FSERR;
|
|
|
|
#define MAX_SS_NAME_LEN 51 // 50 char limit + NULL
|
|
|
|
#define TAMSG_IE_ACCEL 1
|
|
#define TAMSG_TAKE_FOCUS 2
|
|
#define TAMSG_NOT_IE_ACCEL 3
|
|
|
|
#define ANY_PROCESS_ID 0
|
|
|
|
#define WS_EX_LAYOUT_RTL 0x00400000L // Right to left mirroring (Win98 and NT5 only)
|
|
|
|
extern DWORD g_RTL_Style; // additional windows style for RTL layout (all platforms)
|
|
extern DWORD g_RTL_Mirror_Style; // additional windows style for RTL mirroring
|
|
extern BOOL g_fThreadRunning; // TRUE if our thread is doing something
|
|
extern HANDLE g_hsemNavigate;
|
|
extern const CLSID *g_pLibid;
|
|
extern BOOL g_fMachineHasLicense;
|
|
extern BOOL g_fCheckedForLicense;
|
|
extern BOOL g_fServerHasTypeLibrary;
|
|
extern HWND g_hwndParking;
|
|
extern BOOL g_fDualCPU; // -1 until initialized, then TRUE or FALSE
|
|
extern CRITICAL_SECTION g_CriticalSection;
|
|
extern HINSTANCE g_hinstOcx;
|
|
extern HBRUSH g_hbrBackGround; // background brush
|
|
extern HBITMAP g_hbmpSplash;
|
|
extern HPALETTE g_hpalSplash;
|
|
extern HWND g_hwndSplash;
|
|
extern int g_cWindowSlots; // current number of allocated window slots
|
|
extern int g_curHmData;
|
|
extern int g_cHmSlots;
|
|
extern UINT g_fuBiDiMessageBox;
|
|
extern BOOL g_fCoInitialized; // means we called CoInitialize()
|
|
|
|
extern VARIANT_BOOL g_fHaveLocale;
|
|
extern LCID g_lcidLocale;
|
|
extern BOOL g_fSysWin95; // we're under Win95 system, not just NT SUR
|
|
extern BOOL g_fSysWinNT; // we're under some form of Windows NT
|
|
extern BOOL g_fSysWin95Shell; // we're under Win95 or Windows NT SUR { > 3/51)
|
|
extern BOOL g_bWinNT5; // we're under NT5
|
|
extern BOOL g_bWin98; // we're under Win98
|
|
extern BOOL g_fBiDi; // TRUE if this is a BiDi system
|
|
extern BOOL g_bBiDiUi; // TRUE when we have a localized Hebrew or Arabic UI
|
|
extern BOOL g_bArabicUi; // TRUE when we have a Arabic UI
|
|
extern BOOL g_fRegisteredSpash; // TRUE if Splash window has been registered
|
|
extern BOOL g_fNonFirstKey; // accept keyboard entry for non-first level index keys
|
|
extern BOOL g_bMsItsMonikerSupport; // "ms-its:" moniker supported starting with IE 4
|
|
extern BOOL g_fIE3; // affects which features we can support
|
|
|
|
extern BOOL g_fDBCSSystem;
|
|
extern LCID g_lcidSystem; // Only used for input to CompareString. used in util.cpp stristr()
|
|
extern LANGID g_langSystem; // used only by fts.cpp, ipserver.cpp and rescache.cpp
|
|
|
|
extern const char g_szLibName[];
|
|
extern const CLSID *g_pLibid;
|
|
|
|
extern CTable* g_ptblItems;
|
|
|
|
extern const char g_szReflectClassName[]; // "CtlFrameWork_ReflectWindow";
|
|
extern UINT MSG_MOUSEWHEEL;
|
|
|
|
extern const char txtInclude[]; // ":include";
|
|
extern const char txtFileHeader[]; // "file:";
|
|
extern const char txtHttpHeader[]; // "http:";
|
|
extern const char txtFtpHeader[]; // "ftp:";
|
|
extern const char txtZeroLength[]; // "";
|
|
extern const char txtHtmlHelpWindowClass[];
|
|
extern const char txtHtmlHelpChildWindowClass[];
|
|
extern const char txtSizeBarChildWindowClass[];
|
|
extern const char txtSysRoot[];
|
|
extern const char txtMkStore[]; // "mk:@MSITStore:";
|
|
extern const char txtItsMoniker[]; // "its:";
|
|
extern const char txtMsItsMoniker[]; // "ms-its:";
|
|
extern const char txtHlpDir[]; // "Help";
|
|
extern const char txtOpenCmd[]; // "htmlfile\\shell\\open\\command";
|
|
extern const char txtDoubleColonSep[]; // "::";
|
|
extern const char txtSepBack[]; // "::/";
|
|
extern const char txtDefExtension[]; // ".chm";
|
|
extern const char txtCollectionExtension[]; // ".col";
|
|
extern const char txtChmColon[]; // ".chm::";
|
|
extern const char txtDefFile[]; // "::/default.htm";
|
|
|
|
// Internal window types
|
|
extern const char txtDefWindow[]; // Per-chm version.
|
|
extern const char txtGlobalDefWindow[] ; // Global version.
|
|
|
|
// Special windows --- The filename parameter is ignored for these windows.
|
|
extern const char txtPrintWindow[] ;
|
|
|
|
#include "Util.H"
|
|
|
|
// inline function only support for hour glass
|
|
|
|
struct CHourGlass
|
|
{
|
|
CHourGlass()
|
|
{ hcurRestore = SetCursor(LoadCursor(NULL,
|
|
(LPCTSTR) IDC_WAIT)); }
|
|
~CHourGlass()
|
|
{ SetCursor(hcurRestore); }
|
|
|
|
void Restore()
|
|
{ SetCursor(hcurRestore); }
|
|
|
|
HCURSOR hcurRestore;
|
|
};
|
|
|
|
//=--------------------------------------------------------------------------=
|
|
// Global object information table
|
|
//=--------------------------------------------------------------------------=
|
|
// for each object in your application, you have an entry in this table. they
|
|
// do not necessarily have to be CoCreatable, but if they are used, then they
|
|
// should reside here. use the macros to fill in this table.
|
|
//
|
|
typedef struct tagOBJECTINFO {
|
|
|
|
unsigned short usType;
|
|
void *pInfo;
|
|
|
|
} OBJECTINFO;
|
|
|
|
extern OBJECTINFO g_ObjectInfo[];
|
|
|
|
class CBusy
|
|
{
|
|
public:
|
|
|
|
CBusy() { m_iBusyCount = 0; }
|
|
|
|
BOOL Set( BOOL bBusy )
|
|
{
|
|
if( bBusy )
|
|
m_iBusyCount++;
|
|
else
|
|
m_iBusyCount--;
|
|
if( m_iBusyCount < 0 )
|
|
m_iBusyCount = 0;
|
|
return IsBusy();
|
|
}
|
|
inline BOOL IsBusy() { return (BOOL) m_iBusyCount; }
|
|
|
|
private:
|
|
|
|
BOOL m_iBusyCount;
|
|
};
|
|
|
|
extern CBusy g_Busy;
|
|
|
|
|
|
#endif // __HEADER_H__
|