windows-nt/Source/XPSP1/NT/printscan/fax/print/faxprint/faxui/faxui.h
2020-09-26 16:20:57 +08:00

307 lines
7.8 KiB
C

/*++
Copyright (c) 1996 Microsoft Corporation
Module Name:
faxui.h
Abstract:
Fax driver user interface header file
Environment:
Fax driver user interface
Revision History:
01/09/96 -davidx-
Created it.
dd-mm-yy -author-
description
--*/
#ifndef _FAXUI_H_
#define _FAXUI_H_
#include <windows.h>
#include <winfax.h>
#include "faxlib.h"
#include <winddiui.h>
#include <commctrl.h>
#include <windowsx.h>
#include <prsht.h>
#ifdef FAX_SCAN_ENABLED
#include <twain.h>
#endif
#include "registry.h"
#include "timectrl.h"
#include "coverpg.h"
#include "resource.h"
#include "faxcfgrs.h"
//
// Data structure maintained by the fax driver user interface
//
typedef struct {
PVOID startSign;
HANDLE hPrinter;
HANDLE hheap;
DRVDEVMODE devmode;
PFNCOMPROPSHEET pfnComPropSheet;
HANDLE hComPropSheet;
HANDLE hFaxOptsPage;
BOOL hasPermission;
BOOL configDefault;
LPTSTR pHelpFile;
INT cForms;
LPTSTR pFormNames;
PWORD pPapers;
PVOID endSign;
} UIDATA, *PUIDATA;
//
// Check if a UIDATA structure is valid
//
#define ValidUiData(p) ((p) && (p) == (p)->startSign && (p) == (p)->endSign)
//
// Combine DEVMODE information:
// start with the driver default
// then merge with the system default
// then merge with the user default
// finally merge with the input devmode
//
VOID
GetCombinedDevmode(
PDRVDEVMODE pdmOut,
PDEVMODE pdmIn,
HANDLE hPrinter,
PPRINTER_INFO_2 pPrinterInfo2,
BOOL publicOnly
);
//
// Fill in the data structure used by the fax driver user interface
//
PUIDATA
FillUiData(
HANDLE hPrinter,
PDEVMODE pdmInput
);
//
// Calling common UI DLL entry point dynamically
//
LONG
CallCompstui(
HWND hwndOwner,
PFNPROPSHEETUI pfnPropSheetUI,
LPARAM lParam,
PDWORD pResult
);
//
// Retrieves a list of supported paper sizes
//
DWORD
EnumPaperSizes(
PVOID pOutput,
FORM_INFO_1 *pFormsDB,
DWORD cForms,
INT wCapability
);
#define CCHBINNAME 24 // max length for bin names
#define CCHPAPERNAME 64 // max length for form names
//
// Display an error message dialog
//
INT
DisplayMessageDialog(
HWND hwndParent,
UINT type,
INT formatStrId,
INT titleStrId,
...
);
#define MAX_TITLE_LEN 128
#define MAX_FORMAT_LEN 128
#define MAX_MESSAGE_LEN 512
//
// Information about each recipient
//
typedef struct {
PVOID pNext; // Points to next recipient
LPTSTR pName; // Recipient name
LPTSTR pAddress; // Recipient address
} RECIPIENT, *PRECIPIENT;
//
// Data structure used by the user mode DLL to associate private
// information with a printer device context (PDEV to be exactly)
//
typedef struct {
DRVDEVMODE devmode; // The first field must be a current version devmode
PVOID pNext; // Points to the next item in the linked list
HANDLE hPrinter; // Handle to the printer object
HDC hdc; // Handle to the device context
LPTSTR pPrinterName; // name of the printer
BOOL isLocalPrinter; // whether the printer is local
INT pageCount; // Number of pages in the document
BOOL finishPressed; // User pressed Finish in fax wizard pages
DWORD jobId; // Current job ID
PRECIPIENT pRecipients; // List of recipients
LPTSTR pSubject; // Subject string
LPTSTR pNoteMessage; // Note message string
TCHAR coverPage[MAX_PATH]; // Cover page filename
BOOL noteOnCover; // Whether to send note message on the cover page
INT jobType; // Job type
PVOID pCPInfo; // For managing cover pages
BOOL directPrinting; // Direct printing and skip the fax wizard
LPVOID lpWabInit; // pointer to wab object
DWORD noteSubjectFlag; // Whether note/subject fields are present on cover page
SHORT cpPaperSize; // Cover page paper size
SHORT cpOrientation; // Cover page orientation
PVOID pEnvVar; // fax attachment variable
LPTSTR pPrintFile; // print to file file name
BOOL ServerCPOnly; //
HANDLE hFaxSvcEvent; // signals fax service query complete
HANDLE hTapiEvent; // signals tapi enumeration complete
HANDLE hMutex; //
HFONT hLargeFont; // large bold font for wizard 97
#ifdef FAX_SCAN_ENABLED
HWND hDlgScan; // scanning wizard page
HMODULE hTwain; // module handle for twain dll
DSMENTRYPROC pDsmEntry; // pointer to the twain data source manager proc
TW_IDENTITY AppId; // application id/handle for twain
TW_IDENTITY DataSource; // application id/handle for twain
HWND hWndTwain; // window handle for twain
HANDLE hEvent; //
HANDLE hEventQuit; //
HANDLE hEventXfer; //
HANDLE hThread; //
BOOL TwainCancelled; // TRUE if twain UI was cancelled
HANDLE hTwainEvent; // signals twain detection complete
BOOL TwainAvail; //
BOOL TwainActive; //
DWORD BufferSize; //
LPBYTE ScanBuffer; //
DWORD State; //
float dxResDefault; //
float dyResDefault; //
TW_IMAGELAYOUT twImageLayoutDefault; //
WCHAR FileName[MAX_PATH]; //
DWORD PageCount; //
#endif
PVOID signature; // Signature
} USERMEM, *PUSERMEM;
//
// Validate a user mode memory structure
//
#define ValidPDEVUserMem(p) \
((p) && (p) == (p)->signature && (p) == (p)->devmode.dmPrivate.pUserMem)
//
// Mark the user mode memory structure
//
#define MarkPDEVUserMem(p) \
{ (p)->signature = (p)->devmode.dmPrivate.pUserMem = (p); }
//
// Different types of print job
//
#define JOBTYPE_DIRECT 0
#define JOBTYPE_NORMAL 1
//
// Free up the list of recipients associated with each fax job
//
VOID
FreeRecipientList(
PUSERMEM pUserMem
);
#define FreeRecipient(pRecipient) { \
MemFree(pRecipient->pName); \
MemFree(pRecipient->pAddress); \
MemFree(pRecipient); \
}
//
// Free up the user mode memory associated with each PDEV
//
VOID
FreePDEVUserMem(
PUSERMEM pUserMem
);
//
// Global variable declarations
//
extern CRITICAL_SECTION faxuiSemaphore;
extern HANDLE ghInstance;
extern BOOL oleInitialized;
extern PUSERMEM gUserMemList;
#define EnterDrvSem() EnterCriticalSection(&faxuiSemaphore)
#define LeaveDrvSem() LeaveCriticalSection(&faxuiSemaphore)
INT_PTR
UserInfoDlgProc(
HWND hDlg,
UINT message,
WPARAM wParam,
LPARAM lParam
);
DWORD
AsyncWizardThread(
PBYTE param
);
BOOL
InitializeTwain(
PUSERMEM pUserMem
);
#define MyHideWindow(_hwnd) SetWindowLong((_hwnd),GWL_STYLE,GetWindowLong((_hwnd),GWL_STYLE)&~WS_VISIBLE)
#endif // !_FAXUI_H_