windows-nt/Source/XPSP1/NT/shell/comdlg32/comdlg32.h
2020-09-26 16:20:57 +08:00

479 lines
11 KiB
C

/*++
Copyright (c) 1990-1998, Microsoft Corporation All rights reserved.
Module Name:
comdlg32.h
Abstract:
This module contains the private header information for the Win32
common dialogs.
Revision History:
--*/
#ifndef COMDLG_COMDLG32
#define COMDLG_COMDLG32
//
// Include Files.
//
#include <w4warn.h>
/*
* Level 4 warnings to be turned on.
* Do not disable any more level 4 warnings.
*/
#pragma warning(disable:4306) // 'type cast' : conversion from 'LANGID' to 'LPVOID ' of greater size
#pragma warning(disable:4245) // 'initializing' : conversion from 'HRESULT' to 'DWORD', signed/unsigned mismatch
#pragma warning(disable:4213) // nonstandard extension used : cast on l-value
#pragma warning(disable:4305) // 'type cast' : truncation from 'LPVOID ' to 'LANGID'
#pragma warning(disable:4127) // conditional expression is constant
#pragma warning(disable:4189) // 'hEnum' : local variable is initialized but not referenced
#pragma warning(disable:4057) // 'function' : 'const LPCSTR ' differs in indirection to slightly different base types f 'BYTE [32]'
#pragma warning(disable:4706) // assignment within conditional expression
#pragma warning(disable:4701) // local variable 'lFract' may be used without having been initialized
#pragma warning(disable:4702) // unreachable code
#include "isz.h"
#include "cderr.h"
#ifdef __cplusplus
extern "C" {
#endif
//
// Constant Declarations.
//
#define SEM_NOERROR 0x8003
//
// There really should be no "max" path lengths, but for now,
// since unc will take up RMLEN (lmcons.h), make it 98.
//
#define CCHUNCPATH 98
#define CCHNETPATH 358
#define MAX_THREADS 128
#define CHAR_A TEXT('a')
#define CHAR_CAP_A TEXT('A')
#define CHAR_C TEXT('c')
#define CHAR_Z TEXT('z')
#define CHAR_NULL TEXT('\0')
#define CHAR_COLON TEXT(':')
#define CHAR_BSLASH TEXT('\\')
#define CHAR_DOT TEXT('.')
#define CHAR_QMARK TEXT('?')
#define CHAR_STAR TEXT('*')
#define CHAR_SLASH TEXT('/')
#define CHAR_SPACE TEXT(' ')
#define CHAR_QUOTE TEXT('"')
#define CHAR_PLUS TEXT('+')
#define CHAR_LTHAN TEXT('<')
#define CHAR_BAR TEXT('|')
#define CHAR_COMMA TEXT(',')
#define CHAR_LBRACKET TEXT('[')
#define CHAR_RBRACKET TEXT(']')
#define CHAR_EQUAL TEXT('=')
#define CHAR_SEMICOLON TEXT(';')
#define STR_BLANK TEXT("")
#define STR_SEMICOLON TEXT(";")
#define IS_DOTEND(ch) ((ch) == CHAR_DOT || (ch) == 0 || ((ch) != CHAR_STAR))
#define PARSE_DIRECTORYNAME -1
#define PARSE_INVALIDDRIVE -2
#define PARSE_INVALIDPERIOD -3
#define PARSE_MISSINGDIRCHAR -4
#define PARSE_INVALIDCHAR -5
#define PARSE_INVALIDDIRCHAR -6
#define PARSE_INVALIDSPACE -7
#define PARSE_EXTENSIONTOOLONG -8
#define PARSE_FILETOOLONG -9
#define PARSE_EMPTYSTRING -10
#define PARSE_WILDCARDINDIR -11
#define PARSE_WILDCARDINFILE -12
#define PARSE_INVALIDNETPATH -13
#define PARSE_NOXMEMORY -14
#define OF_FILENOTFOUND 2
#define OF_PATHNOTFOUND 3
#define OF_NOFILEHANDLES 4
#define OF_ACCESSDENIED 5 // OF_NODISKINFLOPPY
#define OF_WRITEPROTECTION 19
#define OF_SHARINGVIOLATION 32
#define OF_NETACCESSDENIED 65
#define OF_DISKFULL 82
#define OF_INT24FAILURE 83
#define OF_CREATENOMODIFY 96
#define OF_NODRIVE 97
#define OF_PORTNAME 98
#define OF_LAZYREADONLY 99
#define OF_DISKFULL2 112
#ifndef DCE_UNICODIZED
#define DeviceCapabilitiesExA DeviceCapabilitiesEx
#endif
//
// Used to determine which type of message to send to the app.
//
#define COMDLG_ANSI 0x0
#define COMDLG_WIDE 0x1
#define HNULL ((HANDLE) 0)
#define cbResNameMax 32
#define cbDlgNameMax 32
//
// Platform specific definitions.
//
#ifdef WINNT
#define IS16BITWOWAPP(p) ((p)->Flags & CD_WOWAPP)
#else
#define IS16BITWOWAPP(p) (GetProcessDword(0, GPD_FLAGS) & GPF_WIN16_PROCESS)
#endif
#ifdef WX86
#define ISWX86APP(p) ((p)->Flags & CD_WX86APP)
#define GETGENERICHOOKFN(p,fn) (ISWX86APP(p) ? Wx86GetX86Callback((p)->fn) : (p)->fn)
#else
#define ISWX86APP(p) (FALSE)
#define GETGENERICHOOKFN(p,fn) ((p)->fn)
#endif
#define GETHOOKFN(p) GETGENERICHOOKFN(p,lpfnHook)
#define GETPRINTHOOKFN(p) GETGENERICHOOKFN(p,lpfnPrintHook)
#define GETSETUPHOOKFN(p) GETGENERICHOOKFN(p,lpfnSetupHook)
#define GETPAGEPAINTHOOKFN(p) GETGENERICHOOKFN(p,lpfnPagePaintHook)
#ifndef CD_WX86APP
#define CD_WX86APP (0) // Nothing special if we don't have it defined
#endif
//
// Typedef Declarations.
//
//
// External Declarations.
//
extern HINSTANCE g_hinst; // instance handle of library
extern SHORT cyCaption, cyBorder, cyVScroll;
extern SHORT cxVScroll, cxBorder, cxSize;
extern TCHAR szNull[];
extern TCHAR szStar[];
extern TCHAR szStarDotStar[];
extern BOOL bMouse; // system has a mouse
extern BOOL bCursorLock;
extern BOOL bWLO; // running with WLO
extern BOOL bDBCS; // running DBCS
extern WORD wWinVer; // windows version
extern WORD wDOSVer; // DOS version
extern BOOL g_bUserPressedCancel; // user pressed cancel button
//
// initialized via RegisterWindowMessage
//
extern UINT msgWOWLFCHANGE;
extern UINT msgWOWDIRCHANGE;
extern UINT msgWOWCHOOSEFONT_GETLOGFONT;
extern UINT msgLBCHANGEA;
extern UINT msgSHAREVIOLATIONA;
extern UINT msgFILEOKA;
extern UINT msgCOLOROKA;
extern UINT msgSETRGBA;
extern UINT msgHELPA;
extern UINT msgLBCHANGEW;
extern UINT msgSHAREVIOLATIONW;
extern UINT msgFILEOKW;
extern UINT msgCOLOROKW;
extern UINT msgSETRGBW;
extern UINT msgHELPW;
extern UINT g_cfCIDA;
extern DWORD g_tlsLangID;
//
// Function Prototypes.
//
VOID TermFind(void);
VOID TermColor(void);
VOID TermFont(void);
VOID TermFile(void);
VOID TermPrint(void);
void FreeImports(void);
//
// dlgs.c
//
VOID
HourGlass(
BOOL bOn);
void
StoreExtendedError(
DWORD dwError);
DWORD
GetStoredExtendedError(void);
HBITMAP WINAPI
LoadAlterBitmap(
int id,
DWORD rgbReplace,
DWORD rgbInstead);
VOID
AddNetButton(
HWND hDlg,
HANDLE hInstance,
int dyBottomMargin,
BOOL bAddAccel,
BOOL bTryLowerRight,
BOOL bTryLowerLeft);
BOOL
IsNetworkInstalled(void);
int CDLoadStringEx(UINT uiCP, HINSTANCE hInstance, UINT uID, LPTSTR lpBuffer, int nBufferMax);
int CDLoadString(HINSTANCE hInstance, UINT uID, LPTSTR lpBuffer, int nBufferMax);
LANGID
GetDialogLanguage(
HWND hwndOwner,
HANDLE hDlgTemplate);
//
// parse.c
//
int
ParseFileNew(
LPTSTR pszPath,
int *pnExtOffset,
BOOL bWowApp,
BOOL bNewStyle);
int
ParseFileOld(
LPTSTR pszPath,
int *pnExtOffset,
int *pnOldExt,
BOOL bWowApp,
BOOL bNewStyle);
DWORD
ParseFile(
LPTSTR lpstrFileName,
BOOL bLFNFileSystem,
BOOL bWowApp,
BOOL bNewStyle);
LPTSTR
PathRemoveBslash(
LPTSTR lpszPath);
BOOL
IsWild(
LPCTSTR lpsz);
VOID
AppendExt(
LPTSTR lpszPath,
LPCTSTR lpExtension,
BOOL bWildcard);
BOOL
IsUNC(
LPCTSTR lpszPath);
BOOL
PortName(
LPTSTR lpszFileName);
BOOL
IsDirectory(
LPTSTR pszPath);
int
WriteProtectedDirCheck(
LPCTSTR lpszFile);
BOOL
FOkToWriteOver(
HWND hDlg,
LPTSTR szFileName);
int
CreateFileDlg(
HWND hDlg,
LPTSTR szPath);
//
// Fileopen specific stuff stashed here so we can free it upon
// a DLL_PROCESS_DETACH.
//
typedef struct _OFN_DISKINFO {
UINT cchLen; // number of chars allocated in 4 lptstrs
LPTSTR lpAbbrName; // single line form
LPTSTR lpMultiName; // drop-down form
LPTSTR lpName; // true form (for comparisons)
LPTSTR lpPath; // path prefix (a:, or \\server\share) for file searches
TCHAR wcDrive; // drive letter, 0 for unc
BOOL bCasePreserved;
DWORD dwType;
BOOL bValid;
} OFN_DISKINFO;
#define MAX_DISKS 100
#define WNETENUM_BUFFSIZE 0x4000
//
// Defines for AddNetButton.
//
#define FILE_LEFT_MARGIN 5
#define FILE_RIGHT_MARGIN 3
#define FILE_TOP_MARGIN 0
#define FILE_BOTTOM_MARGIN 3
#ifdef WX86
//
// Wx86 support for calling from RISC into x86 hooks
//
PVOID
Wx86GetX86Callback(
PVOID lpfnHook);
typedef PVOID
(*PALLOCCALLBX86)(
PVOID pfnx86,
ULONG CBParamType,
PVOID ThunkDebug,
PULONG pLogFlags);
extern PALLOCCALLBX86 pfnAllocCallBx86;
#endif
#ifdef __cplusplus
}; // extern "C"
#endif
// For WOW support on WINNT
#ifdef WINNT
VOID Ssync_ANSI_UNICODE_Struct_For_WOW(HWND hDlg, BOOL fDirection, DWORD dwID);
VOID Ssync_ANSI_UNICODE_CC_For_WOW(HWND hDlg, BOOL f_ANSI_to_UNICODE);
VOID Ssync_ANSI_UNICODE_CF_For_WOW(HWND hDlg, BOOL f_ANSI_to_UNICODE);
VOID Ssync_ANSI_UNICODE_OFN_For_WOW(HWND hDlg, BOOL f_ANSI_to_UNICODE);
VOID Ssync_ANSI_UNICODE_PD_For_WOW(HWND hDlg, BOOL f_ANSI_to_UNICODE);
#endif
// For nested FileOpen/Save common dialog support (something several 16-bit apps
// are known to do). We keep a list of all the dialogs that are active for each
// thread in a process. We make the assumption that common dialogs are THREAD
// modal -- so the first CURDLG struct in the list for a given thread is the
// currently active dialog (has the focus) for that thread. The ptr to the head
// of the list is stored in the thread local storage (TLS) for the thread --
// indexed by g_tlsiCurDlg. Bug #100453 et. al.
typedef struct _CURDLG {
DWORD dwCurDlgNum; // incremental dlg number (per process)
LPTSTR lpstrCurDir; // current directory for the current dialog
struct _CURDLG *next;
} CURDLG;
typedef CURDLG *LPCURDLG;
//Macro to check if the given structure is the new structure.
#define IS_NEW_OFN(pOFN) (pOFN->lStructSize >= sizeof(OPENFILENAME))
// moved from prnsetup.h
#define DN_PADDINGCHARS 16 // extra devnames padding
//
// Some local constants taken from printui.dll
//
enum
{
//
// INTERNET_MAX_HOST_NAME_LENGTH is decalred in wininet.h
//
kDNSMax = INTERNET_MAX_HOST_NAME_LENGTH,
kServerBufMax = kDNSMax + 2 + 1,
//
// Max printer name should really be MAX_PATH, but if you create
// a max path printer and connect to it remotely, win32spl prepends
// "\\server\" to it, causing it to exceed max path. The new UI
// therefore makes the max path MAX_PATH-kServerLenMax, but we still
// allow the old case to work.
//
kPrinterBufMax = MAX_PATH + kServerBufMax + 1,
//
// The initial hint for EnumPrinters API.
//
kInitialPrinterHint = 0x400,
};
#ifdef __cplusplus
extern "C" {
#endif
HRESULT
ThunkDevNamesA2W(
IN HGLOBAL hDevNamesA,
IN OUT HGLOBAL *phDevNamesW
);
HRESULT
ThunkDevNamesW2A(
IN HGLOBAL hDevNamesW,
IN OUT HGLOBAL *phDevNamesA
);
HRESULT
InvokeAddPrinterWizardModal(
IN HWND hwnd,
OUT BOOL *pbPrinterAdded
);
#ifdef __cplusplus
}; // extern "C"
#endif
#endif // !COMDLG_COMDLG32