summaryrefslogtreecommitdiffstats
path: root/public/oak/inc/compstui.h
diff options
context:
space:
mode:
Diffstat (limited to 'public/oak/inc/compstui.h')
-rw-r--r--public/oak/inc/compstui.h3790
1 files changed, 3790 insertions, 0 deletions
diff --git a/public/oak/inc/compstui.h b/public/oak/inc/compstui.h
new file mode 100644
index 000000000..0835c1bbb
--- /dev/null
+++ b/public/oak/inc/compstui.h
@@ -0,0 +1,3790 @@
+/*++
+
+Copyright (c) 1990-1995 Microsoft Corporation
+
+
+Module Name:
+
+ compstui.h
+
+
+Abstract:
+
+ This module contains global header definition for the COMMON DRIVER UI
+
+
+Author:
+
+ 19-Jun-1995 Mon 11:52:01 created -by- Daniel Chou (danielc)
+
+ 17-Aug-1995 Thu 14:59:28 updated -by- Daniel Chou (danielc)
+ Updated for the first draft.
+
+ 23-Aug-1995 Wed 15:13:27 updated -by- Daniel Chou (danielc)
+ Updated for second draft
+
+ 29-Aug-1995 Tue 11:33:24 updated -by- Daniel Chou (danielc)
+ Adding ExtChkBox for some TVOT_xxx type
+
+ 31-Aug-1995 Thu 04:04:23 updated -by- Daniel Chou (danielc)
+ Making UNICODE type
+
+ 01-Sep-1995 Fri 17:29:18 updated -by- Daniel Chou (danielc)
+ Change the API interface type, so that it can be dynamically called
+ and generate the property pages to be merge with the shell
+
+ 05-Sep-1995 Tue 11:52:43 updated -by- Daniel Chou (danielc)
+ Rename to compspui.h and update the API entry structure
+
+ 07-Sep-1995 Thu 14:46:55 updated -by- Daniel Chou (danielc)
+ rename to compstui.h and update comments
+
+ 07-Sep-1995 Thu 16:07:31 updated -by- Daniel Chou (danielc)
+ Adding UNION type for pSel/Sel, pOldSel/OldSel
+
+ 08-Sep-1995 Fri 09:23:38 updated -by- Daniel Chou (danielc)
+ Remove TypeIdx from OPTITEM and use pOptType, and remove all
+ pOptType passed in the CPSUICBPARAM and COMPROPSHEETUI structures
+
+ 25-Sep-1995 Mon 19:39:45 updated -by- Daniel Chou (danielc)
+ add other related stuff.
+
+ 26-Sep-1995 Tue 11:02:26 updated -by- Daniel Chou (danielc)
+ Add error codes for GETLASTERROR
+
+ 27-Sep-1995 Wed 16:32:37 updated -by- Daniel Chou (danielc)
+ Move hWndParent, pTitle, hInst and TitleIconID out from
+ COMPROPSHEETUI to COMPROPSHEETUIHEADER.
+
+ 28-Sep-1995 Thu 17:06:46 updated -by- Daniel Chou (danielc)
+ Add hInstCaller to COMPROPSHEETUI and add _COMPSTUI_ and cplusplus
+ stuff
+
+ 28-Sep-1995 Thu 23:16:34 updated -by- Daniel Chou (danielc)
+ change tick count for trackbar/scrollbar to multiply factor. and
+ add the push button flag which can overwrite the update permission so
+ it can let user view the current setting from push button's dialog
+ display
+
+ 07-Feb-1996 Wed 17:45:31 updated -by- Daniel Chou (danielc)
+ Change the API CommonPropSheetUI to CommonPropertySheetUI so that it
+ not using stack but message base, this way any caller can add/delete
+ pages as they want without worry about how many pages been added from
+ its children.
+
+
+[Environment:]
+
+ NT Windows - Common Property Sheet UI DLL.
+
+
+[Notes:]
+
+
+Revision History:
+
+
+--*/
+
+#ifndef _COMPSTUI_
+#define _COMPSTUI_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#if (!defined(RC_INVOKED))
+
+
+//
+// For compilers that don't support nameless unions
+//
+
+#ifndef DUMMYUNIONNAME
+#ifdef NONAMELESSUNION
+#define DUMMYUNIONNAME u
+#define DUMMYUNIONNAME2 u2
+#define DUMMYUNIONNAME3 u3
+#define DUMMYUNIONNAME4 u4
+#else
+#define DUMMYUNIONNAME
+#define DUMMYUNIONNAME2
+#define DUMMYUNIONNAME3
+#define DUMMYUNIONNAME4
+#endif
+#endif
+
+//
+// Predefined ID for the TreeView Option Type
+//
+//
+
+
+#define TVOT_2STATES 0
+#define TVOT_3STATES 1
+#define TVOT_UDARROW 2
+#define TVOT_TRACKBAR 3
+#define TVOT_SCROLLBAR 4
+#define TVOT_LISTBOX 5
+#define TVOT_COMBOBOX 6
+#define TVOT_EDITBOX 7
+#define TVOT_PUSHBUTTON 8
+#define TVOT_CHKBOX 9
+#define TVOT_LAST TVOT_CHKBOX
+#define TVOT_NONE (TVOT_LAST + 1)
+
+//
+// Predefined ID for the TreeView Option Type
+//
+//
+// TVOT_2STATES:
+// Count = 2
+// pOptParam[0]=pointer to the State 1 OPTPARAM
+// pOptParam[1]=pointer to the State 2 OPTPARAM
+//
+// BegCtrlID = 2 States Group Box ID
+// BegCtrlID+1= 2 States static Text
+// BegCtrlID+2= state 1 Radio button ID
+// BegCtrlID+3= state 1 icon control ID
+// BegCtrlID+4= state 2 Radio button ID
+// BegCtrlID+5= state 2 icon control ID
+// BegCtrlID+6= Extended Check Box/Push Button control ID
+// BegCtrlID+7= Extended Check Box/Push Button Icon control ID
+//
+// * For TVOT_3STATES, TVOT_3STATES, each of OPTPARAM consisted
+//
+// Style =Ignored
+// pData =Pointer to the string to describe the state
+// IconID=Icons resource ID, or common UI standard icon ID
+// lParam=Ignored
+//
+// * OPTITEM's 'Sel' is the selection index range from 0 to 1
+// * On the non-treeview page, this must be a auto radio button
+//
+//
+// TVOT_3STATES:
+// Count = 3
+// pOptParam[0]=pointer to the State 1 OPTPARAM
+// pOptParam[1]=pointer to the State 2 OPTPARAM
+// pOptParam[2]=pointer to the State 3 OPTPARAM
+//
+// BegCtrlID = 3 States Group Box ID
+// BegCtrlID+1= 3 States static Text
+// BegCtrlID+2= state 1 Radio button ID
+// BegCtrlID+3= state 1 icon control ID
+// BegCtrlID+4= state 2 Radio button ID
+// BegCtrlID+5= state 2 icon control ID
+// BegCtrlID+6= state 3 Radio button ID
+// BegCtrlID+7= state 3 icon control ID
+// BegCtrlID+8= Extended Check Box/Push Button control ID
+// BegCtrlID+9= Extended Check Box/Push Button Icon control ID
+//
+// * For TVOT_2STATES, TVOT_3STATES, each of OPTPARAM consisted
+//
+// Style =Ignored
+// pData =Pointer to the string to describe the state
+// IconID=Icons resource ID, or common UI standard icon ID
+// lParam=Ignored
+//
+// * OPTITEM's 'Sel' is the selection index range from 0 to 1
+// * On the non-treeview page, this must be a auto radio button
+//
+// ** For TVOT_2STATES, TVOT_3STSATES the 'Sel' field in the OPTITEM has
+// following definitions
+//
+// State 1, Sel = 0
+// State 2, Sel = 1
+// State 3, Sel = 2
+//
+// for any selection which based on false/true, no/yes, off/ontrue/false,
+// none/select then state 1 (sel=0) must always be the NO, FALSE, OFF or
+// NONE type.
+//
+//
+// TVOT_UDARROW:
+// Count = 2
+// pOptParam[0]=Pointer to the text of postfix and ICONS
+// pOptParam[1]=Pointer to the help line text above the control and
+// IconID = (SHORT)Low range of the up-down control
+// lParam = (SHORT)High range of the up-down control
+//
+// * Low/High must in range of a 16-bit sign integer
+//
+// if pData pointed to no help text then common UI automatically
+// set the (# - #) as help line
+//
+// BegCtrlID = udarrow Group Box ID
+// BegCtrlID+1= udarrow title static title ID
+// BegCtrlID+2= udarrow's editbox ID
+// BegCtrlID+3= udarrow icon control ID
+// BegCtrlID+4= udarrow postfix static text ID
+// BegCtrlID+5= udarrow help static text ID
+// BegCtrlID+6= udarrow arrow ID
+// BegCtrlID+7= Extended Check Box/Push Button control ID
+// BegCtrlID+8= Extended Check Box/Push Button Icon control ID
+//
+// * OPTITEM's 'Sel' is the selection index between Low/High range
+// * Style field in the OPTPARAM is ignored
+//
+//
+// TVOT_TRACKBAR:
+// Count = 3
+// pOptParam[0]=Pointer to the text for the selection postfix and ICONS
+// pOptParam[1]=Pointer to the <Low Range Text> and
+// IconID = (SHORT)Low range of the trackbar control
+// lParam = (SHORT)High range of the trackbar control
+//
+// * Low/High must in range of a 16-bit sign integer
+//
+// pOptParam[2]=Pointer to the <High Range Text> and
+// IconID = 'Sel' multiply factor for display
+// lParam = Page Size (increment)
+//
+// if pData pointed to NULLt then common UI automatically
+// set the Low/High range.
+//
+// BegCtrlID = trackbar Group Box ID
+// BegCtrlID+1= trackbar static title ID
+// BegCtrlID+2= trackbar(horizontal) ID (static FRAME to define size)
+// BegCtrlID+3= trackbar icon control ID
+// BegCtrlID+4= trackbar low range text control ID
+// BegCtrlID+5= trackbar high range text control ID
+// BegCtrlID+6= trackbar postfix ID
+// BegCtrlID+7= Extended Check Box/Push Button control ID
+// BegCtrlID+8= Extended Check Box/Push Button Icon control ID
+//
+// * OPTITEM's 'Sel' is the selection index between Low/High range
+// * The multiply factor is used to multiply the current select with
+// this factor and display it. typically this is one
+// * the tick frequency is automatically to set to PageSize increment
+// * Style field in the OPTPARAM is ignored
+//
+//
+// TVOT_SCROLLBAR:
+// Count = 3
+// pOptParam[0]=Pointer to the text for the selection postfix and ICONS
+// pOptParam[1]=Pointer to the <Low Range Text> and
+// IconID = (SHORT)Low range of the scrollbar control
+// lParam = (SHORT)High range of the scroll control
+//
+// * Low/High must in range of a 16-bit sign integer
+//
+// pOptParam[2]=Pointer to the <High Range Text> and
+// IconID = 'Sel' multiply factor for display
+// lParam = Page Size (increment)
+//
+// if pData pointed to NULLt then common UI automatically
+// set the Low/High range.
+//
+//
+// BegCtrlID = scrollbar(horizontal) group box ID
+// BegCtrlID+1= scrollbar(horizontal) static text ID
+// BegCtrlID+2= scrollbar(horizontal) ID
+// BegCtrlID+3= scrollbar icon control ID
+// BegCtrlID+4= scrollbar low range text control ID
+// BegCtrlID+5= scrollbar high range text control ID
+// BegCtrlID+6= scrollbar postfix control ID
+// BegCtrlID+7= Extended Check Box/Push Button control ID
+// BegCtrlID+8= Extended Check Box/Push Button Icon control ID
+//
+// * OPTITEM's 'Sel' is the selection index between Low/High range
+// * The multiply factor is used to multiply the current select with
+// this factor and display it. typically this is one
+// * Style field in the OPTPARAM is ignored
+//
+//
+//
+// TVOT_LISTBOX:
+// TVOT_COMBOBOX:
+// Count = N
+// pOptParam[0]=pointer to the first OPTPARAM (pData=string pointer)
+// pOptParam[1]=pointer to the second OPTPARAM (pData=string pointer)
+// .
+// .
+// pOptParam[N-1]=pointer to the N item string
+//
+// BegCtrlID = Listbox/ComboBox group box ID
+// BegCtrlID+1= Listbox/ComboBox static title ID
+// BegCtrlID+2= Listbox/Combobox ID
+// BegCtrlID+3= Listbox/Combobox icon control ID
+// BegCtrlID+4= Extended Check Box/Push Button control ID
+// BegCtrlID+5= Extended Check Box/Push Button Icon control ID
+//
+// * for TVOT_LISTBOX, TVOT_COMBOBOX, the field used as
+//
+// Style =Ignored by the common UI
+// pData =Pointer to the name of item
+// IconID=Icon resource ID for the item
+// lParam=ignored by the common UI
+//
+// * Only SINGLE selection is supported, to do a multiple selction use
+// multiple OPTITEM and create a header for it
+//
+// * an OTLBCBS_SORT style can be specified in the OPTTYPE's LBCBStyle
+// field, and the listbox or combobox will be sorted according to the
+// item's string.
+//
+// * OPTITEM's 'Sel' is the selection index between Low/High range
+//
+// * for TVOT_LISTBOX, TVOT_COMBOBOX, when it get received the keyboard
+// focus then common UI will call callback function (only if
+// OPTIF_CALLBACK bit set) with reason of CPSUICB_REASON_LBCB_ACTIVE,
+// this give caller a chance to modify following structure flags/pdata
+// which associate with the current OPTITEM. The caller's callback
+// function can ONLY modify the flags/data specified here.
+//
+// OPTTYPE pointed by the pOptType from OPTITEM
+//
+// Style: OTS_LBCB_SORT
+// OTS_LBCB_INCL_ITEM_NONE
+//
+// OPTPARAMs pointed by the pOptParam from the OPTTYPE
+//
+// Flags: OPTPF_HIDE
+// OPTPF_DISABLED
+//
+// pData: change string name
+//
+//
+// * The TVOT_COMBOBOX typically only used in the tree-view if there is
+// only one selection available for that item, when there is only one
+// item then dropdown list will not enabled by the common UI
+//
+//
+//
+// TVOT_EDITBOX:
+// Count = 2
+// pOptParam[0]=Pointer to the text of postfix and ICONS
+// pOptParam[1]=Pointer to the help line text above the control and
+// IconID = Edit buffer sie in character pointed by pSel
+// this is including the NULL terminator.
+// lParam = ignored.
+//
+// BegCtrlID = editBox group Box ID
+// BegCtrlID+1= editBox static title ID
+// BegCtrlID+2= editbox ID
+// BegCtrlID+3= editbox icon control ID
+// BegCtrlID+4= editbox postfix ID
+// BegCtrlID+5= editbox help ID
+// BegCtrlID+6= Extended Check Box/Push Button control ID
+// BegCtrlID+7= Extended Check Box/Push Button Icon control ID
+//
+// * Style field is ignored
+//
+// * pSel in the OPTITEM is the pointer to the editing string, the pSel
+// must pointed to a buffer eqaul or larger than the count of the buffer
+// (pOptParam[1]->IconID) size
+//
+//
+// TVOT_PUSHBUTTON:
+// Count = 1
+//
+// BegCtrlID = push button group box ID
+// BegCtrlID+1= push button static text ID (Not used by common UI)
+// BegCtrlID+2= push button ID
+// BegCtrlID+3= push button icon control ID
+// BegCtrlID+4= Extended Check Box/Push Button control ID
+// BegCtrlID+5= Extended Check Box/Push Button Icon control ID
+//
+//
+// PUSHBUTTON_TYPE_xxx specified the action and content of pData in the
+// pOptParam[0] as describe in the following
+//
+// PUSHBUTTON_TYPE_DLGPROC
+//
+// This push button is designed to bring up caller's dialog box
+//
+// pOptParam[0].pData = Caller's DLGPROC
+// pOptParam[0].Style = PUSHBUTTON_TYPE_DLGPROC
+// pOptParam[0].IconID = Icon resource ID
+// pOptParam[0].lParam = Caller's DIALOG resource template ID
+// or handle to the DLGTEMPLATE depends
+// on the OPTPF_USE_HDLGTEMPLATE flag
+//
+//
+// The 'lParam' passed to the DLGPROC's WM_INITDIALOG is the
+// CPSUICBPARAM structure pointer, and the reason field is set
+// to CPSUICB_REASON_DLGPROC.
+//
+//
+// PUSHBUTTON_TYPE_CALLBACK
+//
+// This push button is designed to have caller process the item
+// which cannot accomplished with the dialog box along.
+//
+// pOptParam[0].pData = CPSUICALLBACK function pointer
+// pOptParam[0].Style = PUSHBUTTON_TYPE_CALLBACK
+// pOptParam[0].IconID = Icon resource ID
+// pOptParam[0].lParam = Not Used;
+//
+// Durning the callback the Reason field in CPSUICBPARAM will
+// set to CPSUICB_REASON_PUSHBUTTON.
+//
+// ** If pOptParam[0].pData callback function is NULL then common
+// UI will call the pfnCallBack pointer set in the
+// COMPROPSHEETUI structure if it is not NULL
+//
+// ** The callback function should put the result of the callback
+// in the pSel/Sel of OPTITEM associate with the push button
+//
+// PUSHBUTTON_TYPE_HTCLRADJ
+//
+// This push button is designed to bring up halftone color
+// adjustment dialog box.
+//
+// pOptParam[0].pData = pointer to COLORADJUSTMENT structure
+// pOptParam[0].Style = PUSHBUTTON_TYPE_HTCLRADJ
+// pOptParam[0].IconID = Icon resource ID
+// pOptParam[0].lParam = Not Used;
+//
+//
+// PUSHBUTTON_TYPE_HTSETUP
+//
+// This push button is designed to bring up device halftone
+// setup dialog box.
+//
+// pOptParam[0].pData = pointer to DEVHTADJDATA structure
+// pOptParam[0].Style = PUSHBUTTON_TYPE_HTSETUP
+// pOptParam[0].IconID = Icon resource ID
+// pOptParam[0].lParam = Not Used;
+//
+//
+// * 'Sel' field in the OPTITEM for the PUSHBUTTON is the last returned
+// LONG result from the called dialog box or funcitons. The result
+// only valid if OPTIF_CHANGEONCE flag is set. The common UI will set
+// OPTIF_CHANGEONCE if push button ever pushed.
+//
+// * Since common UI donot know the meaning of the return value and
+// content of the called parameter, it is up to the caller to use
+// callback function to determine the returned result.
+//
+// * When returned from the push button except push botton type
+// PUSHBUTTON_TYPE_CALLBACK common ui will call the callback function
+// if the OPTIF_CALLBACK flat is set. The callback reason is set to
+// CPSUICB_REASON_SEL_CHANGED.
+//
+// * If the passed in CPSUIF_UPDATE_PERMISSION Flags in the COMPROPSHEETUI
+// is clear then the callback function must ONLY display the dialog box
+// and not changed any OPTITEM data if OTS_PUSH_ENABLE_ALWAYS
+// flag is set in the OPTTYPE
+//
+//
+// TVOT_CHKBOX:
+// Count = 1
+//
+// pOptparam[0].Style = CHKBOXS_FALSE_TRUE False/True
+// CHKBOXS_NO_YES, No/YES
+// CHKBOXS_OFF_ON, Off/ON
+// CHKBOXS_FALSEPDATA False/pData
+// CHKBOXS_NO_PDATA No/pData
+// CHKBOXS_OFF_PDATA Off/pData
+// CHKBOXS_NONE_PDATA None/pData
+// pOptParam[0].pData = Only used if Style is CHKBOXS_NONE_PDATA
+// pOptParam[0].IconID = Icon resource ID
+// pOptParam[0].lParam = Ignored
+//
+//
+// BegCtrlID = check box group ID
+// BegCtrlID+1= Check Box static text (not used by common UI)
+// BegCtrlID+2= check box button ID
+// BegCtrlID+3= check box icon control ID
+// BegCtrlID+4= Extended Check Box/Push Button control ID
+// BegCtrlID+5= Extended Check Box/Push Button Icon control ID
+//
+//
+// * BegCtrlID only used if the OPTITEM/OPTTYPE is belong to the the DLGPAGE
+// which has non-common UI dialog box template (DlgTemplateID in the DLGPAGE
+// is not standard DP_STD_xxx common ui dialog box template). The common
+// UI used this ID to managed caller's dialog boxes item's selections and
+// initialization.
+//
+// * for each item, it has group box ID (BegCtrlID) and static text ctronl ID
+// (BegCtrlID + 1). The common UI will set the text in one of these two
+// control ID in followng seauence.
+//
+// 1) If group box control ID's window (BegCtrlID) is exist and the
+// OPTITEM's flag OPTIF_NO_GROUPBOX_NAME is not set then common UI will
+// set the pName from OPTITEM to the group box.
+//
+// 2) If the group box name is not set and static control ID's window
+// (BegCtrlID + 1) is exist then common UI will set the pName from
+// OPTITEM to the static text control.
+//
+// * for TVOT_TRACKBAR and TVOT_SCROLLBAR, if pName in the OPTITEM is set to
+// either group box or static text control then common UI will also append
+// the current selection position of trackbar or scroll bar to the pName.
+//
+// * If multiple OPTITEMs using the same POPTPARAM and need different
+// BegCtrlID for each control then then a separate OPTTYPE structure should
+// be generated but POPTPARAM pointed to the same OPTPARAM[]
+//
+// * If a BegCtrlID+N is not used then skip that ID in your dialog box
+// template
+//
+//
+
+#define CHKBOXS_FALSE_TRUE 0
+#define CHKBOXS_NO_YES 1
+#define CHKBOXS_OFF_ON 2
+#define CHKBOXS_FALSE_PDATA 3
+#define CHKBOXS_NO_PDATA 4
+#define CHKBOXS_OFF_PDATA 5
+#define CHKBOXS_NONE_PDATA 6
+
+
+#define PUSHBUTTON_TYPE_DLGPROC 0
+#define PUSHBUTTON_TYPE_CALLBACK 1
+#define PUSHBUTTON_TYPE_HTCLRADJ 2
+#define PUSHBUTTON_TYPE_HTSETUP 3
+
+
+#define MAX_RES_STR_CHARS 160
+
+//
+// Common Printer UI's LPTSTR
+//
+// All string pointer in common printer UI structures can be either a real
+// memory pointer or a string resource ID. These are applied to LPTSTR type.
+//
+// The LPTSTR is defined to identify that the pointer can be a real string
+// pointer or a resource ID (either common printer UI provided ID or caller's
+// own resource ID). common UI using following logic to get the final string.
+//
+// LPTSTR pData;
+//
+// if (HIWORD(pData) != 0) then pData is a NULL terminated string pointer
+//
+// ELSE
+//
+// LOWORD(pData)=Resource ID
+//
+// if (Resource ID is within the common UI string resource ID range)
+// then it load the string from common UI DLL
+//
+// ELSE
+//
+// it load string from caller's resource
+//
+//
+// * You can use MAKEINTRESOURCE(StrResID) to set this field
+//
+// * The MAX characters loaded by the common UI from the resource is defined
+// as MAX_RES_STR_CHARS
+//
+// * You cannot use LPTSTR as resource ID for the TVOT_EDITBOX style's
+// pSel in the OPTITEM, this pointer must be a real buffer pointer
+//
+//
+//
+// ICONs
+//
+// Common UI using two types of Icons, One is 32x32 and the other is 16x16
+// plus if any monochrome icon with 32x32 and 16x16 sizes.
+//
+// The 16x16 icon when displayed on the screen is using 16x17 pixel space,
+// this is ensure that downware adjacent icon is not crowded together.
+//
+// In common UI, if you need to passed a ICON ID, it can either passed a
+// common UI's predefined ID or caller's own ICON resource ID.
+//
+//
+// * You can use to imagedit or any other Window icon editor to create the
+// icon, each icon file should have one unique icon resource ID which is
+// not overlay with the standard common UI IDI_CPSUI_xxx identifier. For
+// each icon file, its should have both 32x32 and 16x16 size icon on
+// different display. (ie. monochrome).
+//
+// Common UI will try to load the correct size of icon from the icon
+// resource, but it will stretch them if the size is not found.
+//
+//
+
+//
+// Flags for the OPTTYPE
+//
+//
+
+#define OPTPF_HIDE 0x01
+#define OPTPF_DISABLED 0x02
+#define OPTPF_ICONID_AS_HICON 0x04
+#define OPTPF_OVERLAY_WARNING_ICON 0x08
+#define OPTPF_OVERLAY_STOP_ICON 0x10
+#define OPTPF_OVERLAY_NO_ICON 0x20
+#define OPTPF_USE_HDLGTEMPLATE 0x40
+
+typedef struct _OPTPARAM {
+ WORD cbSize; // size of this structure
+ BYTE Flags; // OPTPF_xxxx flags
+ BYTE Style; // style use in this structure
+ LPTSTR pData; // pointer to the data
+ DWORD IconID; // iconID;
+ LONG lParam; // parameter used
+ DWORD dwReserved[2]; // reserved dword, must be 0
+ } OPTPARAM, *POPTPARAM;
+
+
+//
+// OPTPARAM
+//
+// The OPTPARAM structure is used to describe each slectable item in the
+// common UI such as 'letter', 'legal' in the form slection list box
+//
+// cbSize - size of this structure
+//
+// Flags - defined as OPTPF_xxxx
+//
+// OPTPF_HIDE
+//
+// Specified hide this listed selection item and not
+// availabe for user to select. This only available to
+// following TVOT_xxx types
+//
+// TVOT_3STATES
+// TVOT_LISTBOX
+// TVOT_COMBOBOX
+//
+// If all the seclection items are OPTPF_HIDE then the
+// OPTITEM is automatically hided by the common UI, if
+// TVOT_3STATES has 2 states hide then an error is
+// returned
+//
+//
+// OPTPF_DISABLED
+//
+// Specified this listed selection item is disabled and
+// not availabe for user to select. This only available
+// to following TVOT_xxx types
+//
+// TVOT_2STATES
+// TVOT_3STATES
+// TVOT_LISTBOX
+// TVOT_COMBOBOX
+//
+//
+// OPTPF_ICONID_AS_HICON
+//
+// If this flag is set then IconID DWORD field is treated
+// as a handle to the icon rather then the resource ID
+//
+//
+// OPTPF_OVERLAY_WARNING_ICON
+//
+// If this bit is set then this OPTPARAM item's icon will
+// be overlaied by a common UI's IDI_CPSUI_WARNING icon.
+//
+//
+// OPTPF_OVERLAY_STOP_ICON
+//
+// If this bit is set then this OPTPARAM item's icon will
+// be overlaied by a common UI's IDI_CPSUI_STOP icon.
+//
+//
+// OPTPF_OVERLAY_NO_ICON
+//
+// If this bit is set then this OPTPARAM item's icon will
+// be overlaied by a common UI's IDI_CPSUI_NO icon.
+//
+//
+// Style - Style for the OPTPARAM, it depends on the TVOT_xxx type as
+// describe below
+//
+// TVOT_PUSBUTTON
+//
+// it can be one of PUSHBUTTON_TYPE_xxxx.
+//
+// other TVOT_xxxx
+//
+// this fields is not used.
+//
+//
+// pData - Is either a pointer to the item name (string) or it is
+// used to describe other data.
+//
+// * If the pData in the OPTPARAM is supposed to be a static
+// pointer to a string and the string is a common UI
+// standard resource ID then common UI will check if pData
+// is equal to IDS_CPSUI_NOTINSTALLED, if true then
+// common UI will overaly a not installed icon on top of
+// the OPTPARAM's Icon. This will not applied to the
+// TVOT_EDITBOX type since the pData is not a static text
+// pointer or a string resource ID.
+//
+// ** See LPTSTR description above
+//
+// IconID - This is the icon identifier, which can be a common strandard
+// IDI_CPSUI_xxx icon ID, caller's own icon resource ID, or a
+// handle to the caller defined icon if OPTPF_ICONID_AS_HICON
+// flag is set, in any case if the IconID is zero then it
+// indicated no icon.
+//
+// lParam - Extra data used by the OPTPARAM, it depends on the TVOT_xxx
+// type.
+//
+// dwReserved[]- Reserved DWORDs, must be 0
+//
+//
+
+
+#define OPTTF_TYPE_DISABLED 0x01
+#define OPTTF_NOSPACE_BEFORE_POSTFIX 0x02
+
+
+#define OTS_LBCB_SORT 0x0001
+#define OTS_LBCB_PROPPAGE_LBUSECB 0x0002
+#define OTS_LBCB_PROPPAGE_CBUSELB 0x0004
+#define OTS_LBCB_INCL_ITEM_NONE 0x0008
+#define OTS_LBCB_NO_ICON16_IN_ITEM 0x0010
+#define OTS_PUSH_INCL_SETUP_TITLE 0x0020
+#define OTS_PUSH_NO_DOT_DOT_DOT 0x0040
+#define OTS_PUSH_ENABLE_ALWAYS 0x0080
+
+
+typedef struct _OPTTYPE {
+ WORD cbSize;
+ BYTE Type; // TVOT_xxxx type of OPTIONS
+ BYTE Flags; // OPTTF_xxx flags
+ WORD Count; // Count of pOptParam passed
+ WORD BegCtrlID; // start of item's group window ID
+ POPTPARAM pOptParam; // pointer to the OPTPARAM
+ WORD Style; // option type style as OTS_xxxx
+ WORD wReserved[3]; // wReserved, must be 0
+ DWORD dwReserved[3]; // DWORD reserved field (must be 0)
+} OPTTYPE, *POPTTYPE;
+
+
+//
+// OPTTYPE
+//
+// The OPTTYPE structure is used to describe a set of selection and its
+// select method, such as Form/Tray assignment. It has a pointer to a set
+// of selection item (OPTPARAM)
+//
+//
+// cbSize - size of this structure
+//
+// Type - Specified the option type using predefined ID as TVOT_xxxx
+//
+// Flags - currently only one flag is defined
+//
+//
+// OPTTF_TYPE_DISABLED
+//
+// The whole OPTTYPE's OPTPARAMs are disabled, and non of
+// the selection in the OPTTYPE can be selected
+//
+//
+// OPTTF_NOSPACE_BEFORE_POSTFIX
+//
+// This bit only valid if the OPTTYPE's pOptParam item
+// specified a postfix string as describe in the above
+// section. If this flag is set then it asked common UI
+// do not add a space character before the postfix string
+// when it combine the pName in the OPTITEM and postfix
+// string. Typeically this bit is not set for the
+// postfix string, but sometime it may be required not to
+// add a space character in front of it, such as '%'
+// postfix string.
+//
+//
+// Count - Count of item pointed by pOptParam. Some predefined number
+// must be set according to the TVOT_XXX description.
+//
+// BegCtrlID - Only used if the OPTITEM/OPTTYPE is belong to the the DLGPAGE
+// which has non-common UI dialog box template (DlgTemplateID
+// in the DLGPAGE is not standard DP_STD_xxx common ui dialog
+// box template). The common UI used this ID to managed
+// caller's dialog boxes item's selections and initialization.
+//
+// Each OPTITEM has predefined number of window ID which
+// associated with that item, the BegCtrlID specified the start
+// control window ID. Each control window ID in the OPTITEM
+// must have the control ID sequence as describe in the TVOT_xxx
+// above.
+//
+// pOptParam - Pointer to array of OPTPARAM to describe each selectable item
+//
+// Style - Specified the style of type of control box, certain style
+// only apply to centain type of TVOT_xxxx.
+//
+// OTS_LBCB_xxx only applied to TVOT_LISTBOX, TVOT_COMBOBOX
+// OTS_PUSH_xxx only applied to TVOT_PUSHBUTTON
+//
+//
+// OTS_LBCB_SORT
+//
+// Specified that the listbox or combobox item is sorted
+// in ascending order based on the pData string
+//
+//
+// OTS_LBCB_PROPAGE_LBUSECB
+//
+// Used when Type is TVOT_LISTBOX, if it specified and
+// this OPTTYPE also on the non-treeview user defined
+// property sheet page dialog then common UI assume
+// control is comobobox instead of listbox on the non-
+// treeview page
+//
+//
+// OTS_LBCB_PROPAGE_CBUSELB
+//
+// Used when Type is TVOT_COMBOBOX, if it specified and
+// this OPTTYPE also on the non-treeview user defined
+// property sheet page dialog then common UI assume
+// control is listbox instead of combobox on the non-
+// treeview page
+//
+//
+// OTS_LBCB_INCL_ITEM_NONE
+//
+// when this flag is specified, the common ui will
+// automatically add a 'None' selection to the listbox or
+// combobox. The 'Sel' will set to -1 if 'none' is
+// selection is selected by the user. It will also
+// validate the 'Sel' durning the initialization, any
+// out of range value will be set to -1 (None).
+//
+//
+// OTS_LBCB_NO_ICON16_IN_ITEM
+//
+// By default, each listbox, combox will have a small
+// icon (16x16) in front of item text. by specified this
+// bit, the listbox/combobox will not includes icons
+// in the listbox/combobox.
+//
+// If clear then it specified that in the listbox/combobox
+// to have 16x16 Icon added to the front of each item
+//
+//
+// OTS_PUSH_INCL_SETUP_TITLE
+//
+// If specified for the push button then it automatically
+// add the 'Setup' to the end of push botton text.
+//
+//
+// OTS_PUSH_NO_DOT_DOT_DOT
+//
+// If specified then common UI will not add '...' to the
+// end of the pName in the OPTITEM and push button name
+//
+//
+// OTS_PUSH_ENABLE_ALWAYS
+//
+// This flag specified that even update permissio is not
+// allowed, it still let user push the push button, if
+// this flag is set then callback function or dialog box
+// proc must disable all the control which let user
+// modified the content, but just let user view the
+// current setting.
+//
+//
+// wReserved[] - Reserved fields, must be 0
+//
+// dwReserved[]- Reserved fields, must be 0
+//
+//
+
+
+//
+// Following are flags for the EXTPUSH
+//
+
+
+#define EPF_PUSH_TYPE_DLGPROC 0x0001
+#define EPF_INCL_SETUP_TITLE 0x0002
+#define EPF_NO_DOT_DOT_DOT 0x0004
+#define EPF_ICONID_AS_HICON 0x0008
+#define EPF_OVERLAY_WARNING_ICON 0x0010
+#define EPF_OVERLAY_STOP_ICON 0x0020
+#define EPF_OVERLAY_NO_ICON 0x0040
+#define EPF_USE_HDLGTEMPLATE 0x0080
+
+
+typedef struct _EXTPUSH {
+ WORD cbSize; // size of the structure
+ WORD Flags; // EPCBF_xxx flags
+ LPTSTR pTitle; // extended push botton title
+ union {
+ DLGPROC DlgProc; // pointer to the dialog box proc
+ FARPROC pfnCallBack; // callback function pointer
+ } DUMMYUNIONNAME;
+ DWORD IconID; // icon to be used
+ union {
+ WORD DlgTemplateID; // dialog box template ID
+ HANDLE hDlgTemplate; // handle to the dialog template
+ } DUMMYUNIONNAME;
+ DWORD dwReserved[3]; // reserved field, must be 0
+ } EXTPUSH, *PEXTPUSH;
+
+//
+// EXTPUSH structure is used to describe the extened push button available
+// on OPTITEM/OPTITEM, each OPTTYPE can optional have either one extended check
+// box or one extended push button callback.
+//
+//
+// cbSize - size of this structure
+//
+// Flags - flags for the EXTPUSH as EPF_xxxx
+//
+// EPF_PUSH_TYPE_DLGPROC
+//
+// If this bit is set then it specified the extended
+// push button is type of DLGPROC and DlgProc and
+// DlgTemplateID is valid for common UI to call.
+//
+// If this bit is clear then it specfied the extended
+// push button is the callback style and pfnCallBack
+// should be called by the common UI
+//
+//
+// EPF_INCL_SETUP_TITLE
+//
+// If specified for the extended push button then it
+// automatically add the 'Setup' to the end of
+// extended push button's title
+//
+//
+// EPF_NO_DOT_DOT_DOT
+//
+// If specified then common UI will not add '...' to
+// the end of the pTitle in the EXTPUSH.
+//
+//
+// EPF_ICONID_AS_HICON
+//
+// If this flag is set then IconID DWORD field is
+// treated as a handle to the icon rather then the
+// resource ID.
+//
+//
+// EPF_OVERLAY_WARNING_ICON
+//
+// If this bit is set then this EXTPUSH's icon will be
+// overlaied by a common UI's IDI_CPSUI_WARNING icon.
+//
+//
+// EPF_OVERLAY_STOP_ICON
+//
+// If this bit is set then this EXTPUSH's icon will be
+// overlaied by a common UI's IDI_CPSUI_STOP icon.
+//
+//
+// EPF_OVERLAY_NO_ICON
+//
+// If this bit is set then this EXTPUSH's icon will be
+// overlaied by a common UI's IDI_CPSUI_NO icon.
+//
+//
+// pTitle - Pointed to extended push botton title
+//
+// ** See LPTSTR description above
+//
+// DlgProc - Pointer to the DLGPROC function supplied by the caller.
+// When user push the button the common UI will call
+// DialogBoxParam() with this fucction pointer and passed
+// CPSUICBPARAM structure pointer to the WM_INITDIALOG with
+// the Reason set to CPSUICB_REASON_EXTPUSH. If this
+// filed is NULL then common UI assumed that EXTPUSH is
+// disabled (OPTIF_EXT_DISABLED | OPTIF_EXT_HIDE), this
+// fields only used if EPF_PUSH_TYPE_DLGPROC flag is set
+//
+// pfnCallBack - Pointer to CPSUICALLBACK function, this only used if
+// EPF_PUSH_TYPE_DLGPROC bit is clear, duringing callback
+// it passed the CPSUICBPARAM pointer as parameter
+//
+// IconID - This is the icon identifier, which can be a common
+// strandard IDI_CPSUI_xxx icon ID, caller's own icon
+// resource ID, or a handle to the caller defined icon if
+// EPF_ICONID_AS_HICON flag is set, in any case if the
+// IconID is zero then it indicated no icon.
+//
+// DlgTemplateID - Specified the ressource ID for the dilaog box. If the
+// DlgTemplateID = 0 then common UI will call the DlgProc
+// with following parameter.
+//
+// DlgProc(hDlg, WM_USER, NULL, (LPARAM)pCPSUICBPaam);
+//
+// hDlgTemplate - Handle to the DLGTEMPLATE which will be use for pop up
+// dialog box
+//
+// wReserved[] - WORD reserved field, must be 0
+//
+// dwReserved[] - DWORD reserved field, must be 0
+//
+//
+//
+
+
+//
+// Following are flags for the EXTCHKBOX
+//
+
+#define ECBF_CHECKNAME_AT_FRONT 0x0001
+#define ECBF_CHECKNAME_ONLY_ENABLED 0x0002
+#define ECBF_ICONID_AS_HICON 0x0004
+#define ECBF_OVERLAY_WARNING_ICON 0x0008
+#define ECBF_OVERLAY_ECBICON_IF_CHECKED 0x0010
+#define ECBF_OVERLAY_STOP_ICON 0x0020
+#define ECBF_OVERLAY_NO_ICON 0x0040
+
+
+typedef struct _EXTCHKBOX {
+ WORD cbSize; // size of the structure
+ WORD Flags; // ECBF_xxx flags
+ LPTSTR pTitle; // extended checkbox title
+ LPTSTR pSeparator; // pointer to separator string for treeview
+ LPTSTR pCheckedName; // string to be displayed when checked
+ DWORD IconID; // icon to be used
+ WORD wReserved[4]; // reserved word, must be 0
+ DWORD dwReserved[2]; // reserved field, must be 0
+ } EXTCHKBOX, *PEXTCHKBOX;
+
+
+//
+// EXTCHKBOX structure is used to describe the extened check box available on
+// OPTITEM/OPTITEM, each OPTTYPE can optional have one extended check box.
+// When using EXTCHKBOX the selection item can be checked or not checked
+// based on user input.
+//
+//
+// cbSize - size of this structure
+//
+// Flags - flags for the EXTCHKBOX as ECBF_xxxx
+//
+// ECBF_CHECKNAME_AT_FRONT
+//
+// This flag specified how to display item's name and its
+// checked name in the treeview display. If this flag is
+// set then the checked name is display in front of
+// separator name, otherwise the checked name is displayed
+// after the separator. For Example.
+//
+// Flag Set: pCheckedName pSeparator SelectName
+// Flag Clear: SelectName pSeparator pCheckedName
+//
+//
+// ECBF_CHECKNAME_ONLY_ENABLED
+//
+// If set then it specified that in the treeview display,
+// it will only show the pCheckedName if this extended
+// check box is visible and enabled. Some items may not
+// desired to display the pCheckedName if the extended
+// check box is disabled, such as Copy/Collate checkbox.
+//
+//
+// ECBF_ICONID_AS_HICON
+//
+// If this flag is set then IconID DWORD field is treated
+// as a handle to the icon rather then the resource ID
+//
+//
+// ECBF_OVERLAY_WARNING_ICON
+//
+// If this bit is set then this EXTCHKBOX's icon will
+// be overlaied by a common UI's IDI_CPSUI_WARNING icon.
+//
+//
+// ECBF_OVERLAY_ECBICON_IF_CHECKED
+//
+// This bit specified to overlay the ExtChkBox's Icon to
+// the OPTITEM's icon (or OPTPARAM) if the the extended
+// checked box is checked
+//
+//
+// ECBF_OVERLAY_STOP_ICON
+//
+// If this bit is set then this EXTCHKBOX's icon will
+// be overlaied by a common UI's IDI_CPSUI_STOP icon.
+//
+//
+// ECBF_OVERLAY_NO_ICON
+//
+// If this bit is set then this EXTCHKBOX's icon will
+// be overlaied by a common UI's IDI_CPSUI_NO icon.
+//
+//
+// pTitle - Pointed to extended check box title
+//
+// ** See LPTSTR description above
+//
+// pSeparator - Pointer to the separator to be used in the treeview
+// display or the static title control in the non-treeview
+// page,
+//
+// pCheckedName- Pointed to the name to be displayed in the treeview if item
+// is checked. pCheckedName is added according to the
+// pSeparator and the ECBF_CHECKNAME_AT_FRONT flags.
+//
+// * If the pCheckedName is equal to IDS_CPSUI_NOTINSTALLED
+// then common UI will automatically overaly a not installed
+// icon on top of the extended check box Icon.
+//
+// ** See LPTSTR description above
+//
+// IconID - This is the icon identifier, which can be a common strandard
+// IDI_CPSUI_xxx icon ID, caller's own icon resource ID, or a
+// handle to the caller defined icon if ECBF_ICONID_AS_HICON
+// flag is set, in any case if the IconID is zero then it
+// indicated no icon.
+//
+// wReserved[] - WORD reserved field, must be 0
+//
+// dwReserved[]- DWORD reserved field, must be 0
+//
+
+
+//
+// Following the the Flags for the OPTITEM
+//
+
+#define OPTIF_COLLAPSE 0x00000001L
+#define OPTIF_HIDE 0x00000002L
+#define OPTIF_CALLBACK 0x00000004L
+#define OPTIF_CHANGED 0x00000008L
+#define OPTIF_CHANGEONCE 0x00000010L
+#define OPTIF_DISABLED 0x00000020L
+#define OPTIF_ECB_CHECKED 0x00000040L
+#define OPTIF_EXT_HIDE 0x00000080L
+#define OPTIF_EXT_DISABLED 0x00000100L
+#define OPTIF_SEL_AS_HICON 0x00000200L
+#define OPTIF_EXT_IS_EXTPUSH 0x00000400L
+#define OPTIF_NO_GROUPBOX_NAME 0x00000800L
+#define OPTIF_OVERLAY_WARNING_ICON 0x00001000L
+#define OPTIF_OVERLAY_STOP_ICON 0x00002000L
+#define OPTIF_OVERLAY_NO_ICON 0x00004000L
+#define OPTIF_INITIAL_TVITEM 0x00008000L
+#define OPTIF_HAS_POIEXT 0x00010000L
+
+#define OPTIF_MASK 0x0001ffffL
+
+
+#define DMPUB_NONE 0
+#define DMPUB_FIRST 1
+
+#define DMPUB_ORIENTATION 1
+#define DMPUB_SCALE 2
+#define DMPUB_COPIES_COLLATE 3
+#define DMPUB_DEFSOURCE 4
+#define DMPUB_PRINTQUALITY 5
+#define DMPUB_COLOR 6
+#define DMPUB_DUPLEX 7
+#define DMPUB_TTOPTION 8
+#define DMPUB_FORMNAME 9
+#define DMPUB_ICMMETHOD 10
+#define DMPUB_ICMINTENT 11
+#define DMPUB_MEDIATYPE 12
+#define DMPUB_DITHERTYPE 13
+
+#define DMPUB_LAST 13
+
+#define DMPUB_USER 100
+
+
+//
+// DMPUB_xxxx is used in OPTITEM to identify if the item is a DEVMODE public
+// field. Following it identify which field correspond to the DMPUB_xxxx
+//
+//
+// DMPUB_ORIENTATION - dmOrientation
+//
+// DMPUB_SCALE - dmScale
+//
+// DMPUB_COPIES_COLLATE- dmCopies/dmCollate
+//
+// DMPUB_DEFSOURCE - dmDefSource (Should only used form by caller)
+//
+// DMPUB_PRINTQUALITY - dmPrintQuality
+//
+// DMPUB_COLOR - dmColor
+//
+// DMPUB_DUPLEX - dmDuplex
+//
+// DMPUB_TTOPTION - dmTTOption
+//
+// DMPUB_FORMNAME - dmFormName
+//
+// DMPUB_ICMMETHOD - dmICMMethod
+//
+// DMPUB_ICMINTENT - dmICMIntent
+//
+// DMPUB_MEDIATYPE - dmMediaType
+//
+// DMPUB_DITHERTYPE - dmDitherType
+//
+// DMPUB_USER - Anything greater than or equal to DMPUB_USER can be
+// used by the caller.
+//
+//
+// When common UI is called for the 'Document Properties' (DEVMODE), it will
+// group some of public items together simillar to the following in the
+// treeview. How it group is common UI version dependent and caller should not
+// concern its placement
+//
+// Paper/Output (Add in by the common UI)
+// Document Form (DMPUB_FORMNAME)
+// Orientation (DMPUB_ORIENTATION)
+// Source (DMPUB_DEFSOURCE)
+// Media (DMPUB_MEDIATYPE)
+// Number of Copies (DMPUB_COPIES_COLLATE)
+// Duplex (DMPUB_DUPLEX)
+//
+// Graphic (Add in by the common UI)
+// Print Quality (DMPUB_PRINTQUALITY)
+// Color (DMPUB_COLOR)
+// Image Color Matching (Add in by the common UI)
+// ICM Method (DMPUB_ICMMETHOD)
+// ICM Intent (DMPUB_ICMINTENT)
+// Scaling (DMPUB_SCALE)
+// Dithering (DMPUB_DITHERTYPE)
+// TrueType Option (DMPUB_TTOPTION)
+//
+// Options
+// Halftone Color Adjustment...
+// ALL Other Caller's Document sticky options
+//
+//
+// For 'Document Properties' the standard page 1 (user friendly page) will
+// consist following items if it appear in the OPTITEM array passed by the
+// caller. These items must have following predefined TVOT_xxx type
+// defined here and specified in the OPTTYPE's Type field.
+//
+// All DMPUB_xxx (except >= DMPUB_USER) public ID must have following
+// TVOT_xxxx type specified, else a CPDU_INVALID_DMPUB_TVOT error is returned
+//
+// DMPUB_ORIENTATION - TVOT_2STATES/TVOT_3STATES
+// DMPUB_SCALE - TVOT_UDARROW
+// DMPUB_COPIES_COLLATE - TVOT_UDARROW + EXTCHKBOX (Collate)
+// DMPUB_DEFSOURCE - TVOT_LISTBOX
+// DMPUB_PRINTQUALITY - TVOT_LISTBOX
+// DMPUB_COLOR - TVOT_2STATES
+// DMPUB_DUPLEX - TVOT_2STATES/TVOT_3STATES
+// DMPUB_TTOPTION - TVOT_LISTBOX
+// DMPUB_FORMNAME - TVOT_LISTBOX
+// DMPUB_ICMMETHOD - TVOT_2STATES/TVOT_3STATES
+// DMPUB_ICMINTENT - TVOT_2STATES/TVOT_3STATES
+// DMPUB_MEDIATYPE - TVOT_LISTBOX
+// DMPUB_DITHERTYPE - TVOT_LISTBOX
+//
+//
+
+
+#define OIEXTF_ANSI_STRING 0x0001
+
+typedef struct _OIEXT {
+ WORD cbSize;
+ WORD Flags;
+ HINSTANCE hInstCaller;
+ LPTSTR pHelpFile;
+ DWORD dwReserved[4];
+ } OIEXT, *POIEXT;
+
+//
+// OIEXT is a data structure used as extension to the OPTITEM data structure
+//
+//
+// cbSize - sizeof this structure
+//
+// Flags - One or more of OIEXTF_xxxx may be specified.
+//
+// OIEXTF_ANSI_STRING
+//
+// Specified that LPTSTR in this data structure is a ansi
+// string (not UNICODE). This bit only checked if the
+// LPTSTR is not the resource string ID
+//
+// hInstCaller - DLL instance handle, when this hInst is not NULL then all
+// resource string and icon loading for this OPTITEM and its
+// OPTTYPE, OPTPARAM are loaded from this hInstCaller Handle.
+// If this filed is NULL then it will use the hInstCaller handle
+// specified in the COMPROPSHEETUI data structure
+//
+// pHelpFile - Resource string ID or pointer to the help file for this
+// OPTITEM. If this pointer is NULL then help file for the
+// help index is assume specified in the pHelpFile field in the
+// COMPROPSHEETUI data structure.
+//
+// dwReserved - These fields are not used now, and must 0
+//
+
+
+typedef struct _OPTITEM {
+ WORD cbSize; // size of this structure
+ BYTE Level; // level in the tree view
+ BYTE DlgPageIdx; // Index to the pDlgPage
+ DWORD Flags; // OPTIF_xxxx flags
+ DWORD UserData; // caller's own data
+ LPTSTR pName; // name of the item
+ union {
+ LONG Sel; // current selection (index)
+ LPTSTR pSel; // current selection (pStr)
+ } DUMMYUNIONNAME;
+ union {
+ PEXTCHKBOX pExtChkBox; // Pointer to EXTCHKBOX structure
+ PEXTPUSH pExtPush; // Pointer to EXTPUSH
+ } DUMMYUNIONNAME2;
+ POPTTYPE pOptType; // pointer to OPTTYPE structure
+ DWORD HelpIndex; // Help file index
+ BYTE DMPubID; // Devmode public filed ID
+ BYTE UserItemID; // caller's own item ID
+ WORD wReserved; // reserved WORD field, must be 0
+ POIEXT pOIExt; // Optitem extension pointer
+ DWORD dwReserved[3]; // reserved DWORD fields (must be 0)
+ } OPTITEM, *POPTITEM;
+
+//
+// OPTITEM is to describe each treeview item's name, selection type and
+// possible selection
+//
+// cbSize - sizeof this structure
+//
+// Level - The level in the treeview, the root should have lowest
+// number and number should start with level 0. the maximum
+// number of levels are 256.
+//
+// DlgPageIdx - Zero-based index to the DLGPAGE araay pointee by
+// pDlgPage. The Maximum index is MAX_DLGPPAGE_COUNT, if
+// pDlgPage is a standard CPSUI_PDLGPAGE_xxxx then this
+// field is automatically set the common UI
+//
+// Flags - OPTIF_xxxx flags as describe above
+//
+// OPTIF_COLLAPSE
+//
+// Collaspe treeview item and its children so it is
+// not expanded initially.
+//
+//
+// OPTIF_HIDE
+//
+// Hide this item from the treeview
+//
+//
+// OPTIF_CALLBACK
+//
+// Callback to the caller when user making some
+// changes a pointer (pfnCallBack) must provided and
+// process as defined by the common UI.
+//
+//
+// OPTIF_CHANGED
+//
+// This item was changed and need to re-display. this
+// flag only used when caller returned from callback
+// funciton.
+//
+//
+// OPTIF_CHANGEONCE
+//
+// This item has been changed at least once.
+//
+//
+// OPTIF_DISABLED
+//
+// Disable this item so it become not selectable.
+//
+//
+// OPTIF_ECB_CHECKED
+//
+// Specified the associated extended check box is
+// in checked state.
+//
+//
+// OPTIF_EXT_HIDE
+//
+// Hide the extended check box/extended push botton.
+//
+//
+// OPTIF_EXT_DISABLED
+//
+// The Extended check box/push botton is disabled and
+// not selectable
+//
+//
+// OPTIF_SEL_AS_HICON
+//
+// This flag only used if this item has no type,
+// pOptType=NULL that is, when pOptType is NULL then
+// 'Sel' filed is the IconID. if flag is set then it
+// indicate IconID (Sel) is the Icon handle rather
+// than the icon resource ID.
+//
+//
+// OPTIF_EXT_IS_EXTPUSH
+//
+// Specified that pExtPush should be used when this
+// pointer is not NULL, if this pointer is not NULL
+// and this flag is clear then pExtChkBox is assumed.
+//
+//
+// OPTIF_NO_GROUPBOX_NAME
+//
+// Specified that do not overwrite the group box title
+// text, if group box ID is defined. See the TVOT_xx
+// description above.
+//
+//
+// OPTIF_OVERLAY_WARNING_ICON
+//
+// If this bit is set then this header OPTITEM's icon
+// will be overlaied by a common UI's
+// IDI_CPSUI_WARNING icon. This bit only used if this
+// item has no type, pOptType is NULL that is.
+//
+//
+// OPTIF_OVERLAY_STOP_ICON
+//
+// If this bit is set then this header OPTITEM's icon
+// will be overlaied by a common UI's IDI_CPSUI_STOP
+// icon. This bit only used if this item has no type,
+// pOptType is NULL that is.
+//
+//
+// OPTIF_OVERLAY_NO_ICON
+//
+// If this bit is set then this header OPTITEM's icon
+// will be overlaied by a common UI's IDI_CPSUI_NO
+// icon. This bit only used if this item has no type,
+// pOptType is NULL that is.
+//
+//
+// OPTIF_INITIAL_TVITEM
+//
+// Specified that this item will be the initial item
+// to be selected and display on the treeview page.
+// If the selected item is currently a child or
+// collapse then common UI will expand the selection
+// then scroll it into view.
+//
+// If this flag is clear or the set item is in hide
+// status common UI will pick the initial item to
+// display.
+//
+// OPTIF_HAS_POIEXT
+//
+// Specified that pOIExt field is a valid pointer that
+// points to OIEXT data structure. The pOIExt only
+// used by the common UI if this bit is set.
+//
+//
+// UserData - a 32-bit number used by the caller and common UI will not
+// modify it.
+//
+// pName - Pointer to the item's name, such as 'Upper Tray',
+// 'Memory' or it is used as data as describe in
+// OPTPARAM/OPTTYPE structure
+//
+// ** See LPTSTR description above
+//
+// pSel
+// Sel - Current selection for this item. This is a union field
+// which can be a pointer to a string or a LONG index
+// selection.
+//
+// ** If pOptType field is NULL then 'Sel' is the icon ID
+// to be used for the header.
+//
+// pExtPush
+// pExtChkBox - Pointer to either EXTPUSH or EXTCHKBOX data structure,
+// if this pointer is NULL then this item does not have
+// ectended check box/push botton associate with it.
+//
+// When an extended check box is associate with the
+// OPTTYPE, the OPTIF_EXT_IS_EXTPUSH must not set, the
+// OPTIF_ECB_CHECKED flag specified if the extended check
+// box is checked or not checked.
+//
+// When an Extended push botton is associated with the
+// OPTTYPE, the OPTIF_EXT_IS_EXTPUSH flag must set.
+//
+// The following flags are used in both EXTCHKBOX or
+// EXTPUSH
+//
+// OPTIF_EXT_HIDE,
+// OPTIF_EXT_DISABLED
+// OPTIF_EXT_CHANGEONCE
+//
+//
+// pOptType - Pointer to the OPTTYPE structure to describe the display
+// and selections of the item. If this pointer is NULL
+// then this this item does not have any selection. and it
+// is used as sub-items' header.
+//
+// * When pOptType is NULL then the 'Sel' is the Icon ID.
+//
+//
+// HelpIndex - a index to the help file for context sensitive help
+// if HelpInex=0 then there is no help for this item
+//
+// DMPubID - specified if this item is one of the public fields in the
+// DEVMODE structure and supported by the common UI.
+//
+// DMPUB_NONE - Not DEVMODE public fields
+// DMPUB_ORIENTATION - dmOrientation
+// DMPUB_SCALE - dmScale
+// DMPUB_COPIES_COLLATE - dmCopies/dmCollate
+// DMPUB_DEFSOURCE - dmDefSource
+// DMPUB_PRINTQUALITY - dmPrintQuality
+// DMPUB_COLOR - dmColor
+// DMPUB_DUPLEX - dmDuplex
+// DMPUB_TTOPTION - dmTTOption
+// DMPUB_FORMNAME - dmFormName
+// DMPUB_ICMMETHOD - dmICMMethod
+// DMPUB_ICMINTENT - dmICMIntent
+// DMPUB_MEDIATYPE - dmMediaType
+// DMPUB_DITHERTYPE - dmDitherType
+//
+// ** for most of DMPUB_FIRST to DMPUB_LAST each OPTITEM's
+// pName is automatically set to the standard
+// IDS_CPSUI_xxx for the consistancy reason, the
+// standard pName is set according to following table.
+//
+// DMPUB_ORIENTATION - IDS_CPSUI_ORIENTATION
+// DMPUB_SCALE - IDS_CPSUI_SCALING
+// DMPUB_COPIES_COLLATE - IDS_CPSUI_COPIES
+// DMPUB_DEFSOURCE - IDS_CPSUI_SOURCE
+// DMPUB_PRINTQUALITY - IDS_CPSUI_PRINTQUALITY
+// IDS_CPSUI_RESOLUTION
+// DMPUB_COLOR - IDS_CPSUI_COLOR_APPERANCE
+// DMPUB_DUPLEX - IDS_CPSUI_DUPLEX
+// DMPUB_TTOPTION - IDS_CPSUI_TTOPTION
+// DMPUB_FORMNAME - IDS_CPSUI_FORMNAME
+// DMPUB_ICMMETHOD - IDS_CPSUI_ICMMETHOD
+// DMPUB_ICMINTENT - IDS_CPSUI_ICMINTENT
+// DMPUB_MEDIATYPE - IDS_CPSUI_MEDIA
+// DMPUB_DITHERTYPE - IDS_CPSUI_DITHERING
+//
+// for DMPUB_PRINTQUALITY, if the pName is not one of
+// IDS_CPSUI_PRINTQUALITY or IDS_CPSUI_RESOLUTION then
+// common UI will automatically default the pName to
+// IDS_CPSUI_RESOLUTION.
+//
+// Each pData (OPTPARAM) selection in OPTPARAM which
+// OPTITEM's pOptType pointed to should use as much
+// as IDS_CPSUI_xxx standard name as possible.
+//
+//
+// ** for DMPUB_COPIES_COLLATE the common UI automatically
+// doing the following before the callback
+//
+// 1) Enable/Disable the collate extended check box if
+// OPTIF_EXT_HIDE is not specified and pExtChkBox
+// is not NULL in the OPTITEM.
+//
+// 2) Automatically change the postfix for this item
+// to be 'Copy' if selection is one, and 'Copies'
+// if selection is greater than one in the treeview
+// page, and it will also set the postfix in
+// standard document property page if the postfix
+// ID is provided (BegCtrlID + 4)
+//
+//
+// ** for DMPUB_COLOR the common UI automatically doing
+// the following before the callback, the gray
+// selection must be Sel=0 and Color slection must be
+// Sel=1
+//
+// 1) Calling halftone color adjustment with current
+// color/mono selection
+//
+// 2) Disable ICM when color is not selected
+//
+//
+// ** Please see above DMPUB_xx description for details.
+//
+// UserItemID - This is a byte ID intented to be used by the caller to
+// identify the item
+//
+// wReserved - WORD reserved. Must be zero
+//
+// pOIExt - Pointer to the OIEXT data structure to specified that
+// it has a OPTITEM extenstion structure.
+//
+// dwReserved[] - DWORD reserved and must be 0
+//
+//
+
+//
+// predefined ID for call back reason
+//
+
+#define CPSUICB_REASON_SEL_CHANGED 0
+#define CPSUICB_REASON_PUSHBUTTON 1
+#define CPSUICB_REASON_ECB_CHANGED 2
+#define CPSUICB_REASON_DLGPROC 3
+#define CPSUICB_REASON_UNDO_CHANGES 4
+#define CPSUICB_REASON_EXTPUSH 5
+#define CPSUICB_REASON_APPLYNOW 6
+#define CPSUICB_REASON_OPTITEM_SETFOCUS 7
+#define CPSUICB_REASON_ITEMS_REVERTED 8
+#define CPSUICB_REASON_ABOUT 9
+
+//
+// predefined ID for call back action
+//
+
+#define CPSUICB_ACTION_NONE 0
+#define CPSUICB_ACTION_OPTIF_CHANGED 1
+#define CPSUICB_ACTION_REINIT_ITEMS 2
+#define CPSUICB_ACTION_NO_APPLY_EXIT 3
+#define CPSUICB_ACTION_ITEMS_APPLIED 4
+
+
+typedef struct _CPSUICBPARAM {
+ WORD cbSize; // size of this structure
+ WORD Reason; // CPSUICB_REASON_XXXXX callback reason
+ HWND hDlg; // handle of the dialog box
+ POPTITEM pOptItem; // pOptItem field from COMPROPSHEETUI
+ WORD cOptItem; // cOptItem field from COMPROPSHEETUI
+ WORD Flags; // flags field from COMPROPSHEETUI
+ POPTITEM pCurItem; // current selected item of callback
+ union {
+ LONG OldSel; // Last selection (index)
+ LPTSTR pOldSel; // Last selection (pStr)
+ } DUMMYUNIONNAME;
+ DWORD UserData; // UserData in the COMPROPSHEETUI struct.
+ DWORD Result; // OUT parameter for the APPLYNOW
+ } CPSUICBPARAM, *PCPSUICBPARAM;
+
+
+typedef LONG (APIENTRY *_CPSUICALLBACK)(PCPSUICBPARAM pComPropSheetUICBParam);
+#define CPSUICALLBACK LONG APIENTRY
+
+
+//
+// CPSUICBPARAM is used when commom UI callback to the caller, this structure
+// describe the nature of callback and passed all necessary parameter for the
+// caller to make changes in the pOptItem and passed an action back to the
+// commom UI to redisplay the tree or page 1 data
+//
+//
+// cbSize - must be CPSUICBPARAM
+//
+// Reason - defined the nature of the callback
+//
+// CPSUICB_REASON_SEL_CHANGED
+//
+// User make change to the pCurItem. if the item is
+// DMPUB_COPIES_COLLATE then common UI automatically
+// change the collate extended check box without callback
+// to the caller of the extended check box changes
+//
+//
+// CPSUICB_REASON_PUSHBUTTON
+//
+// User push the push button and push button item is set
+// to PUSHBUTTON_TYPE_CALLBACK.
+//
+//
+// CPSUICB_REASON_ECB_CHANGED
+//
+// User make change to the extended checked box (i.e. it
+// eiterh checked or not checked) EXTCHKBOX in the
+// pCurItem passed in the call back parameter.
+//
+//
+// CPSUICB_REASON_DLGPROC
+//
+// The callback reason is PUSHBUTTON_TYPE_DLGPROC
+//
+//
+// CPSUICB_REASON_UNDO_CHANGES
+//
+// This callback currently is not implmented.
+//
+//
+// CPSUICB_REASON_EXTPUSH
+//
+// The callback is result of user push the extend push
+// button.
+//
+//
+// CPSUICB_REASON_APPLYNOW
+//
+// The user press the apply now button. Durning callback
+// the pCurItem is set to equal to pOptItem in this
+// structure and 'OldSel' is set to the active DlgPageIdx
+// (compare to the OPTITEM's DlgPageIdx) which the page
+// user hitting the apply now button if the page is
+// non-treeview page, otherwise the 'OldSel' is set to -1
+// (for treeview page) to indicate all valid item should
+// be apply now, if the callback return
+// CPSUICB_ACTION_NONE then the common UI will exit the
+// property sheet and returned CPSUI_OK back to the
+// caller, and if the callback function returned
+// CPSUICB_ACTION_NO_APPLY_EXIT then common UI will not
+// exit the property sheet and callback function must
+// pop-up messages dialog box to tell user why it cannot
+// exist the property sheet until certain action is take
+// by the user.
+//
+//
+// CPSUICB_REASON_OPTITEM_SETFOCUS
+//
+// This callback reason is used when an OPTITEM is getting
+// the keyboard focus. and give the callback function a
+// chance to examine the item.
+//
+//
+// CPSUICB_REASON_ITEMS_REVERTED
+//
+// This callback reason is used when user changed items
+// and decided to revert changes from the parent item in
+// the treeview. The callback funciton is called after
+// all revertable items are reverted to its original.
+//
+// The CPSUICBPARAM's pCurItem is same as pOptItem and
+// 'OldSel' field is same as cOptItem field. for each of
+// reverted item, the OPTIF_CHANGED bit will be set in the
+// OPTITEM by the common UI to indicate the item is revert
+// by the common UI. The callback function MUST NOT
+// reset this bit if it is set.
+//
+//
+// CPSUICB_REASON_ABOUT
+//
+// This callback reason is used when user hit 'About...'
+// push button in the treeview page, and the flag
+// CPSUIF_ABOUT_CALLBACK is set. The pCurItem is set to
+// same as pOptItem and 'pOldSel' is a pointer pointed to
+// original copy of COMPROPSHEETUI data structure which
+// passed to the common UI.
+//
+//
+// hDlg - The handle to the dialog box (Properties page TAB) current
+// active for the callback.
+//
+// Durning the callback the caller must not change the
+// DWL_USERDATA on hDlg, otherwise the common UI will be crash.
+// If callback function need to get/set DWL_USERDATA it should
+// call common UI's SetCPSUIUserData() and GetCPSUIUserData()
+// functions instead.
+//
+// pCurItem - Pointed to POPTITEM which the callback is generated for.
+//
+// pOldSel
+// OldSel - The last OPTITEM's pSel/Sel field before the change was made
+// by the user. The pOldSel/OldSel only valid if the callback
+// reason is CPSUICB_REASON_SEL_CHANGED, this give the callback
+// function a chance to check against the previous item
+// selection. This is a union field which can be a pointer to
+// a string or a LONG index selection.
+//
+// UserData - a 32-bit user defined data in the COMPROPSHEETUI structure,
+// commom UI will not changed it.
+//
+// Result - When the reason is CPSUICB_REASON_APPLYNOW, the callback
+// function MUST set the requested result for the caller into
+// 'Result' field when it returned a value other than the
+// CPSUICB_ACTION_NO_APPLY_EXIT and common UI will send the
+// 'Result' field value to this page's parent.
+//
+// The called function should save the current result of
+// pOptItem. The default 'Result' is set to CPSUI_OK (1) from
+// common UI. This function can alter this result before it
+// return back to to the common UI.
+//
+//
+// Return Values:
+//
+// CPSUICB_ACTION_NONE - No action need to be take by the
+// common UI.
+//
+// CPSUICB_ACTION_OPTIF_CHANGED - Ask the common UI to examine the
+// OPTIF_CHANGED flag in the OPTITEM
+// data structure. if the flag is set
+// then that item is assume need to be
+// re-display because of OPTITEM's Flags
+// field changed or item's selection
+// changed. This is different from
+// CPSUICB_ACTION_REINIT_ITEMS which
+// it assume OPTTYPE or OPTPARAM data
+// also changed.
+//
+//
+// CPSUICB_ACTION_REINIT_ITEMS - Ask the common UI to examine the
+// OPTIF_CHANGED flag in the OPTITEM
+// data structure. if the flag is set
+// then that item is assume need to be
+// re-initialized in the dilaog box
+// control. This happened if item's
+// OPTTYPE or OPTPARAMs flag/pdata
+// changed.
+//
+//
+// CPSUICB_ACTION_NO_APPLY_EXIT - This return value only valid durning
+// CPSUICB_REASON_APPLYNOW callback
+// reason, it tell common UI it has
+// some constraints in its OPTITEM which
+// must correct or confirm by the user
+// before exit. The callback function
+// must display and/or have user taking
+// some actions before return this
+// action to the common UI
+//
+// CPSUICB_ACTION_ITEMS_APPLIED - When responsed to the
+// CPSUICB_REASON_APPLYNOW, if the
+// returned action is
+// CPSUICB_ACTION_ITEMS_APPLIED then
+// common UI will reset OPTIF_CHANGEONCE
+// bit and save the new default for the
+// future undo operations.
+//
+//
+
+#define DP_STD_TREEVIEWPAGE 0xFFFF
+#define DP_STD_DOCPROPPAGE 0xFFFE
+
+#define MAX_DLGPAGE_COUNT 64
+
+#define DPF_ICONID_AS_HICON 0x0001
+#define DPF_USE_HDLGTEMPLATE 0x0002
+
+typedef struct _DLGPAGE {
+ WORD cbSize; // size of this structure
+ WORD Flags; // DPF_xxxx flags
+ DLGPROC DlgProc; // caller's dialog box subclass procedue
+ LPTSTR pTabName; // pointer to the tab name
+ DWORD IconID; // icon to be used
+ union {
+ WORD DlgTemplateID; // dialog box template ID
+ HANDLE hDlgTemplate; // handle to the dialog template
+ } DUMMYUNIONNAME;
+ } DLGPAGE, *PDLGPAGE;
+
+
+//
+// DLGPAGE structure describe non-treeview page characteristics
+//
+//
+// cbSize - size of this structure
+//
+// Flags - DPF_xxxx flags
+//
+// DPF_ICONID_AS_HICON
+//
+// If this flag is set then IconID DWORD field is
+// treated as a handle to the icon rather then the
+// resource ID
+//
+//
+// DlgProc - caller's supplied DLGPROC for sub-class the page
+// dialog box processing,
+//
+// if DlgProc is not NULL then common UI do the following
+// according the the message received except for the
+// DP_STD_xxx pages
+//
+//
+// WM_INITDIALOG
+//
+// Common UI initialize the dialog box and then call
+// DlgProc(WM_INITDIALOG) the DlgProc should return
+// exactly the behavior for the WM_INITDIALOG
+//
+// The lParam in the WM_INITDIALOG data structure is
+// a pointer to the PROPSHEETPAGE data structure.
+//
+// the lParam field in the PROPSHEETPAGE (lParam
+// passed to the WM_INITDIALOG) is the UserData
+// defined in COMPROPSHEETUI data structure
+//
+// To access to the PSPINFO data structure which
+// associate with this page, use the common UI macro
+// PPSPINFO_FROM_WM_INITDIALOG_LPARAM(lParam) where
+// lParam is the parameter passed to the
+// WM_INITDIALOG message.
+//
+// The subclass function should save these pointers
+// for its later use, but it MUST NOT modified the
+// content of the PSPINFO data structure or system
+// may crashed.
+//
+//
+// OTHER DIALOG MESSAGES
+//
+// Iit call DlgProc() and if it returned the value is
+// non-zero then common UI assume DlgProc() processed
+// the message and will not process this message.
+//
+// If the returned vlaue from DlgProc() is zero then
+// common UI will process this message.
+//
+//
+// * Durning the DlgProc the caller must not change the
+// DWL_USERDATA on hDlg, otherwise the common UI will be
+// crash. If caller need to get/set DWL_USERDATA it
+// should call common UI's SetCPSUIUserData() and
+// GetCPSUIUserData() instead.
+//
+// pTabName - Pointer to a string to describe the TAB title
+//
+// IconID - This is the icon identifier, which can be a common
+// strandard IDI_CPSUI_xxx icon ID, caller's own icon
+// resource ID, or a handle to the caller defined icon if
+// DPF_ICONID_AS_HICON flag is set, in any case if the
+// IconID is zero then it indicated no icon.
+//
+// DlgTemplateID - The template id to be use for the ProPage, it can be
+// one of DP_STD_xxxx, the DP_STD_xxx has 240 x 240 dialog
+// box units.
+//
+//
+// DP_STD_TREEVIEWPAGE
+//
+// Specified that this page is a standard treeview
+// page provided by the common ui. The treeview page
+// is a page using treeview display all valid OPTITEM
+// passed to the common UI. User can modify every
+// valid selectable OPTITEM from the treeview page.
+//
+//
+// DP_STD_DOCPROPPAGE
+//
+// Specified that this page is a standard document
+// property page provided by the common UI
+//
+// hDlgTemplate - Handle to the DLGTEMPLATE which will be use for pop up
+// dialog box
+//
+//
+// wReserved[]
+// dwReserved[] - Reserved fields, must be 0
+//
+//
+// ** Tips of designing the dialog box controls
+//
+// When designing the dialog box controls, each OPTITEM is correspoonds
+// to one input control plus one extended check box or extended push
+// button. Since common UI will automatically disable and remove
+// OPTIF_HIDE items item from the property sheet and dynamically move
+// other controls, the following tips of designing the dialog box controls
+// should follow.
+//
+// * Each item should have one input control plus optional of extended
+// check box/push botton, one icon control and other static controls
+//
+// * Each item should occupied whole horizontal spaces of the property
+// sheet, items must not overlay in vertical direction.
+//
+// * for TVOT_2STATES, TVOT_3STATES, if it araange radio buttons from
+// left to right in state order (ie. from first state's OPTPARAM to
+// last state's OPTPARAM) then the radio buttons and icons should
+// aligned in the Y coordinate. If it arrange radio buttons from top
+// to bottom (ie. from first state's OPTPARAM to last state's OPTPARAM)
+// then the radio buttons and icons should aligned in the X coordinate.
+//
+// common UI will automatically hide/move the radio buttons to compact
+// the dialog box controls. If radio buttons/icons are arranged in
+// top/down order and there is other controls obscure in Y direction
+// then radio buttons will only be re-arranged but not remove any white
+// spaces in Y direction.
+//
+// * If multiple items shared one group box, then the group box must
+// belongs to the first item (topmost in the dialog box group) in the
+// group, the group box must large enough to cover all the items in
+// side the group box.
+//
+//
+
+
+#define CPSUIF_UPDATE_PERMISSION 0x0001
+#define CPSUIF_ICONID_AS_HICON 0x0002
+#define CPSUIF_ABOUT_CALLBACK 0x0004
+
+#define CPSUI_PDLGPAGE_DOCPROP (PDLGPAGE)1
+#define CPSUI_PDLGPAGE_ADVDOCPROP (PDLGPAGE)2
+#define CPSUI_PDLGPAGE_PRINTERPROP (PDLGPAGE)3
+#define CPSUI_PDLGPAGE_TREEVIWONLY (PDLGPAGE)4
+
+typedef struct _COMPROPSHEETUI {
+ WORD cbSize; // size of this structure
+ WORD Flags; // CPSUIF_xxxx flags
+ HINSTANCE hInstCaller; // caller's hInstance
+ LPTSTR pCallerName; // pointer to the caller's name
+ DWORD UserData; // caller's own data
+ LPTSTR pHelpFile; // pointer to the help file
+ _CPSUICALLBACK pfnCallBack; // callback function pointer
+ POPTITEM pOptItem; // pointer to POPTITEM array
+ PDLGPAGE pDlgPage; // pointer to the DLGPAGE array
+ WORD cOptItem; // count of pOptItem array
+ WORD cDlgPage; // count of pDlgPage array
+ DWORD IconID; // icon to be used
+ LPTSTR pOptItemName; // pointer to the optitem's data name
+ WORD CallerVersion; // version for the caller apps
+ WORD OptItemVersion; // version for the optitem name
+ DWORD dwReserved[4]; // reserved, must be 0
+ } COMPROPSHEETUI, *PCOMPROPSHEETUI;
+
+
+//
+// COMPROPSHEETUI data structure is used when calling common UI to display dialog
+// box of properties pages.
+//
+//
+// Size - Must be sizeof (COMPROPSHEETUI)
+//
+// Flags - can be one or more of following
+//
+// CPSUIF_UPDATE_PERMISSION
+//
+// Specified the any valid pOptItem items are
+// changeable by the user.
+//
+//
+// CPSUIF_ICONID_AS_HICON
+//
+// If this flag is set then IconID DWORD field is
+// treated as a handle to the icon rather then the
+// resource ID
+//
+//
+// CPSUIF_ABOUT_CALLBACK
+//
+// If this flag bit is set, then when user hit
+// 'About...' button in the treeview tab, it will
+// call the callback function with a reason of
+// CPSUICB_REASON_ABOUT, and callback MUST handle
+// the about which pop-up dialog box to show user
+// the information about the caller and OPTITEMs.
+//
+// If this bit is not set then common UI will call
+// the ShellAbout() with formatted caller Name and
+// pOptItemName with version numbers.
+//
+//
+// hInstCaller - the caller's handle to its instance. Commom UI use
+// this handle to load caller's icon and other resources.
+//
+// pCallerName - Pointer to the caller's NULL terminated caller's
+// name, most time this is driver's name,
+// such as 'Postscript Driver'
+//
+// UserData - a 32-bit number used by the caller and common UI will
+// not modify it. this 32-bit number is passed back to
+// the caller durning the callback function
+//
+// pHelpFile - specified a standard microsoft help file (path/file)
+// for using in the common UI. in OPTITEM specified
+// HelpIndex for help in each item.
+//
+// pfnCallBack - Pointer to _CPSUICALLBACK callback function. Common
+// UI only callback to the caller if an OPTIF_CALLBACK
+// is set OPTITEM data structure's flag fields and the
+// item selection is changed by the user.
+//
+// pOptItem - Pointer to array of OPTITEM structure to be displayed
+// by the common UI
+//
+// pDlgPage - Pointer to array of DLGPAGE structure to describe
+// each property sheet page infomation, the following
+// are the standard common ui DLGPAGEs. When specified
+// CPSUI_PDLGPAGE_xxxx, the common UI will automatically
+// modify DlgPageIdx field in the OPTITEM, caller must
+// set the iStartPage correctly.
+//
+// CPSUI_PDLGPAGE_DOCPROP
+//
+// specified this a common ui standard document
+// property sheets. This includes two property
+// sheets, 1) Page Setup 2) Advance (TreeView)
+//
+//
+// CPSUI_PDLGPAGE_ADVDOCPROP
+//
+// Specified this is a treeview page only UI
+// provided by the common UI, this only has one
+// treeview page with tab of 'Advance'
+//
+//
+// CPSUI_PDLGPAGE_PRINTERPROP
+//
+// Specified this is a common UI standard printer
+// property sheet. This only has one treeview
+// page with tab of 'Device Options'
+//
+//
+// CPSUI_PDLGPAGE_TREEVIWONLY
+//
+// Specified this is a treeview page only UI
+// provided by the common UI, this only has one
+// treeview page
+//
+//
+//
+// cOptItem - Count of OPTITEM pointed by the pOptItem above
+//
+// cDlgPage - Count of DLGPAGE pointed by the pDlgPage. If
+// pDlgPage is one of the CPSUI_PDLGPAGE_xxxx then this
+// field is ignored by the common UI.
+//
+// IconID - This is the icon identifier, which can be a common
+// strandard IDI_CPSUI_xxx icon ID, caller's own icon
+// resource ID, or a handle to the caller defined icon
+// if CPSUIF_ICONID_AS_HICON flag is set, in any case
+// if the IconID is zero then it indicated no icon.
+//
+// pOptItemName - Pointer to the pOptItem data NULL terminated name,
+// most time this is device name, such as 'HP 4si'
+//
+// CallerVersion - Version for the caller, the HIBYTE(CallerVersion) is
+// the major version, and LOBYTE(CallerVersion) is the
+// minor version, such as 0x310 display as 3.16, 0x3ff
+// display as 3.255 and 0x30a display as 3.10
+//
+// OptItemVersion - Version for the OPTITEM's data, the
+// HIBYTE(OptItemVersion) is the major version, and
+// LOBYTE(OptItemVersion) is the minor version, such as
+// 0x310 display as 3.16, 0x3ff display as 3.255 and
+// 0x30a display as 3.10.
+//
+// dwReserved[4] - reserved fields, must be 0
+//
+//
+// ** pTitlee and TitleBarIcon only used if CommonPrinterPropSheetUI()
+// is the last one the Property sheet UI chain and call the PropertySheet()
+//
+//
+
+
+#define CPSFUNC_ADD_HPROPSHEETPAGE 0
+#define CPSFUNC_ADD_PROPSHEETPAGEW 1
+#define CPSFUNC_ADD_PCOMPROPSHEETUIA 2
+#define CPSFUNC_ADD_PCOMPROPSHEETUIW 3
+#define CPSFUNC_ADD_PFNPROPSHEETUIA 4
+#define CPSFUNC_ADD_PFNPROPSHEETUIW 5
+#define CPSFUNC_DELETE_HCOMPROPSHEET 6
+#define CPSFUNC_SET_HSTARTPAGE 7
+#define CPSFUNC_GET_PAGECOUNT 8
+#define CPSFUNC_SET_RESULT 9
+#define CPSFUNC_GET_HPSUIPAGES 10
+#define CPSFUNC_LOAD_CPSUI_STRINGA 11
+#define CPSFUNC_LOAD_CPSUI_STRINGW 12
+#define CPSFUNC_LOAD_CPSUI_ICON 13
+#define CPSFUNC_GET_PFNPROPSHEETUI_ICON 14
+#define CPSFUNC_ADD_PROPSHEETPAGEA 15
+#define CPSFUNC_INSERT_PSUIPAGEA 16
+#define CPSFUNC_INSERT_PSUIPAGEW 17
+#define CPSFUNC_SET_PSUIPAGE_TITLEA 18
+#define CPSFUNC_SET_PSUIPAGE_TITLEW 19
+#define CPSFUNC_SET_PSUIPAGE_ICON 20
+#define MAX_CPSFUNC_INDEX 20
+
+#ifdef UNICODE
+#define CPSFUNC_ADD_PCOMPROPSHEETUI CPSFUNC_ADD_PCOMPROPSHEETUIW
+#define CPSFUNC_ADD_PFNPROPSHEETUI CPSFUNC_ADD_PFNPROPSHEETUIW
+#define CPSFUNC_LOAD_CPSUI_STRING CPSFUNC_LOAD_CPSUI_STRINGW
+#define CPSFUNC_ADD_PROPSHEETPAGE CPSFUNC_ADD_PROPSHEETPAGEW
+#define CPSFUNC_INSERT_PSUIPAGE CPSFUNC_INSERT_PSUIPAGEW
+#define CPSFUNC_SET_PSUIPAGE_TITLE CPSFUNC_SET_PSUIPAGE_TITLEW
+
+#else
+#define CPSFUNC_ADD_PCOMPROPSHEETUI CPSFUNC_ADD_PCOMPROPSHEETUIA
+#define CPSFUNC_ADD_PFNPROPSHEETUI CPSFUNC_ADD_PFNPROPSHEETUIA
+#define CPSFUNC_LOAD_CPSUI_STRING CPSFUNC_LOAD_CPSUI_STRINGA
+#define CPSFUNC_ADD_PROPSHEETPAGE CPSFUNC_ADD_PROPSHEETPAGEA
+#define CPSFUNC_INSERT_PSUIPAGE CPSFUNC_INSERT_PSUIPAGEA
+#define CPSFUNC_SET_PSUIPAGE_TITLE CPSFUNC_SET_PSUIPAGE_TITLEA
+
+#endif
+
+//
+// for the CPSFUNC_SET_RESULT
+//
+
+#define SR_OWNER 0
+#define SR_OWNER_PARENT 1
+
+typedef struct _SETRESULT_INFO {
+ WORD cbSize;
+ WORD wReserved;
+ HANDLE hSetResult;
+ DWORD Result;
+ } SETRESULT_INFO, *PSETRESULT_INFO;
+
+//
+// This is for CPSFUNC_INSERT_PSUIPAGE
+//
+
+#define HINSPSUIPAGE_FIRST (HANDLE)0xFFFFFFFE
+#define HINSPSUIPAGE_LAST (HANDLE)0xFFFFFFFF
+#define HINSPSUIPAGE_INDEX(i) (HANDLE)MAKELONG(i, 0);
+
+#define PSUIPAGEINSERT_GROUP_PARENT 0
+#define PSUIPAGEINSERT_PCOMPROPSHEETUI 1
+#define PSUIPAGEINSERT_PFNPROPSHEETUI 2
+#define PSUIPAGEINSERT_PROPSHEETPAGE 3
+#define PSUIPAGEINSERT_HPROPSHEETPAGE 4
+#define PSUIPAGEINSERT_DLL 5
+#define MAX_PSUIPAGEINSERT_INDEX 5
+
+#define IDX_2_HINSPSUIPAGE(i) ((HANDLE)MAKELONG(i, 0))
+#define HINSPSUIPAGE_2_IDX(h) ((UINT)LOWORD(h))
+
+
+#define INSPSUIPAGE_MODE_BEFORE 0
+#define INSPSUIPAGE_MODE_AFTER 1
+#define INSPSUIPAGE_MODE_FIRST_CHILD 2
+#define INSPSUIPAGE_MODE_LAST_CHILD 3
+#define INSPSUIPAGE_MODE_INDEX 4
+
+
+typedef struct _INSERTPSUIPAGE_INFO {
+ WORD cbSize;
+ BYTE Type;
+ BYTE Mode;
+ DWORD dwData1;
+ DWORD dwData2;
+ DWORD dwData3;
+ } INSERTPSUIPAGE_INFO, *PINSERTPSUIPAGE_INFO;
+
+
+//
+// for the CPSFUNC_SET_HSTARTPAGE
+//
+
+#define SSP_TVPAGE 10000
+#define SSP_STDPAGE 10001
+
+typedef DWORD (CALLBACK *PFNCOMPROPSHEET)(HANDLE hComPropSheet,
+ UINT Function,
+ LPARAM lParam1,
+ LPARAM lParam2);
+
+
+typedef struct _PSPINFO {
+ WORD cbSize;
+ WORD wReserved;
+ HANDLE hComPropSheet;
+ HANDLE hCPSUIPage;
+ PFNCOMPROPSHEET pfnComPropSheet;
+ } PSPINFO, *PPSPINFO;
+
+//
+// PPSPINFO_FROM_WM_INITDIALOG_LPARAM(lParam) macro retrieve a pointer to the
+// PSPINFO data structure. the lParam must be the lParam passed to the
+// WM_INITDIALOG, otherwise the system can failed
+//
+
+#define PPSPINFO_FROM_WM_INITDIALOG_LPARAM(lParam) \
+ (PPSPINFO)((LPBYTE)lParam + ((LPPROPSHEETPAGE)lParam)->dwSize)
+
+//
+// PSPINFO
+//
+// This structure is used durning property sheet page's WM_INITDIALOG message.
+// At WM_INITDIALOG, the lParam is a pointer to the PROPSHEETPAGE, and
+// lParam field in the PROPSHEETPAGE is a pointer to the PSPINFO. the
+// original lParam in the PROPSHEETPAGE is saved in the lParam field in the
+// PSPINFO data structure.
+//
+// When process WM_INITDIALOG message, it should save the lParam (PSPINFO
+// structure pointer) for later to call common UI callback functions.
+//
+//
+// cbSize - Size of this structure in bytes
+//
+// wReserved - Reserved, must be set to zero
+//
+// hComPropSheet - Handle to the parent page which is the hComPropSheet
+// passed to the CPSFUNC_ADD_PROPSHEETPAGE
+//
+// hCPSUIPage - Handle to the this added common UI property sheet page.
+//
+// pfnComPropSheet - Pointer to the common UI callback function, using this
+// function pointer to do CPSFUNC_xxxx
+//
+//
+
+
+//
+// PFNCOMPROPSHEET function descriptions
+//
+// For each function index, it passed a handle, a Function Index and two (2)
+// long parameters, the 'hComPropSheet' handle passed must be the handle passed
+// from common UI when common UI called the caller supplied function
+//
+// pfnPropSheetUI(pPropSheetUIData);
+//
+// Following are the description of each function index
+//
+//
+// -------------------------------------------------------------------------
+// Function = CPSFUNC_ADD_HPROPSHEETPAGE
+//
+// This function add a page to the hComPropSheet using handle to the
+// PROPSHEETPAGE
+//
+//
+// Parameters:
+//
+// lParam1 - is a handle to the PROPSHEETPAGE that created by the caller
+// using CreatePropertySheetPage()
+//
+// lParam2 - Not used, must be 0
+//
+//
+// Return Value:
+//
+// The return value is the handle of newly added common property sheet
+// page, if return value is NULL then function failed.
+//
+//
+// -------------------------------------------------------------------------
+// Function = CPSFUNC_ADD_PROPSHEETPAGE
+//
+// This function add a page to the hComPropSheet using PROPSHEETPAGE
+// data structure.
+//
+//
+// Parameters:
+//
+// lParam1 - is a pointer to PROPSHEETPAGE data structure
+//
+// lParam2 - Not used.
+//
+//
+// Return Value:
+//
+// The return value is the handle of newly added common property sheet
+// page, if return value is NULL then function failed.
+//
+//
+// -------------------------------------------------------------------------
+// Function = CPSFUNC_ADD_PCOMPROPSHEETUI
+//
+// This function add propety page(s) to the hComPropSheet handle using
+// COMPROPSHEETUI data structure.
+//
+//
+// Parameters:
+//
+// lParam1 - is a pointer to COMPROPSHEETUI data structure
+//
+// lParam2 - pointer to a 32-bit location that received the total pages
+// added by the COMPROPSHEETUI data structure if sucessful else
+// it contains the ERR_CPSUI_xxx error codes.
+//
+//
+// Return Value:
+//
+// The return value is the handle of newly added common property sheet
+// page(s), if return value is NULL then function failed.
+//
+//
+// -------------------------------------------------------------------------
+// Function = CPSFUNC_ADD_PFNPROPSHEETUI
+//
+// This function add property page(s) to the hChild handle using
+// lParam1 as PFNPROPSHEETUI function pointer and lParam2 as the function
+// parameter. The common UI call supplied function as following
+//
+// PROPSHEETUI_INFO PSUIInfo;
+//
+// PSUIInfo.cbSize = sizeof(PROPSHEETUI_INFO);
+// PSUIInfo.Version = PROPSHEETUI_INFO_VERSION;
+// PSUIInfo.Flags = (Ansi) ? 0: PSUIINFO_UNICODE;
+// PSUIInfo.Reason = PROPSHEETUI_REASON_INIT;
+// PSUIInfo.hComPropSheet = hComPropSheet;
+// PSUIInfo.pfnComPropSheet = ComPropSheetUICallBack;
+// PSUIInfo.lParamInit = lParam2;
+// PSUIInfo.UserData = 0;
+// PSUIInfo.Result = 0;
+//
+// ((PFNPROPSHEETUI)lParam1)(&PSUIInfo, lParam2);
+//
+//
+// If the pfnPropSheetUI() need to add/delete any common UI pages then
+// it must use hComPropSheet as its handle when calling the
+// ComPropSheetUICallBack().
+//
+//
+// Parameters:
+//
+// lParam1 - a PFNPROPSHEETUI function pointer.
+//
+// lParam2 - a 32-bit data that will be used as lParam when calling
+// PFNPROPSHEETUI function pointer.
+//
+//
+// Return Value:
+//
+// The return value is the newly added property pages function handle, if
+// return value is NULL then function failed or no page is added.
+//
+//
+//
+// -------------------------------------------------------------------------
+// Function = CPSFUNC_DELETE_HCOMPROPSHEET
+//
+// This function delete child property page(s) from hComPropSheet parent
+// using the child handle passed.
+//
+//
+// Parameters:
+//
+// lParam1 - the handle of common property sheet pages that to be deleted.
+// This handle must be the handle returned from CPSFUNC_ADD_xxx
+// functions.
+//
+// lParam2 - not used, must be 0
+//
+// Return Value:
+//
+// The return value is greater than zero if function sucessful, and less
+// or equal to zero if the function failed.
+//
+// -------------------------------------------------------------------------
+// Function = CPSFUNC_GET_PAGECOUNT
+//
+// This function return total property sheet pages belongs to a common
+// UI property sheet page handle hComPropSheet
+//
+//
+// Parameters:
+//
+// lParam1 - not used, must be 0
+//
+// lParam2 - not used, must be 0.
+//
+//
+// Return Value:
+//
+// The return value is total page count if function sucessful or zero if
+// function failed.
+//
+//
+// -------------------------------------------------------------------------
+// Function = CPSFUNC_SET_RESULT
+//
+// This function set the result of property sheet page to its owner that
+// added this page by CPSFUNC_ADD_xxx function indices
+//
+// Parameters:
+//
+// lParam1 - Handle to the common UI property sheet page that setting the
+// result. If this handle is NULL then it is treated as
+// equal to the hComPropSheet.
+//
+// lParam2 - a 32-bit DWORD result to be set.
+//
+//
+// Return Value:
+//
+// > 0: Successful, return value is total count of parents set the result
+// = 0: There is no owner or parent for the lParam1 handle.
+// < 0: function failed because of invalid lParam1 handle.
+//
+//
+// -------------------------------------------------------------------------
+// Function = CPSFUNC_SET_HSTARTPAGE
+//
+//
+// Parameters:
+//
+// lParam1 - the handle of common property sheet pages that to be set
+// as initial page that appear when the property sheet dialog
+// boxes is created. This handle must be the handle returned
+// from CPSFUNC_ADD_xxx functions.
+//
+// lParam2 - a LONG number to specified the children index. if lParam1
+// handle is a parent then lParam2 specified zero base children
+// index for using as start page.
+//
+// It also can be one of following special index
+//
+// SSP_TVPAGE
+//
+// set to the treeview page, this only valid if lParam1
+// handle was added by the CPSFUNC_ADD_PCOMPROPSHEETUI.
+//
+// SSP_STDPAGE
+//
+// Set to the standard document property sheet page
+// (Page 1 user friendly page). this only valid if
+// lParam1 handle was added by the
+// CPSFUNC_ADD_PCOMPROPSHEETUI.
+//
+//
+// Return Value:
+//
+// The return value is greater than zero if function sucessful, and less
+// or equal to zero if the function failed.
+//
+//
+// -------------------------------------------------------------------------
+// Function = CPSFUNC_GET_HPSUIPAGES
+//
+// This function return array of children HPROPSHEETPAGE belongs to
+// the parent hComPropSheet UI property sheet page handle hComPropSheet
+//
+//
+// Parameters:
+//
+// lParam1 - Pointer to an array of HPROPSHEETPAGE that to be stored
+// the handle upon return.
+//
+// lParam2 - Count of HPROPSHEETPAGE array pointed by the lParam1
+//
+//
+// Return Value:
+//
+// The return value is total HPROPSHEETPAGE stored in the array pointed
+// by the lParam1. To get all hPropSheetPage for any common property
+// sheet handle's (hCPSUIPage) children, it can use following sequence.
+//
+// if ((cPage = pfnComPropSheet(hComPropSheet,
+// CPSFUNC_GET_PAGECOUNT,
+// (LPARAM)hCPSUIPage,
+// 0L)) &&
+// (phPage = ALLOCMEM(cPage * sizeof(HANDLE)))) {
+//
+// pfnComPropSheet(hCPSUIPage,
+// CPSFUNC_GET_HPSUIPAGES,
+// (LPARAM)phPage,
+// (LPARAM)cPage);
+// }
+//
+// -------------------------------------------------------------------------
+// Function = CPSFUNC_LOAD_CPSUI_STRING
+//
+// This function load the common property sheet UI resource string
+//
+// Parameters:
+//
+// lParam1 - Pointer to LPTSTR string which will stored the loaded
+// resource string from the common property sheet UI DLL.
+//
+// lParam2 - LOWORD(lParam2) = Count of characters (includes null
+// terminator) which pointed by the lParam1
+//
+// HIWORD(lParam2) = Common property sheet UI predefined string
+// resource ID as IDS_CPSUI_xxxx
+//
+//
+// Return Value:
+//
+// > 0: Total characters stored in the string pointed by the lParam1, this
+// is not includes the null terminator
+// = 0: Invalid IDS_CPSUI_xxx passed from HIWORD(lParam)
+// < 0: Either lParam1 is NULL or count of character is 0 from
+// LOWORD(lParam2)
+//
+//
+// -------------------------------------------------------------------------
+// Function = CPSFUNC_LOAD_CPSUI_ICON
+//
+// This function load the common property sheet UI resource icon.
+//
+// Parameters:
+//
+// lParam1 - Common property sheet UI predefined icon resource ID as
+// IDI_CPSUI_xxxx.
+//
+// lParam2 - LOWORD(lParam2) = cx icon size in pixel. If zero then
+// SM_CXICON is used
+// HIWORD(lParam2) = cy icon size in pixel. If zero then
+// SM_CYICON is used
+//
+//
+// Return Value:
+//
+// Return value is the handle to the hIcon if function succeed, a NULL
+// if function failed. The caller must call DestroyIcon() when it no
+// longer need to use the hIcon returned
+//
+//
+// -------------------------------------------------------------------------
+// Function = CPSFUNC_GET_PFNPROPSHEETUI_ICON
+//
+// This function let the caller return hIcon of its children pages that
+// was added by CPSFUNC_ADD_PFNPROPSHEETUI
+//
+// Parameters:
+//
+// lParam1 - Handle of common property sheet pages that the hIcon will be
+// queried. This handle must be the handle returned from
+// CPSFUNC_ADD_PFNPROPSHEETUI function.
+//
+// lParam2 - LOWORD(lParam2) = cx icon size in pixel. If zero then
+// SM_CXICON is used
+// HIWORD(lParam2) = cy icon size in pixel. If zero then
+// SM_CYICON is used
+//
+//
+// Return Value:
+//
+// Return value is the handle to the hIcon if function succeed, a NULL
+// if function failed. The caller must call DestroyIcon() when it no
+// longer need to use the hIcon returned
+//
+//
+// -------------------------------------------------------------------------
+// Function = CPSFUNC_INSERT_PSUIPAGE
+//
+// This function let the caller insert common property sheet pages at
+// set position. The hComPropSheet must be the parent handle.
+//
+// Parameters:
+//
+// lParam1 - Handle of common property sheet pages that the page position
+// will be inserted. This handle must be the handle returned
+// from previous CPSFUNC_ADD_xxx or CPSFUNC_INSERT_PSUIPAGE that
+// added or inserted using the hComPropSheet if the Mode field
+// in INSPSUIPAGE_INFO data structure is one of the follwing
+//
+// INSPSUIPAGE_MODE_BEFORE
+// INSPSUIPAGE_MODE_AFTER - Common UI page handle
+//
+// INSPSUIPAGE_MODE_INDEX - the lParam1 is an zero based
+// child index.
+//
+// INSPSUIPAGE_MODE_FIRST_CHILD
+// INSPSUIPAGE_MODE_LAST_CHILD - The lParam1 is ignonred.
+//
+//
+// If lParam1 is a valid common property sheet page handle then
+// it is the child page handle of hComPropSheet that added by
+// CPSFUNC_ADD_xxx or inserted by CPSFUNC_INSERT_PSUIPAGE.
+//
+// lParam2 - A pointer that points to INSERTPSUIPAGE_INFO data structure.
+// Fields must set according to the following.
+//
+// cbSize - size of this structure
+//
+// Type - Type of page(s) to be inserted. It can be one
+// of the following
+//
+// PSUIPAGEINSERT_GROUP_PARENT
+//
+// Insert a group parent that can be used to insert
+// new pages under it. This is typically used when
+// a set of common UI pages must be group together and
+// can be deleted later using a single group parent
+// handle without individual deleting each page.
+//
+// This handle can be nested. After this function
+// returned the group parent handle, it can be used
+// as hComPropSheet handle (first parameter in the
+// common UI callback) as parent handle so insertion
+// will be inserted at level below returned group
+// parent handle.
+//
+//
+// PSUIPAGEINSERT_PCOMPROPSHEETUI
+//
+// Insert pages using COMPROPSHEETUI data structure,
+// dwData1 is a pointer to the COMPROPSHEETUI data
+// structure.
+//
+//
+// PSUIPAGEINSERT_PFNPROPSHEETUI
+//
+// Insert pages using PFNPROPSHEETUI function pointer.
+// The dwData1 is a PFNPROPSHEETUI function pointer.
+// The common UI will call this pfnPropSheetUI()
+// function pointer with PROPSHEETUI_REASON_INIT to
+// have it add pages.
+//
+// When common UI call pfnPropSheetUI() (dwData1) it
+// also passed a 32-bit parameter from the dwData2
+// field in INSERTPSUIPAGE_INFO data structure.
+//
+//
+// PSUIPAGEINSERT_PROPSHEETPAGE
+//
+// Insert pages using PROPSHEETPAGE data structure.
+// The dwData1 is a pointer to the PROPSHEETPAGE
+// data structure.
+//
+//
+// PSUIPAGEINSERT_HPROPSHEETPAGE
+//
+// Insert pages using HPROPSHEETPAGE handle. The
+// dwData1 is a PROPSHEETPAGE handle which was
+// created by CreatePropertySheetPage().
+//
+//
+// PSUIPAGEINSERT_DLL
+//
+// Insert pages from a dynnmaic link library. The
+// dwData1 is a pointer to a null terminated string
+// that specified the dynamic link library file name.
+//
+// The dwData2 is a pointer to a null terminated ASCII
+// string that specified the pfnPropSheetUI function
+// name. (MUST BE ASCII STRING)
+//
+// Common UI will do a LoadLibrary((LPTSTR)dwData1),
+// pfnPropSheetUI = GetProcAddress((LPTSTR)dwData2)
+// then call the pfnPropSheetUI with a lParam from
+// dwData3. The called reason from common UI is
+// set to PROPSHEETUI_REASON_INIT.
+//
+// Using this method insert pages will guaranteed that
+// library will be unload correctly.
+//
+//
+// Mode - Insert Mode, it can be one of the following
+//
+//
+// INSPSUIPAGE_MODE_BEFORE
+//
+// Insert pages before the common property sheet page
+// handle specified by lParam1
+//
+//
+// INSPSUIPAGE_MODE_AFTER
+//
+// Insert pages after the common property sheet page
+// handle specified by lParam1
+//
+//
+// INSPSUIPAGE_MODE_FIRST_CHILD
+//
+// Insert pages as the first child of hComPropSheet
+// parent handle, the lParam1 is ignored
+//
+//
+// INSPSUIPAGE_MODE_LAST_CHILD
+//
+// Insert pages as the last child of hComPropSheet
+// parent handle, the lParam1 is ignored
+//
+//
+// INSPSUIPAGE_MODE_INDEX
+//
+// Insert pages as a zero base child index of its
+// parent handle specified by hComPropSheet.
+//
+// The lParam1 is the zero based index special handle
+// that must generated by HINSPSUIPAGE_INDEX(Index)
+// macro. If the index is greater than or equal to
+// the total count of children then it will treat the
+// mode same as INSPSUIPAGE_MODE_LAST_CHILD
+//
+//
+// dwData1
+// dwData2
+// dwData3 - 32-bit data associate with the 'Type' field
+// as following
+//
+//
+// PSUIPAGEINSERT_GROUP_PARENT
+//
+// dwData1 = Not used, must be 0
+// dwData2 = Not used, must be 0
+// dwData3 = Not used, must be 0
+//
+//
+// PSUIPAGEINSERT_PCOMPROPSHEETUI
+//
+// dwData1 = pointer to COMPORPSHEETUI data structure.
+// dwData2 = at return if sucessful, it contains total
+// page added. If failed, it contains the
+// ERR_CPSUI_xxx codes
+// dwData3 = Not used, must be 0
+//
+//
+// PSUIPAGEINSERT_PFNPROPSHEETUI
+//
+// dwData1 = PFNPROPSHEETUI function pointer
+// dwData2 = 32-bit parameter passed to pfnPropSheetUI
+// dwData3 = Not used, must be 0
+//
+//
+// PSUIPAGEINSERT_PROPSHEETPAGE
+//
+// dwData1 = Pointer to PROPSHEETPAGE data structure.
+// dwData2 = not used, must be 0
+// dwData3 = not used, must be 0
+//
+//
+// PSUIPAGEINSERT_HPROPSHEETPAGE
+//
+// dwData1 = Is the HPROPSHEETPAGE handle that created
+// by a call to CreatePropertySheetPage().
+// dwData2 = not used, must be 0
+// dwData3 = not used, must be 0
+//
+//
+// PSUIPAGEINSERT_DLL
+//
+// dwData1 = Pointer to a null terminated dynamic link
+// library filename.
+// dwData2 = Pointer to a null terminated function
+// name (PFNPROPSHEETUI) in the dynamin link
+// library.
+// dwData3 = 32-bit parameter passed to pfnPropSheetUI
+// (PFNPROPSHEETUI) function from dwData2
+//
+//
+// Return Value:
+//
+// The return value is the handle of newly added common property sheet
+// page(s), if return value is NULL then function failed.
+//
+//
+// -------------------------------------------------------------------------
+// Function = CPSFUNC_SET_PSUIPAGE_TITLE
+//
+// This function let the caller set a new title for a particular common
+// UI page title (on the property sheet page tab)
+//
+// Parameters:
+//
+// lParam1 - the handle of common property sheet pages that title to be
+// set. This handle must be the handle returned from following
+//
+// CPSFUNC_ADD_PROPSHEETPAGE
+// CPSFUNC_ADD_HPROPSHEETPAGE
+// CPSFUNC_INSERT_PSUIPAGE with type of
+// PSUIPAGEINSERT_PROPSHEETPAGE or
+// PSUIPAGEINSERT_HPROPSHEETPAGE
+//
+// lParam2 - Pointer to a null terminated string for the new title
+//
+//
+// Return Value:
+//
+// The return value is greater than zero if function sucessful, and less
+// or equal to zero if the function failed.
+//
+// This function will returned 0 if the property sheet pages is not
+// currently displayed.
+//
+//
+// -------------------------------------------------------------------------
+// Function = CPSFUNC_SET_PSUIPAGE_ICON
+//
+// This function let the caller set a new icon for a particular common
+// UI page icon (on the property sheet page tab)
+//
+// Parameters:
+//
+// lParam1 - the handle of common property sheet pages that icon to be
+// set. This handle must be the handle returned from following
+//
+// CPSFUNC_ADD_PROPSHEETPAGE
+// CPSFUNC_ADD_HPROPSHEETPAGE
+// CPSFUNC_INSERT_PSUIPAGE with type of
+// PSUIPAGEINSERT_PROPSHEETPAGE or
+// PSUIPAGEINSERT_HPROPSHEETPAGE
+//
+// lParam2 - Handle to Icon, this icon is best as 16x16 icon otherwise it
+// will be stretch to 16x16 (pixel).
+//
+//
+// Return Value:
+//
+// The return value is greater than zero if function sucessful, and less
+// or equal to zero if the function failed.
+//
+// This function will returned 0 if the property sheet pages is not
+// currently displayed.
+//
+// After this function is successful set the icon, the caller can destroy
+// the hIcon using DestroyIcon() if the hIcon is created by CreateIcon().
+// If the hIcon (lParam2) passed is using LoadIcon() then it does not need
+// to destroy the icon.
+//
+//
+// -------------------------------------------------------------------------
+//
+
+
+
+#define PROPSHEETUI_REASON_INIT 0
+#define PROPSHEETUI_REASON_GET_INFO_HEADER 1
+#define PROPSHEETUI_REASON_DESTROY 2
+#define PROPSHEETUI_REASON_SET_RESULT 3
+#define PROPSHEETUI_REASON_GET_ICON 4
+#define MAX_PROPSHEETUI_REASON_INDEX 4
+
+#define PROPSHEETUI_INFO_VERSION 0x0100
+
+#define PSUIINFO_UNICODE 0x0001
+
+typedef struct _PROPSHEETUI_INFO {
+ WORD cbSize;
+ WORD Version;
+ WORD Flags;
+ WORD Reason;
+ HANDLE hComPropSheet;
+ PFNCOMPROPSHEET pfnComPropSheet;
+ LPARAM lParamInit;
+ DWORD UserData;
+ DWORD Result;
+ } PROPSHEETUI_INFO, *PPROPSHEETUI_INFO;
+
+
+//
+// For the PROPSHEETUI_REASON_GET_ICON call which lParam is a pointer to
+// PROPSHEETUI_GETICON_INFO
+//
+
+typedef struct _PROPSHEETUI_GETICON_INFO {
+ WORD cbSize;
+ WORD Flags;
+ WORD cxIcon;
+ WORD cyIcon;
+ HICON hIcon;
+ } PROPSHEETUI_GETICON_INFO, *PPROPSHEETUI_GETICON_INFO;
+
+
+typedef LONG (FAR *PFNPROPSHEETUI)(PPROPSHEETUI_INFO pPSUIInfo,
+ LPARAM lParam);
+
+
+//
+// PFNPROPSHEETUI
+//
+// This function is user defined function which will be called by the common
+// UI when a caller wish to include the executable property sheets.
+//
+// pPSUIInfo - Pointer to PROPSHEETUI_INFO below for description of
+// PROPSHEETUI_INFO.
+//
+// If this pointer is NULL then this function is not called from
+// common UI, and lParam should be used to determined the
+// action and outcome of this funciton.
+//
+// lParam - A LPARAM intented for this funciton depends on the reason.
+// If pPSUIInfo is NULL then this function is not called from
+// common UI, the lParam is the parameter which agreed with
+// the caller.
+//
+// if pPSUIInfo is not NULL then this function assume the call
+// is from the common UI. lParam has following meanion depends
+// on the reason field.
+//
+// PROPSHEETUI_REASON_INIT
+//
+// The lParam is either passed from CPSFUNC_ADD_PFNPROPSHEETUI
+// callback function's second parameter (lParam2) or it is
+// from CommonPropertySheetUI()'s lParam (seccond parameter)
+// without any modification.
+//
+// The lParam MUST NOT be a variable or a pointer to memory
+// block which resides on the caller function's stack, since
+// after this function exit, the lParam will become invalid
+// and can cause fatal system error.
+//
+// The lParam parameter is copied to the lParamInit field in
+// PROPSHEETUI_INFO data structure. The lParamInit field
+// will be passed to all subsequent pfnPropSheetUI() calls
+// without any modification.
+//
+//
+// PROPSHEETUI_REASON_GET_INFO_HEADER:
+//
+// lParam is a pointer to the PROPSHEETUI_INFO_HEADER data
+// structure. this function must correctly fill this structure
+// fields before it returned.
+//
+//
+// PROPSHEETUI_REASON_DESTROY
+//
+// lParam is zero to indicate the destroy is cause either by a
+// caller calling CPSFUNC_DELETE_HCOMPROPSHEET or failed
+// in caller's CPSFUNC_ADD_xxxx.
+//
+// lParam is non zero to indicate the destroy is cause by
+// exiting from the property sheet user interface.
+//
+//
+// PROPSHEETUI_REASON_SET_RESULT
+//
+// lParam is a pointer to SETRESULT_INFO data structure.
+// Fields in SETRESULT_INFO data structure is set to following
+//
+// hSetResult: Handle to the common UI property sheet
+// pages which added by the CPSFUNC_ADD_xxx
+// callback function indices.
+//
+// Result: The result from the hSetResult to be set.
+// When return greater than zero then Result
+// in this field is set to its parent.
+//
+//
+// PROPSHEETUI_REASON_GET_ICON
+//
+// lParam is a pointer to PROPSHEETUI_GETICON_INFO data
+// structure. Fields in PROPSHEETUI_GETICON_INFO data
+// structure are set to following
+//
+// cxIcon = cx Icon size in pixel
+// cyIcon = cy Icon size in pixel
+// hIcon = Initial to NULL, and this function must put
+// the created icon handle in this field before
+// returned.
+//
+
+
+//
+// PROPSHEETUI_INFO
+//
+// This structure is used when common UI calling the caller passed function
+// entry point PFNPROPSHEETUI, the pfnPropSheetUI() return a LONG to
+// indicate result of this function.
+//
+// When the pfnPropSheetUI() returned, it must also put the required result
+// in the Result field, each PROPSHEETUI_REASON_xxx has different required
+// result as describe below.
+//
+//
+//
+// cbSize - sizeof this structure (PROPSHEETUI_INFO)
+//
+// Version - the PROPSHEETUI_INFO data structure version. Current
+// version is set to PROPSHEETUI_INFO_VERSION
+//
+// Flags - One or more following is may be defined
+//
+// PSUIINFO_UNICODE
+//
+// The caller's executable was original compiled was
+// intented using unicode.
+//
+//
+// Reason - Following reasons are defined.
+//
+// PROPSHEETUI_REASON_INIT
+//
+// When first time the pfnPropSheetUI() called, this
+// reason is used to have the function initialize
+// itself and use the pfnComPropSheet() function
+// pointer provided to add new pages to the
+// hComPropSheet handle passed. The UserData in this
+// data structure is initially set equal to zero (0).
+//
+// * Return > 0 to indicate sucesful and <= 0 to
+// indicate error.
+//
+// *NOTE*
+//
+// The lParam MUST NOT be a variable or a pointer to
+// memory block which resides on the caller function's
+// stack, since after this function exit, the lParam
+// will become invalid and can cause fatal system
+// error.
+//
+// If this function reason returned failed ( <= 0),
+// this function (pfnPropSheetUI) will received a
+// PROPSHEETUI_REASON_DESTROY function reason right
+// after this function reason returned.
+//
+//
+// PROPSHEETUI_REASON_GET_INFO_HEADER
+//
+// It is called after the PROPSHEETUI_REASON_INIT is
+// successful returned. This reason is used to asked
+// the function fill in the PROPSHEETUI_INFO_HEADER
+// for pop-up the property sheet dialog boxes.
+//
+// lParam in this reason is a pointer to the
+// PROPSHEETUI_INFO_HEADER data structure, following
+// fields are requrested to be filled in.
+//
+// Flags - PSUIHDRF_xxx flags
+// pTitle - The property sheet title
+// hWndParent - handle to the parent of property
+// sheet pages.
+// hInst - Instance data handle for this
+// function.
+// hIcon
+// IconID - Icon used on the title bar.
+//
+// * Return > 0 to indicate sucesful and pop-up the
+// property sheet dialog boxes or returned <= 0 to
+// indicate error (not property sheet UI appeared)
+//
+//
+// PROPSHEETUI_REASON_DESTROY
+//
+// When the property sheet ready to dismissed or the
+// caller is delete the common UI pages added by the
+// pfnPropSheetUI(), the common UI will call this
+// entry point to have it de-initialized itself and
+// free up all the memory used for this function
+// instance. The UserData field passed is the
+// 'UserData' field which returned from previous
+// PROPSHEETUI_REASON_xxxx.
+//
+// When this function called, all hComPropSheet's
+// children are desotroyed and children's common UI
+// handles are not longer valid.
+//
+// * Return > 0 to indicate sucesful and <= 0 to
+// indicate error.
+//
+//
+// PROPSHEETUI_REASON_SET_RESULT
+//
+// The reason is used when an added handle from
+// CPSFUNC_ADD_xxxx whant to return the result to
+// this pfnPropSheetUI() caller.
+//
+// The lParam in second parameter is a pointer to a
+// SETRESULT_INFO data structure.
+//
+// hSetResult: specified the common UI property
+// sheet page handle which added by
+// this function using
+// CPSFUNC_ADD_xxx indicies.
+//
+// Result: Specified the Result to be set to
+// this pfnPropSheetUI() form the
+// hSetResult property sheet page
+// handle. If return value is greater
+// than zero then the value in this
+// Result field will be set to its
+// parent if one exist, at this case
+// this function can alter the Result
+// field value for its parent.
+//
+// * Returned greater than zero to continue send to
+// its parent, else it stop sending the Result filed
+// value to its parent.
+//
+//
+// PROPSHEETUI_REASON_GET_ICON
+//
+// The reason is used to retrived the Icon which
+// represent this pfnPropSheetUI().
+//
+// lParam is a pointer to PROPSHEETUI_GETICON_INFO '
+// data structure. Fields in PROPSHEETUI_GETICON_INFO
+// data structure are set to following
+//
+// cxIcon = cx Icon size in pixel
+// cyIcon = cy Icon size in pixel
+// hIcon = Initial to NULL, and this function
+// must put the created icon handle in
+// this field before return.
+//
+//
+// * Return > 0 to indicate sucesful (hIcon is the
+// requested icon handle). Return = 0 to indicate
+// no icon available, or return < 0 to indicate an
+// error.
+//
+// *NOTE*
+//
+// * For all PROPSHEETUI_REASON_xxx, the function can set new
+// user defined DWORD data in the PROPSHEETUI_INFO data
+// structure's UserData field.
+//
+// * For all PROPSHEETUI_REASON_xxx, the function can set new
+// pfnPropSheetUI() DWORD result in PROPSHEETUI_INFO data
+// structure's Result field.
+//
+//
+// hComPropSheet - Handle to the COMPROPSHEETPAGE which this function should
+// used as hComPropSheet parameter when calling
+// pfnComPropSheet() to add or delete common UI property
+// sheet pages. The hComPropSheet is the instance handle to
+// pfnPropSheetUI() function.
+//
+// pfnComPropSheet - Pointer to the common UI callback function which for the
+// pfnPropSheetUI() to add, delete, set user data, for a
+// completed set of callback, see CPSFUNC_xxx descriptions
+// above.
+//
+// lParamInit - The lParam originally passed duning the the first call
+// reason PROPSHEETUI_REASON_INIT. The lParamInit will be
+// passed to each PROPSHEETUI_REASON_xxx calls.
+//
+// UserData - the UserData field is an IN and OUT parameter for each
+// of the Reason,
+//
+// PROPSHEETUI_REASON_INIT
+//
+// IN: Initial set to zero (0).
+//
+// OUT: Specified new callee's own user data which
+// will be passed back to other reason calls.
+//
+//
+// PROPSHEETUI_REASON_DESTROY
+// PROPSHEETUI_REASON_SET_RESULT
+// PROPSHEETUI_REASON_GET_INFO_HEADER
+//
+// IN: The UserData specified at time when returned
+// from the previous PROPSHEETUI_REASON_xxx
+//
+// OUT: Specified new callee's own user data which
+// will be passed back to other reason calls.
+//
+//
+// Result - The Result field is an IN and OUT parameter for each of
+// the reason.
+//
+// PROPSHEETUI_REASON_INIT
+//
+// IN: Set to zero (0).
+//
+// OUT: Set to default result of this PropSheetUI()
+// function.
+//
+//
+// PROPSHEETUI_REASON_DESTROY
+// PROPSHEETUI_REASON_GET_INFO_HEADER
+// PROPSHEETUI_REASON_SET_RESULT
+//
+// IN: The current 'Result' returned from previous
+// PROPSHEETUI_REASON_xxx function.
+//
+// OUT: Set the new result of this PropSheetUI()
+// function.
+//
+//
+
+
+#define PSUIHDRF_OBSOLETE 0x0001
+#define PSUIHDRF_NOAPPLYNOW 0x0002
+#define PSUIHDRF_PROPTITLE 0x0004
+#define PSUIHDRF_USEHICON 0x0008
+#define PSUIHDRF_DEFTITLE 0x0010
+
+
+typedef struct _PROPSHEETUI_INFO_HEADER {
+ WORD cbSize;
+ WORD Flags;
+ LPTSTR pTitle;
+ HWND hWndParent;
+ HINSTANCE hInst;
+ union {
+ HICON hIcon;
+ DWORD IconID;
+ } DUMMYUNIONNAME;
+ } PROPSHEETUI_INFO_HEADER, *PPROPSHEETUI_INFO_HEADER;
+
+//
+// PROPSHEETUI_INFO_HEADER
+//
+// This data structure is used when common UI ready to pop-up the property
+// sheet page dialog boxes and it asked caller to provide more information.
+//
+// Common property sheet UI passed this data structure as lParam when it call
+// provided pfnPropSheetUI() with PROPSHEETUI_REASON_GET_INFO_HEADER reason.
+//
+//
+// cbSize - size of this structure
+//
+// Flags - PSUIHDRF_xxxx flags
+//
+// PSUIHDRF_OBSOLETE
+//
+// Not used, must not set this bit
+//
+//
+// PSUIHDRF_NOAPPLYNOW
+//
+// Remove 'Apply Now' button.
+//
+//
+// PSUIHDRF_PROPTITLE
+//
+// Automatically include 'Properties' in the title bar
+//
+//
+// PSUIHDRF_USEHICON
+//
+// If this bit is specified then hIcon union field is
+// a valid handle to the icon otherwise the IconID is
+// the either caller's resource ID or common UI standard
+// icon ID.
+//
+// PSUIHDRF_DEFTITLE
+//
+// Automatically include 'Default' in the title bar, the
+// 'Default' always added right after pTitle and before
+// 'Properties' if PSUIHDRF_PROPTITLE flag is set.
+//
+// pTitle - Pointer to the NULL terminated caption name for the
+// property sheets.
+//
+// ** See LPTSTR typedef description above
+//
+// hWndParent - The handle of the window which will be parent of the common
+// UI property sheets, if NULL then current active window for
+// the calling thread is used.
+//
+// hInst - the caller's handle to its instance. Commom UI use this
+// handle to load caller's icon and other resources.
+//
+// hIcon
+// IconID - Specified the icon which put on the title bar, it either a
+// handle to the icon or a icon resource ID depends on the
+// PSUIHDRF_USEHICON flag.
+//
+
+
+
+//
+// LONG
+// CommonPropertySheetUI(
+// HWND hWndOwner,
+// PFNPROPSHEETUI pfnPropSheetUI,
+// LPARAM lParam,
+// LPDWORD pResult
+// );
+//
+//
+// The CommonPropSheetUI is the main entry point for the common property sheet
+// user interface. The original caller that wish to using common UI to pop-up
+// property sheet will call this function and passed its own PFNPROPSHEETUI
+// function address and a long parameter.
+//
+// If pfnPropSheetUI function return a LONG number greater than zero (0) then
+// common UI will pop-up the property sheet page dialog boxes, when Property
+// sheet pages is finished. (either hit Ok or Cancel) it will return the
+// result of CPSUI_xxxx back to the caller.
+//
+// If pfnPropSheetUI function return a LONG number equal or less than zero (0)
+// then it will return the CPSUI_CANCEL back to caller without pop-up the
+// property sheet page dialog boxes.
+//
+//
+// Parameters:
+//
+// hWndOwner - Window handle for the owner of this proerty sheet
+// pages dialog boxes.
+//
+// pfnPropSheetUI - a PFNPROPSHEETUI function pointer which is used by
+// the caller to add its property sheet pages.
+//
+// lParam - a long parameter will be passed to the pfnPropSheetUI
+// funciton. The common UI called the pfnPropSheetUI as
+//
+// PROPSHEETUI_INFO PSUIInfo;
+//
+// pfnPropSheetUI(&PSUIInfo, lParam);
+//
+// The caller must use pfnComPropSheet() to add/delete
+// pages. When it is done adding pages, it retuned
+// greater than zero to indicate successful, and return
+// less or equal to zero to indicate failure.
+//
+// pResult - a pointer to DWORD which received the final result
+// of pfnPropSheetUI() funciton, this result is a copy
+// from Result field of PROPSHEETUI_INFO data structure
+// which passed to the pfnPropSheetUI() as the first
+// parameter. The pResult only will be set if the
+// returned value from CommonPropertySheetUI() is not
+// ERR_CPSUI_xxx.
+//
+// if pResult is NULL then common UI will not return
+// pfnPropSheetUI()'s result back.
+//
+//
+// Return Value:
+//
+// LONG - < 0 - property page does not displayed and
+// ERR_CPSUI_xxx is the error code
+// CPSUI_OK - property page displayed.
+// CPSUI_RESTARTWINDOWS - property page displayed and need to
+// restart window to take effect
+// CPSUI_REBOOTSYSTEM - property page dispalyed and need
+// to reboot system to take effect
+//
+//
+
+
+LONG
+APIENTRY
+CommonPropertySheetUIA(
+ HWND hWndOwner,
+ PFNPROPSHEETUI pfnPropSheetUI,
+ LPARAM lParam,
+ LPDWORD pResult
+ );
+
+LONG
+APIENTRY
+CommonPropertySheetUIW(
+ HWND hWndOwner,
+ PFNPROPSHEETUI pfnPropSheetUI,
+ LPARAM lParam,
+ LPDWORD pResult
+ );
+
+
+#ifdef UNICODE
+#define CommonPropertySheetUI CommonPropertySheetUIW
+#else
+#define CommonPropertySheetUI CommonPropertySheetUIA
+#endif
+
+
+
+//
+// GetCPSUIUserData() and SetCPSUIUserData() is used for the pages added
+// by the CPSFUNC_ADD_PCOMPROPSHEETUI. The caller add this function and has
+// sub class dialog procedure should not set DWL_USERDATA but calling these
+// function instead, otherwise the system can failed.
+//
+
+DWORD
+APIENTRY
+GetCPSUIUserData(
+ HWND hDlg
+ );
+
+BOOL
+APIENTRY
+SetCPSUIUserData(
+ HWND hDlg,
+ DWORD CPSUIUserData
+ );
+
+
+#define CPSUI_CANCEL 0
+#define CPSUI_OK 1
+#define CPSUI_RESTARTWINDOWS 2
+#define CPSUI_REBOOTSYSTEM 3
+
+#define ERR_CPSUI_GETLASTERROR -1
+#define ERR_CPSUI_ALLOCMEM_FAILED -2
+#define ERR_CPSUI_INVALID_PDATA -3
+#define ERR_CPSUI_INVALID_LPARAM -4
+#define ERR_CPSUI_NULL_HINST -5
+#define ERR_CPSUI_NULL_CALLERNAME -6
+#define ERR_CPSUI_NULL_OPTITEMNAME -7
+#define ERR_CPSUI_NO_PROPSHEETPAGE -8
+#define ERR_CPSUI_TOO_MANY_PROPSHEETPAGES -9
+#define ERR_CPSUI_CREATEPROPPAGE_FAILED -10
+#define ERR_CPSUI_MORE_THAN_ONE_TVPAGE -11
+#define ERR_CPSUI_MORE_THAN_ONE_STDPAGE -12
+#define ERR_CPSUI_INVALID_PDLGPAGE -13
+#define ERR_CPSUI_INVALID_DLGPAGE_CBSIZE -14
+#define ERR_CPSUI_TOO_MANY_DLGPAGES -15
+#define ERR_CPSUI_INVALID_DLGPAGEIDX -16
+#define ERR_CPSUI_SUBITEM_DIFF_DLGPAGEIDX -17
+#define ERR_CPSUI_NULL_POPTITEM -18
+#define ERR_CPSUI_INVALID_OPTITEM_CBSIZE -19
+#define ERR_CPSUI_INVALID_OPTTYPE_CBSIZE -20
+#define ERR_CPSUI_INVALID_OPTTYPE_COUNT -21
+#define ERR_CPSUI_NULL_POPTPARAM -22
+#define ERR_CPSUI_INVALID_OPTPARAM_CBSIZE -23
+#define ERR_CPSUI_INVALID_EDITBOX_PSEL -24
+#define ERR_CPSUI_INVALID_EDITBOX_BUF_SIZE -25
+#define ERR_CPSUI_INVALID_ECB_CBSIZE -26
+#define ERR_CPSUI_NULL_ECB_PTITLE -27
+#define ERR_CPSUI_NULL_ECB_PCHECKEDNAME -28
+#define ERR_CPSUI_INVALID_DMPUBID -29
+#define ERR_CPSUI_INVALID_DMPUB_TVOT -30
+#define ERR_CPSUI_CREATE_TRACKBAR_FAILED -31
+#define ERR_CPSUI_CREATE_UDARROW_FAILED -32
+#define ERR_CPSUI_CREATE_IMAGELIST_FAILED -33
+#define ERR_CPSUI_INVALID_TVOT_TYPE -34
+#define ERR_CPSUI_INVALID_LBCB_TYPE -35
+#define ERR_CPSUI_SUBITEM_DIFF_OPTIF_HIDE -36
+#define ERR_CPSUI_INVALID_PUSHBUTTON_TYPE -38
+#define ERR_CPSUI_INVALID_EXTPUSH_CBSIZE -39
+#define ERR_CPSUI_NULL_EXTPUSH_DLGPROC -40
+#define ERR_CPSUI_NO_EXTPUSH_DLGTEMPLATEID -41
+#define ERR_CPSUI_NULL_EXTPUSH_CALLBACK -42
+#define ERR_CPSUI_DMCOPIES_USE_EXTPUSH -43
+#define ERR_CPSUI_ZERO_OPTITEM -44
+
+
+#define ERR_CPSUI_FUNCTION_NOT_IMPLEMENTED -9999
+#define ERR_CPSUI_INTERNAL_ERROR -10000
+
+#endif // (!defined(RC_INVOKED))
+
+
+
+//
+//****************************************************************************
+//* *
+//* Common Property Sheet UI resource ID for the ICONs and STRINGs *
+//* *
+//* The Resource ID from 64000 to 65535 are reserved for common UI and must *
+//* not used as caller resource ID else the string, icon loading will not be *
+//* correct. *
+//* *
+//****************************************************************************
+//
+
+
+//
+// Common UI standard 32x32, 16x16 color and monochrome Icon IDs
+//
+
+#define IDI_CPSUI_ICONID_FIRST 64000
+
+#define IDI_CPSUI_EMPTY 64000
+#define IDI_CPSUI_SEL_NONE 64001
+#define IDI_CPSUI_WARNING 64002
+#define IDI_CPSUI_NO 64003
+#define IDI_CPSUI_YES 64004
+#define IDI_CPSUI_FALSE 64005
+#define IDI_CPSUI_TRUE 64006
+#define IDI_CPSUI_OFF 64007
+#define IDI_CPSUI_ON 64008
+#define IDI_CPSUI_PAPER_OUTPUT 64009
+#define IDI_CPSUI_ENVELOPE 64010
+#define IDI_CPSUI_MEM 64011
+#define IDI_CPSUI_FONTCARTHDR 64012
+#define IDI_CPSUI_FONTCART 64013
+#define IDI_CPSUI_STAPLER_ON 64014
+#define IDI_CPSUI_STAPLER_OFF 64015
+#define IDI_CPSUI_HT_HOST 64016
+#define IDI_CPSUI_HT_DEVICE 64017
+#define IDI_CPSUI_TT_PRINTASGRAPHIC 64018
+#define IDI_CPSUI_TT_DOWNLOADSOFT 64019
+#define IDI_CPSUI_TT_DOWNLOADVECT 64020
+#define IDI_CPSUI_TT_SUBDEV 64021
+#define IDI_CPSUI_PORTRAIT 64022
+#define IDI_CPSUI_LANDSCAPE 64023
+#define IDI_CPSUI_ROT_LAND 64024
+#define IDI_CPSUI_AUTOSEL 64025
+#define IDI_CPSUI_PAPER_TRAY 64026
+#define IDI_CPSUI_PAPER_TRAY2 64027
+#define IDI_CPSUI_PAPER_TRAY3 64028
+#define IDI_CPSUI_TRANSPARENT 64029
+#define IDI_CPSUI_COLLATE 64030
+#define IDI_CPSUI_DUPLEX_NONE 64031
+#define IDI_CPSUI_DUPLEX_HORZ 64032
+#define IDI_CPSUI_DUPLEX_VERT 64033
+#define IDI_CPSUI_RES_DRAFT 64034
+#define IDI_CPSUI_RES_LOW 64035
+#define IDI_CPSUI_RES_MEDIUM 64036
+#define IDI_CPSUI_RES_HIGH 64037
+#define IDI_CPSUI_RES_PRESENTATION 64038
+#define IDI_CPSUI_MONO 64039
+#define IDI_CPSUI_COLOR 64040
+#define IDI_CPSUI_DITHER_NONE 64041
+#define IDI_CPSUI_DITHER_COARSE 64042
+#define IDI_CPSUI_DITHER_FINE 64043
+#define IDI_CPSUI_DITHER_LINEART 64044
+#define IDI_CPSUI_SCALING 64045
+#define IDI_CPSUI_COPY 64046
+#define IDI_CPSUI_HTCLRADJ 64047
+#define IDI_CPSUI_HALFTONE_SETUP 64048
+#define IDI_CPSUI_WATERMARK 64049
+#define IDI_CPSUI_ERROR 64050
+#define IDI_CPSUI_ICM_OPTION 64051
+#define IDI_CPSUI_ICM_METHOD 64052
+#define IDI_CPSUI_ICM_INTENT 64053
+#define IDI_CPSUI_STD_FORM 64054
+#define IDI_CPSUI_OUTBIN 64055
+#define IDI_CPSUI_OUTPUT 64056
+#define IDI_CPSUI_GRAPHIC 64057
+#define IDI_CPSUI_ADVANCE 64058
+#define IDI_CPSUI_DOCUMENT 64059
+#define IDI_CPSUI_DEVICE 64060
+#define IDI_CPSUI_DEVICE2 64061
+#define IDI_CPSUI_PRINTER 64062
+#define IDI_CPSUI_PRINTER2 64063
+#define IDI_CPSUI_PRINTER3 64064
+#define IDI_CPSUI_PRINTER4 64065
+#define IDI_CPSUI_OPTION 64066
+#define IDI_CPSUI_OPTION2 64067
+#define IDI_CPSUI_STOP 64068
+#define IDI_CPSUI_NOTINSTALLED 64069
+#define IDI_CPSUI_WARNING_OVERLAY 64070
+#define IDI_CPSUI_STOP_WARNING_OVERLAY 64071
+#define IDI_CPSUI_GENERIC_OPTION 64072
+#define IDI_CPSUI_GENERIC_ITEM 64073
+#define IDI_CPSUI_RUN_DIALOG 64074
+#define IDI_CPSUI_QUESTION 64075
+#define IDI_CPSUI_FORMTRAYASSIGN 64076
+#define IDI_CPSUI_PRINTER_FOLDER 64077
+#define IDI_CPSUI_INSTALLABLE_OPTION 64078
+#define IDI_CPSUI_PRINTER_FEATURE 64079
+#define IDI_CPSUI_DEVICE_FEATURE 64080
+#define IDI_CPSUI_FONTSUB 64081
+#define IDI_CPSUI_POSTSCRIPT 64082
+#define IDI_CPSUI_TELEPHONE 64083
+#define IDI_CPSUI_DUPLEX_NONE_L 64084
+#define IDI_CPSUI_DUPLEX_HORZ_L 64085
+#define IDI_CPSUI_DUPLEX_VERT_L 64086
+#define IDI_CPSUI_LF_PEN_PLOTTER 64087
+#define IDI_CPSUI_SF_PEN_PLOTTER 64088
+#define IDI_CPSUI_LF_RASTER_PLOTTER 64089
+#define IDI_CPSUI_SF_RASTER_PLOTTER 64090
+#define IDI_CPSUI_ROLL_PAPER 64091
+#define IDI_CPSUI_PEN_CARROUSEL 64092
+#define IDI_CPSUI_PLOTTER_PEN 64093
+#define IDI_CPSUI_MANUAL_FEED 64094
+#define IDI_CPSUI_FAX 64095
+#define IDI_CPSUI_PAGE_PROTECT 64096
+#define IDI_CPSUI_ENVELOPE_FEED 64097
+#define IDI_CPSUI_FONTCART_SLOT 64098
+
+
+#define IDI_CPSUI_ICONID_LAST 64098
+
+//
+// Common UI standard String IDs
+//
+
+
+#define IDS_CPSUI_STRID_FIRST 64700
+
+#define IDS_CPSUI_SETUP 64700
+#define IDS_CPSUI_MORE 64701
+#define IDS_CPSUI_CHANGE 64702
+#define IDS_CPSUI_OPTION 64703
+#define IDS_CPSUI_OF 64704
+#define IDS_CPSUI_RANGE_FROM 64705
+#define IDS_CPSUI_TO 64706
+#define IDS_CPSUI_COLON_SEP 64707
+#define IDS_CPSUI_LEFT_ANGLE 64708
+#define IDS_CPSUI_RIGHT_ANGLE 64709
+#define IDS_CPSUI_SLASH_SEP 64710
+#define IDS_CPSUI_PERCENT 64711
+#define IDS_CPSUI_LBCB_NOSEL 64712
+#define IDS_CPSUI_PROPERTIES 64713
+#define IDS_CPSUI_DEFAULTDOCUMENT 64714
+#define IDS_CPSUI_DOCUMENT 64715
+#define IDS_CPSUI_ADVANCEDOCUMENT 64716
+#define IDS_CPSUI_PRINTER 64717
+#define IDS_CPSUI_AUTOSELECT 64718
+#define IDS_CPSUI_PAPER_OUTPUT 64719
+#define IDS_CPSUI_GRAPHIC 64720
+#define IDS_CPSUI_OPTIONS 64721
+#define IDS_CPSUI_ADVANCED 64722
+#define IDS_CPSUI_STDDOCPROPTAB 64723
+#define IDS_CPSUI_STDDOCPROPTVTAB 64724
+#define IDS_CPSUI_DEVICEOPTIONS 64725
+#define IDS_CPSUI_FALSE 64726
+#define IDS_CPSUI_TRUE 64727
+#define IDS_CPSUI_NO 64728
+#define IDS_CPSUI_YES 64729
+#define IDS_CPSUI_OFF 64730
+#define IDS_CPSUI_ON 64731
+#define IDS_CPSUI_DEFAULT 64732
+#define IDS_CPSUI_ERROR 64733
+#define IDS_CPSUI_NONE 64734
+#define IDS_CPSUI_NOT 64735
+#define IDS_CPSUI_EXIST 64736
+#define IDS_CPSUI_NOTINSTALLED 64737
+#define IDS_CPSUI_ORIENTATION 64738
+#define IDS_CPSUI_SCALING 64739
+#define IDS_CPSUI_NUM_OF_COPIES 64740
+#define IDS_CPSUI_SOURCE 64741
+#define IDS_CPSUI_PRINTQUALITY 64742
+#define IDS_CPSUI_RESOLUTION 64743
+#define IDS_CPSUI_COLOR_APPERANCE 64744
+#define IDS_CPSUI_DUPLEX 64745
+#define IDS_CPSUI_TTOPTION 64746
+#define IDS_CPSUI_FORMNAME 64747
+#define IDS_CPSUI_ICM 64748
+#define IDS_CPSUI_ICMMETHOD 64749
+#define IDS_CPSUI_ICMINTENT 64750
+#define IDS_CPSUI_MEDIA 64751
+#define IDS_CPSUI_DITHERING 64752
+#define IDS_CPSUI_PORTRAIT 64753
+#define IDS_CPSUI_LANDSCAPE 64754
+#define IDS_CPSUI_ROT_LAND 64755
+#define IDS_CPSUI_COLLATE 64756
+#define IDS_CPSUI_COLLATED 64757
+#define IDS_CPSUI_PRINTFLDSETTING 64758
+#define IDS_CPSUI_DRAFT 64759
+#define IDS_CPSUI_LOW 64760
+#define IDS_CPSUI_MEDIUM 64761
+#define IDS_CPSUI_HIGH 64762
+#define IDS_CPSUI_PRESENTATION 64763
+#define IDS_CPSUI_COLOR 64764
+#define IDS_CPSUI_GRAYSCALE 64765
+#define IDS_CPSUI_MONOCHROME 64766
+#define IDS_CPSUI_SIMPLEX 64767
+#define IDS_CPSUI_HORIZONTAL 64768
+#define IDS_CPSUI_VERTICAL 64769
+#define IDS_CPSUI_LONG_SIDE 64770
+#define IDS_CPSUI_SHORT_SIDE 64771
+#define IDS_CPSUI_TT_PRINTASGRAPHIC 64772
+#define IDS_CPSUI_TT_DOWNLOADSOFT 64773
+#define IDS_CPSUI_TT_DOWNLOADVECT 64774
+#define IDS_CPSUI_TT_SUBDEV 64775
+#define IDS_CPSUI_ICM_BLACKWHITE 64776
+#define IDS_CPSUI_ICM_NO 64777
+#define IDS_CPSUI_ICM_YES 64778
+#define IDS_CPSUI_ICM_SATURATION 64779
+#define IDS_CPSUI_ICM_CONTRAST 64780
+#define IDS_CPSUI_ICM_COLORMETRIC 64781
+#define IDS_CPSUI_STANDARD 64782
+#define IDS_CPSUI_GLOSSY 64783
+#define IDS_CPSUI_TRANSPARENCY 64784
+#define IDS_CPSUI_REGULAR 64785
+#define IDS_CPSUI_BOND 64786
+#define IDS_CPSUI_COARSE 64787
+#define IDS_CPSUI_FINE 64788
+#define IDS_CPSUI_LINEART 64789
+#define IDS_CPSUI_ERRDIFFUSE 64790
+#define IDS_CPSUI_HALFTONE 64791
+#define IDS_CPSUI_HTCLRADJ 64792
+#define IDS_CPSUI_USE_HOST_HT 64793
+#define IDS_CPSUI_USE_DEVICE_HT 64794
+#define IDS_CPSUI_USE_PRINTER_HT 64795
+#define IDS_CPSUI_OUTBINASSIGN 64796
+#define IDS_CPSUI_WATERMARK 64797
+#define IDS_CPSUI_FORMTRAYASSIGN 64798
+#define IDS_CPSUI_UPPER_TRAY 64799
+#define IDS_CPSUI_ONLYONE 64800
+#define IDS_CPSUI_LOWER_TRAY 64801
+#define IDS_CPSUI_MIDDLE_TRAY 64802
+#define IDS_CPSUI_MANUAL_TRAY 64803
+#define IDS_CPSUI_ENVELOPE_TRAY 64804
+#define IDS_CPSUI_ENVMANUAL_TRAY 64805
+#define IDS_CPSUI_TRACTOR_TRAY 64806
+#define IDS_CPSUI_SMALLFMT_TRAY 64807
+#define IDS_CPSUI_LARGEFMT_TRAY 64808
+#define IDS_CPSUI_LARGECAP_TRAY 64809
+#define IDS_CPSUI_CASSETTE_TRAY 64810
+#define IDS_CPSUI_DEFAULT_TRAY 64811
+#define IDS_CPSUI_FORMSOURCE 64812
+#define IDS_CPSUI_MANUALFEED 64813
+#define IDS_CPSUI_PRINTERMEM_KB 64814
+#define IDS_CPSUI_PRINTERMEM_MB 64815
+#define IDS_CPSUI_PAGEPROTECT 64816
+#define IDS_CPSUI_HALFTONE_SETUP 64817
+#define IDS_CPSUI_INSTFONTCART 64818
+#define IDS_CPSUI_SLOT1 64819
+#define IDS_CPSUI_SLOT2 64820
+#define IDS_CPSUI_SLOT3 64821
+#define IDS_CPSUI_SLOT4 64822
+#define IDS_CPSUI_LEFT_SLOT 64823
+#define IDS_CPSUI_RIGHT_SLOT 64824
+#define IDS_CPSUI_STAPLER 64825
+#define IDS_CPSUI_STAPLER_ON 64826
+#define IDS_CPSUI_STAPLER_OFF 64827
+#define IDS_CPSUI_STACKER 64828
+#define IDS_CPSUI_MAILBOX 64829
+#define IDS_CPSUI_COPY 64830
+#define IDS_CPSUI_COPIES 64831
+#define IDS_CPSUI_TOTAL 64832
+#define IDS_CPSUI_MAKE 64833
+#define IDS_CPSUI_PRINT 64834
+#define IDS_CPSUI_FAX 64835
+#define IDS_CPSUI_PLOT 64836
+#define IDS_CPSUI_SLOW 64837
+#define IDS_CPSUI_FAST 64838
+#define IDS_CPSUI_ROTATED 64839
+#define IDS_CPSUI_RESET 64840
+#define IDS_CPSUI_ALL 64841
+#define IDS_CPSUI_DEVICE 64842
+#define IDS_CPSUI_SETTINGS 64843
+#define IDS_CPSUI_REVERT 64844
+#define IDS_CPSUI_CHANGES 64845
+#define IDS_CPSUI_CHANGED 64846
+#define IDS_CPSUI_WARNING 64847
+#define IDS_CPSUI_ABOUT 64848
+#define IDS_CPSUI_VERSION 64849
+#define IDS_CPSUI_NO_NAME 64850
+#define IDS_CPSUI_SETTING 64851
+#define IDS_CPSUI_DEVICE_SETTINGS 64852
+
+#define IDS_CPSUI_STRID_LAST 64852
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // _COMPSTUI