Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

353 lines
5.5 KiB

/*++
Copyright (C) Microsoft Corporation, 1994 - 1998
All rights reserved.
Module Name:
GenWin.hxx
Abstract:
Generic window handler
Author:
Albert Ting (AlbertT) 21-May-1994
Revision History:
--*/
#ifndef _GENWIN_HXX
#define _GENWIN_HXX
/********************************************************************
Generic window class to transform windows into pseudo-objects.
Normally, the wndprocs do not have any C++ objects associated
with them (they are static functions; all instance data must be
stored in HWND GetWindowLong data).
This is a simple thunk that takes a message, looks up the object
based on GetWindowLong( hwnd, GWL_USERDATA ) then call the object.
In order to use this class, derive classes from this class then
override the nHandleMessage virtual function. When your window
receives a message, your derived class will get called from the
virtual member function.
********************************************************************/
class MGenericWin {
SIGNATURE( 'genw' )
ALWAYS_VALID
SAFE_NEW
public:
MGenericWin(
VOID
);
virtual
~MGenericWin(
VOID
);
VAR( HWND, hwnd );
BOOL
bSetText(
LPCTSTR pszTitle
);
VOID
vForceCleanup(
VOID
);
static
LPARAM APIENTRY
SetupWndProc(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
);
private:
MGenericWin(
const MGenericWin &
);
MGenericWin &
operator =(
const MGenericWin &
);
virtual
LPARAM
nHandleMessage(
UINT uMsg,
WPARAM wParam,
LPARAM lParam
) = 0;
static
LPARAM APIENTRY
ThunkWndProc(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam);
};
/********************************************************************
Generic class to transform property pages into pseudo-objects.
Same as GenericWin except used for dialog boxes.
********************************************************************/
class MGenericProp {
SIGNATURE( 'genp' )
ALWAYS_VALID
SAFE_NEW
public:
MGenericProp(
VOID
);
virtual
~MGenericProp(
VOID
);
VAR( HWND, hDlg );
BOOL
bSetText(
LPCTSTR pszTitle
);
VOID
vForceCleanup(
VOID
);
static
INT_PTR APIENTRY
SetupDlgProc(
HWND hDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
);
static
UINT CALLBACK
CallbackProc(
HWND hDlg,
UINT uMsg,
LPPROPSHEETPAGE ppsp
);
protected:
VOID
vSetDlgMsgResult(
LONG_PTR lResult
);
VOID
vSetParentDlgMsgResult(
LRESULT lResult
);
private:
MGenericProp(
const MGenericProp &
);
MGenericProp &
operator =(
const MGenericProp &
);
virtual
BOOL
bHandleMessage(
UINT uMsg,
WPARAM wParam,
LPARAM lParam
) = 0;
virtual
BOOL
bCreate(
VOID
);
virtual
VOID
vDestroy(
VOID
);
};
/********************************************************************
Generic class to transform dialog into pseudo-objects.
Same as GenericWin except used for dialog boxes.
********************************************************************/
class MGenericDialog {
SIGNATURE( 'gend' )
ALWAYS_VALID
SAFE_NEW
public:
MGenericDialog(
VOID
);
virtual
~MGenericDialog(
VOID
);
VAR( HWND, hDlg );
BOOL
bSetText(
LPCTSTR pszTitle
);
VOID
vForceCleanup(
VOID
);
static
INT_PTR APIENTRY
SetupDlgProc(
HWND hDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
);
protected:
VOID
vSetDlgMsgResult(
LONG_PTR lResult
);
VOID
vSetParentDlgMsgResult(
LRESULT lResult
);
private:
MGenericDialog(
const MGenericDialog &
);
MGenericDialog &
operator =(
const MGenericDialog &
);
virtual
BOOL
bHandleMessage(
UINT uMsg,
WPARAM wParam,
LPARAM lParam
) = 0;
};
/********************************************************************
MSingletonWin
Used to enforce a single window based on a printer name and type.
(The name and type are composed to form a printer pidl.)
Note: this class must be bRegisterWindowed and destroyed in
the same thread--the one that owns the window.
********************************************************************/
class MSingletonWin {
SIGNATURE( 'siwn' )
SAFE_NEW
public:
VAR( HWND, hwnd );
VAR( TString, strPrinterName );
VAR( BOOL, bModal );
MSingletonWin(
LPCTSTR pszPrinterName,
HWND hwnd = NULL,
BOOL bModal = FALSE
);
virtual
~MSingletonWin(
VOID
);
BOOL
bValid(
VOID
);
BOOL
bRegisterWindow(
DWORD dwType
);
BOOL
bIsWindowPresent(
VOID
);
private:
HANDLE _hClassPidl;
//
// Operator = and copy not defined.
//
MSingletonWin&
operator=(
MSingletonWin& rhs
);
MSingletonWin(
MSingletonWin& rhs
);
};
#endif