windows-nt/Source/XPSP1/NT/printscan/ui/printui/printui.hxx
2020-09-26 16:20:57 +08:00

287 lines
6.2 KiB
C++

/*++
Copyright (C) Microsoft Corporation, 1995 - 1998
All rights reserved.
Module Name:
printui.hxx
Abstract:
Hold TPrintLib definitions.
Author:
Albert Ting (AlbertT) 27-Jan-1995
Revision History:
--*/
class TPrintLib : public TExec, public MRefCom {
friend TQueue;
SIGNATURE( 'prlb' )
SAFE_NEW
public:
/********************************************************************
TInfo is a worker class used to increment increment the
ref count on gpPrintLib while the request is sent to the
UI thread.
The lives of TInfo and TQueue overlap (and they both acquire
a reference to gpPrintLib) so gpPrintLib's life is maintained.
********************************************************************/
class TInfo {
SIGNATURE( 'prin' )
ALWAYS_VALID
public:
INT _nCmdShow;
HWND _hwndOwner;
HANDLE _hEventClose;
TCHAR _szPrinter[kPrinterBufMax];
TInfo(
VOID
)
{ }
~TInfo(
VOID
)
{ }
TRefLock<TPrintLib> PrintLib;
};
VAR( HWND, hwndQueueCreate );
VAR( TString, strComputerName );
VAR( TRefLock<TNotify>, pNotify );
static
BOOL
bGetSingleton(
TRefLock<TPrintLib> &RefLock
);
BOOL
bValid(
VOID
)
{
return _hwndQueueCreate && VALID_BASE( TExec ) && VALID_BASE( MRefCom );
}
static
LRESULT CALLBACK
lrQueueCreateWndProc(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
);
private:
VAR( HANDLE, hEventInit );
DLINK_BASE( TQueue, Queue, Queue );
VOID
vHandleCreateQueue(
TInfo* pInfo
);
//
// Virtual definition for MRefCom.
//
VOID
vRefZeroed(
VOID
);
HRESULT
hDestroy(
VOID
);
static
DWORD
xMessagePump(
IN TPrintLib *pPrintLib
);
//
// PrintLib is a singleton class; use vNew. vDelete should only
// be called if the object failed to initialize.
//
TPrintLib(
VOID
);
~TPrintLib(
VOID
);
BOOL
bInitialize(
VOID
);
static TPrintLib *_pPrintLib;
};
/********************************************************************
Keeps track of the number of threads before the library is
released.
********************************************************************/
namespace TSafeThread {
struct TSafeThreadInfo
{
LPTHREAD_START_ROUTINE lpStartAddress; // pointer to thread function
LPVOID lpParameter; // argument for new thread
HINSTANCE hInstance; // dll instance handle
HANDLE hEventReady; // set when the thread has called LoadLibrary
};
HANDLE
Create(
LPSECURITY_ATTRIBUTES lpThreadAttributes, // pointer to thread security attributes
DWORD dwStackSize, // initial thread stack size, in bytes
LPTHREAD_START_ROUTINE lpStartAddress, // pointer to thread function
LPVOID lpParameter, // argument for new thread
DWORD dwCreationFlags, // creation flags
LPDWORD lpThreadId // pointer to returned thread identifier
);
DWORD WINAPI
Start(
PVOID pVoid // Thread data
);
};
VOID
vWebQueueCreate(
IN HWND hwndOwner,
IN LPCTSTR pszPrinter,
IN INT nCmdShow,
IN LPARAM lParam
);
BOOL
bIsPrinterFaxDevice(
IN LPCTSTR pszPrinter
);
VOID
vFaxQueueCreate(
IN HWND hwndOwner,
IN LPCTSTR pszPrinter,
IN INT nCmdShow,
IN LPARAM lParam
);
VOID
vQueueCreateInternal(
IN HWND hwndOwner,
IN LPCTSTR pszPrinter,
IN INT nCmdShow,
IN LPARAM lParam
);
extern "C"
{
//
// Prototypes of some private APIs exported from winspool.drv
// in Win64 environment.
//
typedef VOID
type_PrintUIQueueCreate(
IN HWND hWnd,
IN LPCWSTR PrinterName,
IN INT CmdShow,
IN LPARAM lParam
);
typedef VOID
type_PrintUIPrinterPropPages(
IN HWND hWnd,
IN LPCWSTR PrinterName,
IN INT CmdShow,
IN LPARAM lParam
);
typedef VOID
type_PrintUIDocumentDefaults(
IN HWND hWnd,
IN LPCWSTR PrinterName,
IN INT CmdShow,
IN LPARAM lParam
);
typedef LONG
type_PrintUIDocumentPropertiesWrap(
HWND hwnd, // handle to parent window
HANDLE hPrinter, // handle to printer object
LPTSTR pDeviceName, // device name
PDEVMODE pDevModeOutput, // modified device mode
PDEVMODE pDevModeInput, // original device mode
DWORD fMode, // mode options
DWORD fExclusionFlags // exclusion flags
);
typedef BOOL
type_PrintUIPrinterSetup(
IN HWND hWnd,
IN UINT uAction,
IN UINT cchPrinterName,
IN OUT LPWSTR pszPrinterName,
OUT UINT *pcchPrinterName,
IN LPCWSTR pszServerName
);
typedef VOID
type_PrintUIServerPropPages(
IN HWND hWnd,
IN LPCWSTR ServerName,
IN INT CmdShow,
IN LPARAM lParam
);
// the function pointers
typedef type_PrintUIQueueCreate* ptr_PrintUIQueueCreate;
typedef type_PrintUIPrinterPropPages* ptr_PrintUIPrinterPropPages;
typedef type_PrintUIDocumentDefaults* ptr_PrintUIDocumentDefaults;
typedef type_PrintUIDocumentPropertiesWrap* ptr_PrintUIDocumentPropertiesWrap;
typedef type_PrintUIPrinterSetup* ptr_PrintUIPrinterSetup;
typedef type_PrintUIServerPropPages* ptr_PrintUIServerPropPages;
// the export ordinals for each function
enum
{
ord_PrintUIQueueCreate = 219,
ord_PrintUIPrinterPropPages = 220,
ord_PrintUIDocumentDefaults = 221,
ord_PrintUIDocumentPropertiesWrap = 229,
ord_PrintUIPrinterSetup = 230,
ord_PrintUIServerPropPages = 231,
};
} // extern "C"