Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
08afc1a5
Commit
08afc1a5
authored
Nov 28, 1999
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Serge Ivanov
Pierre Mageau Thy Nguyen Don Kelly Noomen Hamza Lots of bug fixes and new features in property sheets.
parent
c69a80c3
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
674 additions
and
272 deletions
+674
-272
comctl32.h
dlls/comctl32/comctl32.h
+1
-0
propsheet.c
dlls/comctl32/propsheet.c
+389
-189
rsrc.rc
dlls/comctl32/rsrc.rc
+264
-83
prsht.h
include/prsht.h
+20
-0
No files found.
dlls/comctl32/comctl32.h
View file @
08afc1a5
...
...
@@ -20,6 +20,7 @@ extern HMODULE COMCTL32_hModule;
#define IDC_FINISH_BUTTON 12325
#define IDC_SUNKEN_LINE 12326
#define IDS_CLOSE 4160
/* Toolbar customization dialog */
#define IDD_TBCUSTOMIZE 200
...
...
dlls/comctl32/propsheet.c
View file @
08afc1a5
...
...
@@ -13,6 +13,8 @@
#include "winbase.h"
#include "commctrl.h"
#include "prsht.h"
#include "dialog.h"
#include "win.h"
#include "winnls.h"
#include "comctl32.h"
#include "debugtools.h"
...
...
@@ -33,13 +35,13 @@ typedef struct
typedef
struct
tagPropPageInfo
{
int
index
;
/* corresponds to the index in ppshheader->ppsp */
HPROPSHEETPAGE
hpage
;
/* to keep track of pages not passed to PropertySheet */
HWND
hwndPage
;
BOOL
isDirty
;
LPCWSTR
pszText
;
BOOL
hasHelp
;
BOOL
useCallback
;
BOOL
hasIcon
;
}
PropPageInfo
;
typedef
struct
tagPropSheetInfo
...
...
@@ -47,13 +49,14 @@ typedef struct tagPropSheetInfo
LPSTR
strPropertiesFor
;
int
nPages
;
int
active_page
;
LP
C
PROPSHEETHEADERA
ppshheader
;
LPPROPSHEETHEADERA
ppshheader
;
BOOL
isModeless
;
BOOL
hasHelp
;
BOOL
hasApply
;
BOOL
useCallback
;
BOOL
restartWindows
;
BOOL
rebootSystem
;
BOOL
activeValid
;
PropPageInfo
*
proppage
;
int
x
;
int
y
;
...
...
@@ -76,6 +79,7 @@ const char * PropSheetInfoStr = "PropertySheetInfo";
#define MAX_CAPTION_LENGTH 255
#define MAX_TABTEXT_LENGTH 255
#define MAX_BUTTONTEXT_LENGTH 64
/******************************************************************************
* Prototypes
...
...
@@ -93,15 +97,14 @@ static BOOL PROPSHEET_CreateTabControl(HWND hwndParent,
PropSheetInfo
*
psInfo
);
static
int
PROPSHEET_CreatePage
(
HWND
hwndParent
,
int
index
,
const
PropSheetInfo
*
psInfo
,
LPCPROPSHEETPAGEA
ppshpage
,
BOOL
showPage
);
LPCPROPSHEETPAGEA
ppshpage
);
static
BOOL
PROPSHEET_ShowPage
(
HWND
hwndDlg
,
int
index
,
PropSheetInfo
*
psInfo
);
static
PADDING_INFO
PROPSHEET_GetPaddingInfo
(
HWND
hwndDlg
);
static
BOOL
PROPSHEET_Back
(
HWND
hwndDlg
);
static
BOOL
PROPSHEET_Next
(
HWND
hwndDlg
);
static
BOOL
PROPSHEET_Finish
(
HWND
hwndDlg
);
static
BOOL
PROPSHEET_Apply
(
HWND
hwndDlg
);
static
void
PROPSHEET_Cancel
(
HWND
hwndDlg
);
static
BOOL
PROPSHEET_Apply
(
HWND
hwndDlg
,
LPARAM
lParam
);
static
void
PROPSHEET_Cancel
(
HWND
hwndDlg
,
LPARAM
lParam
);
static
void
PROPSHEET_Help
(
HWND
hwndDlg
);
static
void
PROPSHEET_Changed
(
HWND
hwndDlg
,
HWND
hwndDirtyPage
);
static
void
PROPSHEET_UnChanged
(
HWND
hwndDlg
,
HWND
hwndCleanPage
);
...
...
@@ -114,8 +117,6 @@ static BOOL PROPSHEET_SetCurSel(HWND hwndDlg,
HPROPSHEETPAGE
hpage
);
static
LRESULT
PROPSHEET_QuerySiblings
(
HWND
hwndDlg
,
WPARAM
wParam
,
LPARAM
lParam
);
static
LPCPROPSHEETPAGEA
PROPSHEET_GetPSPPage
(
const
PropSheetInfo
*
psInfo
,
int
index
);
static
BOOL
PROPSHEET_AddPage
(
HWND
hwndDlg
,
HPROPSHEETPAGE
hpage
);
...
...
@@ -126,6 +127,8 @@ static void PROPSHEET_CleanUp();
static
int
PROPSHEET_GetPageIndex
(
HPROPSHEETPAGE
hpage
,
PropSheetInfo
*
psInfo
);
static
void
PROPSHEET_SetWizButtons
(
HWND
hwndDlg
,
DWORD
dwFlags
);
static
PADDING_INFO
PROPSHEET_GetPaddingInfoWizard
(
HWND
hwndDlg
);
static
BOOL
PROPSHEET_IsDialogMessage
(
HWND
hwnd
,
LPMSG
lpMsg
);
static
INT
PROPSHEET_DoDialogBox
(
HWND
hwnd
,
HWND
owner
);
BOOL
WINAPI
PROPSHEET_DialogProc
(
HWND
hwnd
,
UINT
uMsg
,
WPARAM
wParam
,
LPARAM
lParam
);
...
...
@@ -146,7 +149,14 @@ static BOOL PROPSHEET_CollectSheetInfo(LPCPROPSHEETHEADERA lppsh,
psInfo
->
hasApply
=
!
(
dwFlags
&
PSH_NOAPPLYNOW
);
psInfo
->
useCallback
=
dwFlags
&
PSH_USECALLBACK
;
psInfo
->
isModeless
=
dwFlags
&
PSH_MODELESS
;
psInfo
->
ppshheader
=
lppsh
;
psInfo
->
ppshheader
=
COMCTL32_Alloc
(
sizeof
(
PROPSHEETHEADERA
));
*
psInfo
->
ppshheader
=
*
lppsh
;
if
(
HIWORD
(
lppsh
->
pszCaption
))
psInfo
->
ppshheader
->
pszCaption
=
HEAP_strdupA
(
GetProcessHeap
(),
0
,
lppsh
->
pszCaption
);
psInfo
->
nPages
=
lppsh
->
nPages
;
if
(
dwFlags
&
PSH_USEPSTARTPAGE
)
...
...
@@ -157,9 +167,13 @@ static BOOL PROPSHEET_CollectSheetInfo(LPCPROPSHEETHEADERA lppsh,
else
psInfo
->
active_page
=
lppsh
->
u2
.
nStartPage
;
if
(
psInfo
->
active_page
<
0
||
psInfo
->
active_page
>=
psInfo
->
nPages
)
psInfo
->
active_page
=
0
;
psInfo
->
restartWindows
=
FALSE
;
psInfo
->
rebootSystem
=
FALSE
;
psInfo
->
hImageList
=
0
;
psInfo
->
activeValid
=
FALSE
;
return
TRUE
;
}
...
...
@@ -179,8 +193,7 @@ BOOL PROPSHEET_CollectPageInfo(LPCPROPSHEETPAGEA lppsp,
DWORD
dwFlags
;
int
width
,
height
;
if
(
psInfo
->
ppshheader
->
dwFlags
&
PSH_PROPSHEETPAGE
)
psInfo
->
proppage
[
index
].
hpage
=
0
;
psInfo
->
proppage
[
index
].
hpage
=
(
HPROPSHEETPAGE
)
lppsp
;
psInfo
->
proppage
[
index
].
hwndPage
=
0
;
psInfo
->
proppage
[
index
].
isDirty
=
FALSE
;
...
...
@@ -190,6 +203,7 @@ BOOL PROPSHEET_CollectPageInfo(LPCPROPSHEETPAGEA lppsp,
dwFlags
=
lppsp
->
dwFlags
;
psInfo
->
proppage
[
index
].
useCallback
=
dwFlags
&
PSP_USECALLBACK
;
psInfo
->
proppage
[
index
].
hasHelp
=
dwFlags
&
PSP_HASHELP
;
psInfo
->
proppage
[
index
].
hasIcon
=
dwFlags
&
(
PSP_USEHICON
|
PSP_USEICONID
);
/* as soon as we have a page with the help flag, set the sheet flag on */
if
(
psInfo
->
proppage
[
index
].
hasHelp
)
...
...
@@ -312,16 +326,59 @@ BOOL PROPSHEET_CollectPageInfo(LPCPROPSHEETPAGEA lppsp,
else
hIcon
=
lppsp
->
u2
.
hIcon
;
if
(
psInfo
->
hImageList
==
0
)
if
(
hIcon
)
{
if
(
psInfo
->
hImageList
==
0
)
psInfo
->
hImageList
=
ImageList_Create
(
icon_cx
,
icon_cy
,
ILC_COLOR
,
1
,
1
);
ImageList_AddIcon
(
psInfo
->
hImageList
,
hIcon
);
}
}
return
TRUE
;
}
/******************************************************************************
* PROPSHEET_DoDialogBox
*
* Copied from windows/dialog.c:DIALOG_DoDialogBox
*/
static
INT
PROPSHEET_DoDialogBox
(
HWND
hwnd
,
HWND
owner
)
{
WND
*
wndPtr
;
DIALOGINFO
*
dlgInfo
;
MSG
msg
;
INT
retval
;
/* Owner must be a top-level window */
owner
=
WIN_GetTopParent
(
owner
);
if
(
!
(
wndPtr
=
WIN_FindWndPtr
(
hwnd
)))
return
-
1
;
dlgInfo
=
(
DIALOGINFO
*
)
wndPtr
->
wExtra
;
if
(
!
dlgInfo
->
flags
&
DF_END
)
/* was EndDialog called in WM_INITDIALOG ? */
{
EnableWindow
(
owner
,
FALSE
);
ShowWindow
(
hwnd
,
SW_SHOW
);
while
(
GetMessageA
(
&
msg
,
0
,
0
,
0
))
{
if
(
!
PROPSHEET_IsDialogMessage
(
hwnd
,
&
msg
))
{
TranslateMessage
(
&
msg
);
DispatchMessageA
(
&
msg
);
}
if
(
dlgInfo
->
flags
&
DF_END
)
break
;
}
EnableWindow
(
owner
,
TRUE
);
}
retval
=
dlgInfo
->
idResult
;
WIN_ReleaseWndPtr
(
wndPtr
);
DestroyWindow
(
hwnd
);
return
retval
;
}
/******************************************************************************
* PROPSHEET_CreateDialog
*
* Creates the actual property sheet.
...
...
@@ -361,18 +418,14 @@ BOOL PROPSHEET_CreateDialog(PropSheetInfo* psInfo)
if
(
psInfo
->
useCallback
)
(
*
(
psInfo
->
ppshheader
->
pfnCallback
))(
0
,
PSCB_PRECREATE
,
(
LPARAM
)
temp
);
if
(
psInfo
->
ppshheader
->
dwFlags
&
PSH_MODELESS
)
ret
=
CreateDialogIndirectParamA
(
psInfo
->
ppshheader
->
hInstance
,
(
LPDLGTEMPLATEA
)
temp
,
psInfo
->
ppshheader
->
hwndParent
,
(
DLGPROC
)
PROPSHEET_DialogProc
,
(
LPARAM
)
psInfo
);
else
ret
=
DialogBoxIndirectParamA
(
psInfo
->
ppshheader
->
hInstance
,
(
LPDLGTEMPLATEA
)
temp
,
psInfo
->
ppshheader
->
hwndParent
,
(
DLGPROC
)
PROPSHEET_DialogProc
,
(
LPARAM
)
psInfo
);
if
(
!
(
psInfo
->
ppshheader
->
dwFlags
&
PSH_MODELESS
))
ret
=
PROPSHEET_DoDialogBox
((
HWND
)
ret
,
psInfo
->
ppshheader
->
hwndParent
);
COMCTL32_Free
(
temp
);
...
...
@@ -846,6 +899,7 @@ static BOOL PROPSHEET_CreateTabControl(HWND hwndParent,
HWND
hwndTabCtrl
=
GetDlgItem
(
hwndParent
,
IDC_TABCONTROL
);
TCITEMA
item
;
int
i
,
nTabs
;
int
iImage
=
0
;
char
tabtext
[
MAX_TABTEXT_LENGTH
]
=
"Tab text"
;
item
.
mask
=
TCIF_TEXT
;
...
...
@@ -859,13 +913,20 @@ static BOOL PROPSHEET_CreateTabControl(HWND hwndParent,
*/
if
(
psInfo
->
hImageList
)
{
item
.
mask
|=
TCIF_IMAGE
;
SendMessageA
(
hwndTabCtrl
,
TCM_SETIMAGELIST
,
0
,
(
LPARAM
)
psInfo
->
hImageList
);
}
for
(
i
=
0
;
i
<
nTabs
;
i
++
)
{
item
.
iImage
=
i
;
if
(
psInfo
->
proppage
[
i
].
hasIcon
)
{
item
.
mask
|=
TCIF_IMAGE
;
item
.
iImage
=
iImage
++
;
}
else
{
item
.
mask
&=
~
TCIF_IMAGE
;
}
WideCharToMultiByte
(
CP_ACP
,
0
,
(
LPCWSTR
)
psInfo
->
proppage
[
i
].
pszText
,
...
...
@@ -885,8 +946,7 @@ static BOOL PROPSHEET_CreateTabControl(HWND hwndParent,
static
int
PROPSHEET_CreatePage
(
HWND
hwndParent
,
int
index
,
const
PropSheetInfo
*
psInfo
,
LPCPROPSHEETPAGEA
ppshpage
,
BOOL
showPage
)
LPCPROPSHEETPAGEA
ppshpage
)
{
DLGTEMPLATE
*
pTemplate
;
HWND
hwndPage
;
...
...
@@ -909,21 +969,23 @@ static int PROPSHEET_CreatePage(HWND hwndParent,
if
(((
MyDLGTEMPLATEEX
*
)
pTemplate
)
->
signature
==
0xFFFF
)
{
((
MyDLGTEMPLATEEX
*
)
pTemplate
)
->
style
|=
WS_CHILD
;
((
MyDLGTEMPLATEEX
*
)
pTemplate
)
->
style
|=
WS_CHILD
|
DS_CONTROL
;
((
MyDLGTEMPLATEEX
*
)
pTemplate
)
->
style
&=
~
DS_MODALFRAME
;
((
MyDLGTEMPLATEEX
*
)
pTemplate
)
->
style
&=
~
WS_CAPTION
;
((
MyDLGTEMPLATEEX
*
)
pTemplate
)
->
style
&=
~
WS_SYSMENU
;
((
MyDLGTEMPLATEEX
*
)
pTemplate
)
->
style
&=
~
WS_POPUP
;
((
MyDLGTEMPLATEEX
*
)
pTemplate
)
->
style
&=
~
WS_DISABLED
;
((
MyDLGTEMPLATEEX
*
)
pTemplate
)
->
style
&=
~
WS_VISIBLE
;
}
else
{
pTemplate
->
style
|=
WS_CHILD
;
pTemplate
->
style
|=
WS_CHILD
|
DS_CONTROL
;
pTemplate
->
style
&=
~
DS_MODALFRAME
;
pTemplate
->
style
&=
~
WS_CAPTION
;
pTemplate
->
style
&=
~
WS_SYSMENU
;
pTemplate
->
style
&=
~
WS_POPUP
;
pTemplate
->
style
&=
~
WS_DISABLED
;
pTemplate
->
style
&=
~
WS_VISIBLE
;
}
if
(
psInfo
->
proppage
[
index
].
useCallback
)
...
...
@@ -964,23 +1026,6 @@ static int PROPSHEET_CreatePage(HWND hwndParent,
rc
.
top
+
padding
.
y
,
0
,
0
,
SWP_NOSIZE
);
if
(
showPage
)
{
NMHDR
hdr
;
hdr
.
hwndFrom
=
hwndParent
;
hdr
.
code
=
PSN_SETACTIVE
;
/*
* Send the notification before showing the page.
*/
SendMessageA
(
hwndPage
,
WM_NOTIFY
,
0
,
(
LPARAM
)
&
hdr
);
ShowWindow
(
hwndPage
,
SW_SHOW
);
}
else
ShowWindow
(
hwndPage
,
SW_HIDE
);
return
TRUE
;
}
...
...
@@ -992,19 +1037,50 @@ static int PROPSHEET_CreatePage(HWND hwndParent,
static
BOOL
PROPSHEET_ShowPage
(
HWND
hwndDlg
,
int
index
,
PropSheetInfo
*
psInfo
)
{
if
(
index
==
psInfo
->
active_page
)
{
if
(
GetTopWindow
(
hwndDlg
)
!=
psInfo
->
proppage
[
index
].
hwndPage
)
SetWindowPos
(
psInfo
->
proppage
[
index
].
hwndPage
,
HWND_TOP
,
0
,
0
,
0
,
0
,
SWP_NOSIZE
|
SWP_NOMOVE
);
return
TRUE
;
}
if
(
psInfo
->
active_page
!=
-
1
)
ShowWindow
(
psInfo
->
proppage
[
psInfo
->
active_page
].
hwndPage
,
SW_HIDE
);
if
(
psInfo
->
proppage
[
index
].
hwndPage
!=
0
)
if
(
psInfo
->
proppage
[
index
].
hwndPage
==
0
)
{
LPCPROPSHEETPAGEA
ppshpage
;
PSHNOTIFY
psn
;
ppshpage
=
(
LPCPROPSHEETPAGEA
)
psInfo
->
proppage
[
index
].
hpage
;
PROPSHEET_CreatePage
(
hwndDlg
,
index
,
psInfo
,
ppshpage
);
psn
.
hdr
.
hwndFrom
=
hwndDlg
;
psn
.
hdr
.
code
=
PSN_SETACTIVE
;
psn
.
hdr
.
idFrom
=
0
;
psn
.
lParam
=
0
;
/* Send the notification before showing the page. */
SendMessageA
(
psInfo
->
proppage
[
index
].
hwndPage
,
WM_NOTIFY
,
0
,
(
LPARAM
)
&
psn
);
/*
* TODO: check return value.
*/
}
ShowWindow
(
psInfo
->
proppage
[
index
].
hwndPage
,
SW_SHOW
);
else
if
(
!
(
psInfo
->
ppshheader
->
dwFlags
&
PSH_WIZARD
))
{
LPCPROPSHEETPAGEA
ppshpage
=
PROPSHEET_GetPSPPage
(
psInfo
,
index
);
PROPSHEET_CreatePage
(
hwndDlg
,
index
,
psInfo
,
ppshpage
,
TRUE
);
HWND
hwndTabCtrl
;
/* Synchronize current selection with tab control */
hwndTabCtrl
=
GetDlgItem
(
hwndDlg
,
IDC_TABCONTROL
);
SendMessageA
(
hwndTabCtrl
,
TCM_SETCURSEL
,
index
,
0
);
}
psInfo
->
active_page
=
index
;
psInfo
->
activeValid
=
TRUE
;
return
TRUE
;
}
...
...
@@ -1015,32 +1091,32 @@ static BOOL PROPSHEET_ShowPage(HWND hwndDlg, int index, PropSheetInfo * psInfo)
static
BOOL
PROPSHEET_Back
(
HWND
hwndDlg
)
{
BOOL
res
;
NMHDR
hdr
;
PSHNOTIFY
psn
;
HWND
hwndPage
;
HWND
hwndBack
=
GetDlgItem
(
hwndDlg
,
IDC_BACK_BUTTON
);
PropSheetInfo
*
psInfo
=
(
PropSheetInfo
*
)
GetPropA
(
hwndDlg
,
PropSheetInfoStr
);
if
(
psInfo
->
active_page
<
=
0
)
if
(
psInfo
->
active_page
<
0
)
return
FALSE
;
hdr
.
hwndFrom
=
hwndDlg
;
hdr
.
code
=
PSN_WIZBACK
;
psn
.
hdr
.
code
=
PSN_WIZBACK
;
psn
.
hdr
.
hwndFrom
=
hwndDlg
;
psn
.
hdr
.
idFrom
=
0
;
psn
.
lParam
=
0
;
hwndPage
=
psInfo
->
proppage
[
psInfo
->
active_page
].
hwndPage
;
if
(
SendMessageA
(
hwndPage
,
WM_NOTIFY
,
0
,
(
LPARAM
)
&
hdr
)
==
-
1
)
if
(
SendMessageA
(
hwndPage
,
WM_NOTIFY
,
0
,
(
LPARAM
)
&
psn
)
==
-
1
)
return
FALSE
;
if
(
psInfo
->
active_page
>
0
)
{
res
=
PROPSHEET_CanSetCurSel
(
hwndDlg
);
if
(
res
!=
FALSE
)
{
res
=
PROPSHEET_SetCurSel
(
hwndDlg
,
psInfo
->
active_page
-
1
,
0
);
}
/* if we went to page 0, disable Back button */
if
(
res
&&
(
psInfo
->
active_page
==
0
))
EnableWindow
(
hwndBack
,
FALSE
);
}
return
TRUE
;
}
...
...
@@ -1050,21 +1126,23 @@ static BOOL PROPSHEET_Back(HWND hwndDlg)
*/
static
BOOL
PROPSHEET_Next
(
HWND
hwndDlg
)
{
NMHDR
hdr
;
PSHNOTIFY
psn
;
HWND
hwndPage
;
LRESULT
msgResult
=
0
;
PropSheetInfo
*
psInfo
=
(
PropSheetInfo
*
)
GetPropA
(
hwndDlg
,
PropSheetInfoStr
);
if
(
psInfo
->
active_page
<
0
||
psInfo
->
active_page
==
psInfo
->
nPages
-
1
)
if
(
psInfo
->
active_page
<
0
)
return
FALSE
;
hdr
.
hwndFrom
=
hwndDlg
;
hdr
.
code
=
PSN_WIZNEXT
;
psn
.
hdr
.
code
=
PSN_WIZNEXT
;
psn
.
hdr
.
hwndFrom
=
hwndDlg
;
psn
.
hdr
.
idFrom
=
0
;
psn
.
lParam
=
0
;
hwndPage
=
psInfo
->
proppage
[
psInfo
->
active_page
].
hwndPage
;
msgResult
=
SendMessageA
(
hwndPage
,
WM_NOTIFY
,
0
,
(
LPARAM
)
&
hdr
);
msgResult
=
SendMessageA
(
hwndPage
,
WM_NOTIFY
,
0
,
(
LPARAM
)
&
psn
);
TRACE
(
"msg result %ld
\n
"
,
msgResult
);
...
...
@@ -1084,7 +1162,7 @@ static BOOL PROPSHEET_Next(HWND hwndDlg)
*/
static
BOOL
PROPSHEET_Finish
(
HWND
hwndDlg
)
{
NMHDR
hdr
;
PSHNOTIFY
psn
;
HWND
hwndPage
;
LRESULT
msgResult
=
0
;
PropSheetInfo
*
psInfo
=
(
PropSheetInfo
*
)
GetPropA
(
hwndDlg
,
...
...
@@ -1093,12 +1171,14 @@ static BOOL PROPSHEET_Finish(HWND hwndDlg)
if
(
psInfo
->
active_page
<
0
)
return
FALSE
;
hdr
.
hwndFrom
=
hwndDlg
;
hdr
.
code
=
PSN_WIZFINISH
;
psn
.
hdr
.
code
=
PSN_WIZFINISH
;
psn
.
hdr
.
hwndFrom
=
hwndDlg
;
psn
.
hdr
.
idFrom
=
0
;
psn
.
lParam
=
0
;
hwndPage
=
psInfo
->
proppage
[
psInfo
->
active_page
].
hwndPage
;
msgResult
=
SendMessageA
(
hwndPage
,
WM_NOTIFY
,
0
,
(
LPARAM
)
&
hdr
);
msgResult
=
SendMessageA
(
hwndPage
,
WM_NOTIFY
,
0
,
(
LPARAM
)
&
psn
);
TRACE
(
"msg result %ld
\n
"
,
msgResult
);
...
...
@@ -1106,7 +1186,7 @@ static BOOL PROPSHEET_Finish(HWND hwndDlg)
return
FALSE
;
if
(
psInfo
->
isModeless
)
psInfo
->
active
_page
=
-
1
;
psInfo
->
active
Valid
=
FALSE
;
else
EndDialog
(
hwndDlg
,
TRUE
);
...
...
@@ -1116,11 +1196,11 @@ static BOOL PROPSHEET_Finish(HWND hwndDlg)
/******************************************************************************
* PROPSHEET_Apply
*/
static
BOOL
PROPSHEET_Apply
(
HWND
hwndDlg
)
static
BOOL
PROPSHEET_Apply
(
HWND
hwndDlg
,
LPARAM
lParam
)
{
int
i
;
NMHDR
hdr
;
HWND
hwndPage
;
PSHNOTIFY
psn
;
LRESULT
msgResult
;
PropSheetInfo
*
psInfo
=
(
PropSheetInfo
*
)
GetPropA
(
hwndDlg
,
PropSheetInfoStr
);
...
...
@@ -1128,31 +1208,49 @@ static BOOL PROPSHEET_Apply(HWND hwndDlg)
if
(
psInfo
->
active_page
<
0
)
return
FALSE
;
hdr
.
hwndFrom
=
hwndDlg
;
psn
.
hdr
.
hwndFrom
=
hwndDlg
;
psn
.
hdr
.
idFrom
=
0
;
psn
.
lParam
=
0
;
/*
* Send PSN_KILLACTIVE to the current page.
*/
hdr
.
code
=
PSN_KILLACTIVE
;
psn
.
hdr
.
code
=
PSN_KILLACTIVE
;
hwndPage
=
psInfo
->
proppage
[
psInfo
->
active_page
].
hwndPage
;
if
(
SendMessageA
(
hwndPage
,
WM_NOTIFY
,
0
,
(
LPARAM
)
&
hdr
)
!=
FALSE
)
if
(
SendMessageA
(
hwndPage
,
WM_NOTIFY
,
0
,
(
LPARAM
)
&
psn
)
!=
FALSE
)
return
FALSE
;
/*
* Send PSN_APPLY to all pages.
*/
hdr
.
code
=
PSN_APPLY
;
psn
.
hdr
.
code
=
PSN_APPLY
;
psn
.
lParam
=
lParam
;
for
(
i
=
0
;
i
<
psInfo
->
nPages
;
i
++
)
{
hwndPage
=
psInfo
->
proppage
[
i
].
hwndPage
;
msgResult
=
SendMessageA
(
hwndPage
,
WM_NOTIFY
,
0
,
(
LPARAM
)
&
hdr
);
if
(
hwndPage
)
{
msgResult
=
SendMessageA
(
hwndPage
,
WM_NOTIFY
,
0
,
(
LPARAM
)
&
psn
);
if
(
msgResult
==
PSNRET_INVALID_NOCHANGEPAGE
)
return
FALSE
;
}
}
if
(
lParam
)
{
psInfo
->
activeValid
=
FALSE
;
}
else
if
(
psInfo
->
active_page
>=
0
)
{
psn
.
hdr
.
code
=
PSN_SETACTIVE
;
psn
.
lParam
=
0
;
hwndPage
=
psInfo
->
proppage
[
psInfo
->
active_page
].
hwndPage
;
SendMessageA
(
hwndPage
,
WM_NOTIFY
,
0
,
(
LPARAM
)
&
psn
);
}
return
TRUE
;
}
...
...
@@ -1160,29 +1258,42 @@ static BOOL PROPSHEET_Apply(HWND hwndDlg)
/******************************************************************************
* PROPSHEET_Cancel
*/
static
void
PROPSHEET_Cancel
(
HWND
hwndDlg
)
static
void
PROPSHEET_Cancel
(
HWND
hwndDlg
,
LPARAM
lParam
)
{
PropSheetInfo
*
psInfo
=
(
PropSheetInfo
*
)
GetPropA
(
hwndDlg
,
PropSheetInfoStr
);
HWND
hwndPage
;
NMHDR
hdr
;
PSHNOTIFY
psn
;
int
i
;
if
(
psInfo
->
active_page
<
0
)
return
;
hwndPage
=
psInfo
->
proppage
[
psInfo
->
active_page
].
hwndPage
;
hdr
.
hwndFrom
=
hwndDlg
;
hdr
.
code
=
PSN_QUERYCANCEL
;
psn
.
hdr
.
code
=
PSN_QUERYCANCEL
;
psn
.
hdr
.
hwndFrom
=
hwndDlg
;
psn
.
hdr
.
idFrom
=
0
;
psn
.
lParam
=
0
;
if
(
SendMessageA
(
hwndPage
,
WM_NOTIFY
,
0
,
(
LPARAM
)
&
hdr
))
if
(
SendMessageA
(
hwndPage
,
WM_NOTIFY
,
0
,
(
LPARAM
)
&
psn
))
return
;
hdr
.
code
=
PSN_RESET
;
psn
.
hdr
.
code
=
PSN_RESET
;
psn
.
lParam
=
lParam
;
SendMessageA
(
hwndPage
,
WM_NOTIFY
,
0
,
(
LPARAM
)
&
hdr
);
for
(
i
=
0
;
i
<
psInfo
->
nPages
;
i
++
)
{
hwndPage
=
psInfo
->
proppage
[
i
].
hwndPage
;
if
(
hwndPage
)
SendMessageA
(
hwndPage
,
WM_NOTIFY
,
0
,
(
LPARAM
)
&
psn
);
}
if
(
psInfo
->
isModeless
)
psInfo
->
active_page
=
-
1
;
/* makes PSM_GETCURRENTPAGEHWND return NULL */
{
/* makes PSM_GETCURRENTPAGEHWND return NULL */
psInfo
->
activeValid
=
FALSE
;
}
else
EndDialog
(
hwndDlg
,
FALSE
);
}
...
...
@@ -1195,16 +1306,18 @@ static void PROPSHEET_Help(HWND hwndDlg)
PropSheetInfo
*
psInfo
=
(
PropSheetInfo
*
)
GetPropA
(
hwndDlg
,
PropSheetInfoStr
);
HWND
hwndPage
;
NMHDR
hdr
;
PSHNOTIFY
psn
;
if
(
psInfo
->
active_page
<
0
)
return
;
hwndPage
=
psInfo
->
proppage
[
psInfo
->
active_page
].
hwndPage
;
hdr
.
hwndFrom
=
hwndDlg
;
hdr
.
code
=
PSN_HELP
;
psn
.
hdr
.
code
=
PSN_HELP
;
psn
.
hdr
.
hwndFrom
=
hwndDlg
;
psn
.
hdr
.
idFrom
=
0
;
psn
.
lParam
=
0
;
SendMessageA
(
hwndPage
,
WM_NOTIFY
,
0
,
(
LPARAM
)
&
hdr
);
SendMessageA
(
hwndPage
,
WM_NOTIFY
,
0
,
(
LPARAM
)
&
psn
);
}
/******************************************************************************
...
...
@@ -1319,19 +1432,24 @@ static BOOL PROPSHEET_CanSetCurSel(HWND hwndDlg)
PropSheetInfo
*
psInfo
=
(
PropSheetInfo
*
)
GetPropA
(
hwndDlg
,
PropSheetInfoStr
);
HWND
hwndPage
;
NMHDR
hdr
;
PSHNOTIFY
psn
;
if
(
!
psInfo
||
psInfo
->
active_page
<
0
)
if
(
!
psInfo
)
return
FALSE
;
if
(
psInfo
->
active_page
<
0
)
return
TRUE
;
/*
* Notify the current page.
*/
hwndPage
=
psInfo
->
proppage
[
psInfo
->
active_page
].
hwndPage
;
psn
.
hdr
.
code
=
PSN_KILLACTIVE
;
psn
.
hdr
.
hwndFrom
=
hwndDlg
;
psn
.
hdr
.
idFrom
=
0
;
psn
.
lParam
=
0
;
hdr
.
hwndFrom
=
hwndDlg
;
hdr
.
code
=
PSN_KILLACTIVE
;
return
!
SendMessageA
(
hwndPage
,
WM_NOTIFY
,
0
,
(
LPARAM
)
&
hdr
);
return
!
SendMessageA
(
hwndPage
,
WM_NOTIFY
,
0
,
(
LPARAM
)
&
psn
);
}
/******************************************************************************
...
...
@@ -1345,17 +1463,8 @@ static BOOL PROPSHEET_SetCurSel(HWND hwndDlg,
PropSheetInfoStr
);
HWND
hwndPage
;
HWND
hwndHelp
=
GetDlgItem
(
hwndDlg
,
IDHELP
);
NMHDR
hdr
;
if
(
psInfo
->
active_page
<
0
)
return
FALSE
;
hwndPage
=
psInfo
->
proppage
[
psInfo
->
active_page
].
hwndPage
;
hdr
.
hwndFrom
=
hwndDlg
;
/*
* hpage takes precedence over index.
*/
/* hpage takes precedence over index */
if
(
hpage
!=
NULL
)
index
=
PROPSHEET_GetPageIndex
(
hpage
,
psInfo
);
...
...
@@ -1374,9 +1483,15 @@ static BOOL PROPSHEET_SetCurSel(HWND hwndDlg,
if
(
hwndPage
)
{
int
result
;
hdr
.
code
=
PSN_SETACTIVE
;
PSHNOTIFY
psn
;
psn
.
hdr
.
code
=
PSN_SETACTIVE
;
psn
.
hdr
.
hwndFrom
=
hwndDlg
;
psn
.
hdr
.
idFrom
=
0
;
psn
.
lParam
=
0
;
result
=
SendMessageA
(
hwndPage
,
WM_NOTIFY
,
0
,
(
LPARAM
)
&
psn
);
result
=
SendMessageA
(
hwndPage
,
WM_NOTIFY
,
0
,
(
LPARAM
)
&
hdr
);
/*
* TODO: check return value.
*/
...
...
@@ -1472,32 +1587,6 @@ static LRESULT PROPSHEET_QuerySiblings(HWND hwndDlg,
return
msgResult
;
}
/******************************************************************************
* PROPSHEET_GetPSPPage
*/
static
LPCPROPSHEETPAGEA
PROPSHEET_GetPSPPage
(
const
PropSheetInfo
*
psInfo
,
int
index
)
{
BOOL
usePSP
=
psInfo
->
ppshheader
->
dwFlags
&
PSH_PROPSHEETPAGE
;
LPCPROPSHEETPAGEA
lppsp
;
int
realIndex
=
psInfo
->
proppage
[
index
].
index
;
if
(
usePSP
)
{
BYTE
*
pByte
;
lppsp
=
psInfo
->
ppshheader
->
u3
.
ppsp
;
pByte
=
(
BYTE
*
)
lppsp
;
pByte
+=
(
lppsp
->
dwSize
*
realIndex
);
lppsp
=
(
LPCPROPSHEETPAGEA
)
pByte
;
}
else
lppsp
=
(
LPCPROPSHEETPAGEA
)
psInfo
->
ppshheader
->
u3
.
phpage
[
realIndex
];
return
lppsp
;
}
/******************************************************************************
* PROPSHEET_AddPage
...
...
@@ -1520,13 +1609,13 @@ static BOOL PROPSHEET_AddPage(HWND hwndDlg,
(
psInfo
->
nPages
+
1
));
PROPSHEET_CollectPageInfo
(
ppsp
,
psInfo
,
psInfo
->
nPages
);
psInfo
->
proppage
[
psInfo
->
nPages
].
index
=
-
1
;
psInfo
->
proppage
[
psInfo
->
nPages
].
hpage
=
hpage
;
/*
* Create the page but don't show it.
*/
PROPSHEET_CreatePage
(
hwndDlg
,
psInfo
->
nPages
,
psInfo
,
ppsp
,
FALSE
);
if
(
ppsp
->
dwFlags
&
PSP_PREMATURE
)
{
/* Create the page but don't show it */
PROPSHEET_CreatePage
(
hwndDlg
,
psInfo
->
nPages
,
psInfo
,
ppsp
);
}
/*
* Add a new tab to the tab control.
...
...
@@ -1544,6 +1633,10 @@ static BOOL PROPSHEET_AddPage(HWND hwndDlg,
psInfo
->
nPages
++
;
/* If it is the only page - show it */
if
(
psInfo
->
nPages
==
1
)
PROPSHEET_ShowPage
(
hwndDlg
,
0
,
psInfo
);
return
TRUE
;
}
...
...
@@ -1560,7 +1653,6 @@ static BOOL PROPSHEET_RemovePage(HWND hwndDlg,
PropPageInfo
*
oldPages
;
if
(
!
psInfo
)
{
FIXME
(
"No psInfo for propertysheet at windows 0x%04x, returning FALSE...
\n
"
,
hwndDlg
);
return
FALSE
;
}
oldPages
=
psInfo
->
proppage
;
...
...
@@ -1601,26 +1693,31 @@ static BOOL PROPSHEET_RemovePage(HWND hwndDlg,
}
else
{
TRACE
(
"Removing the only page, close the dialog!
\n
"
);
if
(
psInfo
->
isModeless
)
psInfo
->
active_page
=
-
1
;
else
if
(
!
psInfo
->
isModeless
)
{
EndDialog
(
hwndDlg
,
FALSE
);
return
TRUE
;
}
}
if
(
index
<
psInfo
->
active_page
)
}
else
if
(
index
<
psInfo
->
active_page
)
psInfo
->
active_page
--
;
/* Destroy page dialog window.
* If it's last page in modal dialog, it has been destroyed by EndDialog
*/
if
(
psInfo
->
isModeless
||
psInfo
->
nPages
>
1
)
/* Destroy page dialog window */
DestroyWindow
(
psInfo
->
proppage
[
index
].
hwndPage
);
/* Free page resources */
if
(
psInfo
->
proppage
[
index
].
hpage
)
{
PROPSHEETPAGEA
*
psp
=
(
PROPSHEETPAGEA
*
)
psInfo
->
proppage
[
index
].
hpage
;
if
((
psp
->
dwFlags
&
PSP_USETITLE
)
&&
psInfo
->
proppage
[
index
].
pszText
)
HeapFree
(
GetProcessHeap
(),
0
,
(
LPVOID
)
psInfo
->
proppage
[
index
].
pszText
);
DestroyPropertySheetPage
(
psInfo
->
proppage
[
index
].
hpage
);
}
/* Remove the tab */
SendMessageA
(
hwndTabControl
,
TCM_DELETEITEM
,
index
,
0
);
...
...
@@ -1649,27 +1746,27 @@ static BOOL PROPSHEET_RemovePage(HWND hwndDlg,
*/
static
void
PROPSHEET_SetWizButtons
(
HWND
hwndDlg
,
DWORD
dwFlags
)
{
HWND
hwndButton
;
HWND
hwndBack
=
GetDlgItem
(
hwndDlg
,
IDC_BACK_BUTTON
);
HWND
hwndNext
=
GetDlgItem
(
hwndDlg
,
IDC_NEXT_BUTTON
);
HWND
hwndFinish
=
GetDlgItem
(
hwndDlg
,
IDC_FINISH_BUTTON
);
TRACE
(
"%ld
\n
"
,
dwFlags
);
EnableWindow
(
hwndBack
,
FALSE
);
EnableWindow
(
hwndNext
,
FALSE
);
EnableWindow
(
hwndFinish
,
FALSE
);
if
(
dwFlags
&
PSWIZB_BACK
)
{
hwndButton
=
GetDlgItem
(
hwndDlg
,
IDC_BACK_BUTTON
);
EnableWindow
(
hwndButton
,
TRUE
);
}
EnableWindow
(
hwndBack
,
TRUE
);
if
(
dwFlags
&
PSWIZB_NEXT
)
{
/* Hide the Finish button */
hwndButton
=
GetDlgItem
(
hwndDlg
,
IDC_FINISH_BUTTON
);
ShowWindow
(
hwndButton
,
SW_HIDE
);
ShowWindow
(
hwndFinish
,
SW_HIDE
);
/* Show and enable the Next button */
hwndButton
=
GetDlgItem
(
hwndDlg
,
IDC_NEXT_BUTTON
);
ShowWindow
(
hwndButton
,
SW_SHOW
);
EnableWindow
(
hwndButton
,
TRUE
);
ShowWindow
(
hwndNext
,
SW_SHOW
);
EnableWindow
(
hwndNext
,
TRUE
);
/* Set the Next button as the default pushbutton */
SendMessageA
(
hwndDlg
,
DM_SETDEFID
,
IDC_NEXT_BUTTON
,
0
);
...
...
@@ -1678,17 +1775,13 @@ static void PROPSHEET_SetWizButtons(HWND hwndDlg, DWORD dwFlags)
if
((
dwFlags
&
PSWIZB_FINISH
)
||
(
dwFlags
&
PSWIZB_DISABLEDFINISH
))
{
/* Hide the Next button */
hwndButton
=
GetDlgItem
(
hwndDlg
,
IDC_NEXT_BUTTON
);
ShowWindow
(
hwndButton
,
SW_HIDE
);
ShowWindow
(
hwndNext
,
SW_HIDE
);
/* Show the Finish button */
hwndButton
=
GetDlgItem
(
hwndDlg
,
IDC_FINISH_BUTTON
);
ShowWindow
(
hwndButton
,
SW_SHOW
);
ShowWindow
(
hwndFinish
,
SW_SHOW
);
if
(
dwFlags
&
PSWIZB_FINISH
)
EnableWindow
(
hwndButton
,
TRUE
);
else
EnableWindow
(
hwndButton
,
FALSE
);
EnableWindow
(
hwndFinish
,
TRUE
);
/* Set the Finish button as the default pushbutton */
SendMessageA
(
hwndDlg
,
DM_SETDEFID
,
IDC_FINISH_BUTTON
,
0
);
...
...
@@ -1725,10 +1818,32 @@ static int PROPSHEET_GetPageIndex(HPROPSHEETPAGE hpage, PropSheetInfo* psInfo)
*/
static
void
PROPSHEET_CleanUp
(
HWND
hwndDlg
)
{
int
i
;
PropSheetInfo
*
psInfo
=
(
PropSheetInfo
*
)
RemovePropA
(
hwndDlg
,
PropSheetInfoStr
);
TRACE
(
"
\n
"
);
if
(
HIWORD
(
psInfo
->
ppshheader
->
pszCaption
))
HeapFree
(
GetProcessHeap
(),
0
,
(
LPVOID
)
psInfo
->
ppshheader
->
pszCaption
);
COMCTL32_Free
((
LPVOID
)
psInfo
->
ppshheader
);
for
(
i
=
0
;
i
<
psInfo
->
nPages
;
i
++
)
{
PROPSHEETPAGEA
*
psp
=
(
PROPSHEETPAGEA
*
)
psInfo
->
proppage
[
i
].
hpage
;
if
(
psInfo
->
proppage
[
i
].
hwndPage
)
DestroyWindow
(
psInfo
->
proppage
[
i
].
hwndPage
);
if
(
psp
)
{
if
((
psp
->
dwFlags
&
PSP_USETITLE
)
&&
psInfo
->
proppage
[
i
].
pszText
)
HeapFree
(
GetProcessHeap
(),
0
,
(
LPVOID
)
psInfo
->
proppage
[
i
].
pszText
);
DestroyPropertySheetPage
(
psInfo
->
proppage
[
i
].
hpage
);
}
}
COMCTL32_Free
(
psInfo
->
proppage
);
COMCTL32_Free
(
psInfo
->
strPropertiesFor
);
ImageList_Destroy
(
psInfo
->
hImageList
);
...
...
@@ -1744,21 +1859,27 @@ INT WINAPI PropertySheetA(LPCPROPSHEETHEADERA lppsh)
int
bRet
=
0
;
PropSheetInfo
*
psInfo
=
(
PropSheetInfo
*
)
GlobalAlloc
(
GPTR
,
sizeof
(
PropSheetInfo
));
LPCPROPSHEETPAGEA
lppsp
;
int
i
;
BYTE
*
pByte
;
PROPSHEET_CollectSheetInfo
(
lppsh
,
psInfo
);
psInfo
->
proppage
=
(
PropPageInfo
*
)
COMCTL32_Alloc
(
sizeof
(
PropPageInfo
)
*
lppsh
->
nPages
);
pByte
=
(
BYTE
*
)
psInfo
->
ppshheader
->
u3
.
ppsp
;
for
(
i
=
0
;
i
<
lppsh
->
nPages
;
i
++
)
{
psInfo
->
proppage
[
i
].
index
=
i
;
if
(
!
(
lppsh
->
dwFlags
&
PSH_PROPSHEETPAGE
))
psInfo
->
proppage
[
i
].
hpage
=
psInfo
->
ppshheader
->
u3
.
phpage
[
i
];
lppsp
=
PROPSHEET_GetPSPPage
(
psInfo
,
i
);
PROPSHEET_CollectPageInfo
(
lppsp
,
psInfo
,
i
);
else
{
psInfo
->
proppage
[
i
].
hpage
=
CreatePropertySheetPageA
((
LPCPROPSHEETPAGEA
)
pByte
);
pByte
+=
((
LPPROPSHEETPAGEA
)
pByte
)
->
dwSize
;
}
PROPSHEET_CollectPageInfo
((
LPCPROPSHEETPAGEA
)
psInfo
->
proppage
[
i
].
hpage
,
psInfo
,
i
);
}
bRet
=
PROPSHEET_CreateDialog
(
psInfo
);
...
...
@@ -1786,6 +1907,18 @@ HPROPSHEETPAGE WINAPI CreatePropertySheetPageA(
*
ppsp
=
*
lpPropSheetPage
;
if
(
!
(
ppsp
->
dwFlags
&
PSP_DLGINDIRECT
)
&&
HIWORD
(
ppsp
->
u1
.
pszTemplate
)
)
ppsp
->
u1
.
pszTemplate
=
HEAP_strdupA
(
GetProcessHeap
(),
0
,
lpPropSheetPage
->
u1
.
pszTemplate
);
if
(
(
ppsp
->
dwFlags
&
PSP_USEICONID
)
&&
HIWORD
(
ppsp
->
u2
.
pszIcon
)
)
ppsp
->
u2
.
pszIcon
=
HEAP_strdupA
(
GetProcessHeap
(),
0
,
lpPropSheetPage
->
u2
.
pszIcon
);
if
((
ppsp
->
dwFlags
&
PSP_USETITLE
)
&&
HIWORD
(
ppsp
->
pszTitle
))
ppsp
->
pszTitle
=
HEAP_strdupA
(
GetProcessHeap
(),
0
,
lpPropSheetPage
->
pszTitle
);
else
if
(
!
(
ppsp
->
dwFlags
&
PSP_USETITLE
)
)
ppsp
->
pszTitle
=
NULL
;
return
(
HPROPSHEETPAGE
)
ppsp
;
}
...
...
@@ -1804,12 +1937,78 @@ HPROPSHEETPAGE WINAPI CreatePropertySheetPageW(LPCPROPSHEETPAGEW lpPropSheetPage
*/
BOOL
WINAPI
DestroyPropertySheetPage
(
HPROPSHEETPAGE
hPropPage
)
{
PROPSHEETPAGEA
*
psp
=
(
PROPSHEETPAGEA
*
)
hPropPage
;
if
(
!
psp
)
return
FALSE
;
if
(
!
(
psp
->
dwFlags
&
PSP_DLGINDIRECT
)
&&
HIWORD
(
psp
->
u1
.
pszTemplate
)
)
HeapFree
(
GetProcessHeap
(),
0
,
(
LPVOID
)
psp
->
u1
.
pszTemplate
);
if
(
(
psp
->
dwFlags
&
PSP_USEICONID
)
&&
HIWORD
(
psp
->
u2
.
pszIcon
)
)
HeapFree
(
GetProcessHeap
(),
0
,
(
LPVOID
)
psp
->
u2
.
pszIcon
);
if
((
psp
->
dwFlags
&
PSP_USETITLE
)
&&
HIWORD
(
psp
->
pszTitle
))
HeapFree
(
GetProcessHeap
(),
0
,
(
LPVOID
)
psp
->
pszTitle
);
COMCTL32_Free
(
hPropPage
);
return
TRUE
;
}
/******************************************************************************
* PROPSHEET_IsDialogMessage
*/
static
BOOL
PROPSHEET_IsDialogMessage
(
HWND
hwnd
,
LPMSG
lpMsg
)
{
PropSheetInfo
*
psInfo
=
(
PropSheetInfo
*
)
GetPropA
(
hwnd
,
PropSheetInfoStr
);
if
(
!
psInfo
||
(
hwnd
!=
lpMsg
->
hwnd
&&
!
IsChild
(
hwnd
,
lpMsg
->
hwnd
)))
return
FALSE
;
if
(
lpMsg
->
message
==
WM_KEYDOWN
&&
(
GetKeyState
(
VK_CONTROL
)
&
0x8000
))
{
int
new_page
=
0
;
INT
dlgCode
=
SendMessageA
(
lpMsg
->
hwnd
,
WM_GETDLGCODE
,
0
,
(
LPARAM
)
lpMsg
);
if
(
!
(
dlgCode
&
DLGC_WANTMESSAGE
))
{
switch
(
lpMsg
->
wParam
)
{
case
VK_TAB
:
if
(
GetKeyState
(
VK_SHIFT
)
&
0x8000
)
new_page
=
-
1
;
else
new_page
=
1
;
break
;
case
VK_NEXT
:
new_page
=
1
;
break
;
case
VK_PRIOR
:
new_page
=
-
1
;
break
;
}
}
if
(
new_page
)
{
if
(
PROPSHEET_CanSetCurSel
(
hwnd
)
!=
FALSE
)
{
new_page
+=
psInfo
->
active_page
;
if
(
new_page
<
0
)
new_page
=
psInfo
->
nPages
-
1
;
else
if
(
new_page
>=
psInfo
->
nPages
)
new_page
=
0
;
PROPSHEET_SetCurSel
(
hwnd
,
new_page
,
0
);
}
return
TRUE
;
}
}
return
IsDialogMessageA
(
hwnd
,
lpMsg
);
}
/******************************************************************************
* PROPSHEET_DialogProc
*/
BOOL
WINAPI
...
...
@@ -1823,6 +2022,7 @@ PROPSHEET_DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
char
*
strCaption
=
(
char
*
)
COMCTL32_Alloc
(
MAX_CAPTION_LENGTH
);
HWND
hwndTabCtrl
=
GetDlgItem
(
hwnd
,
IDC_TABCONTROL
);
LPCPROPSHEETPAGEA
ppshpage
;
int
idx
;
SetPropA
(
hwnd
,
PropSheetInfoStr
,
(
HANDLE
)
psInfo
);
...
...
@@ -1859,17 +2059,11 @@ PROPSHEET_DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
if
(
psInfo
->
ppshheader
->
dwFlags
&
PSH_WIZARD
)
{
HWND
hwndBack
=
GetDlgItem
(
hwnd
,
IDC_BACK_BUTTON
);
if
(
PROPSHEET_IsTooSmallWizard
(
hwnd
,
psInfo
))
{
PROPSHEET_AdjustSizeWizard
(
hwnd
,
psInfo
);
PROPSHEET_AdjustButtonsWizard
(
hwnd
,
psInfo
);
}
/* Disable Back button if we start at page 0 */
if
(
psInfo
->
active_page
==
0
)
EnableWindow
(
hwndBack
,
FALSE
);
}
else
{
...
...
@@ -1884,8 +2078,11 @@ PROPSHEET_DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
(
*
(
psInfo
->
ppshheader
->
pfnCallback
))(
hwnd
,
PSCB_INITIALIZED
,
(
LPARAM
)
0
);
ppshpage
=
PROPSHEET_GetPSPPage
(
psInfo
,
psInfo
->
active_page
);
PROPSHEET_CreatePage
(
hwnd
,
psInfo
->
active_page
,
psInfo
,
ppshpage
,
TRUE
);
idx
=
psInfo
->
active_page
;
ppshpage
=
(
LPCPROPSHEETPAGEA
)
psInfo
->
proppage
[
idx
].
hpage
;
psInfo
->
active_page
=
-
1
;
PROPSHEET_SetCurSel
(
hwnd
,
idx
,
psInfo
->
proppage
[
idx
].
hpage
);
if
(
!
(
psInfo
->
ppshheader
->
dwFlags
&
PSH_WIZARD
))
SendMessageA
(
hwndTabCtrl
,
TCM_SETCURSEL
,
psInfo
->
active_page
,
0
);
...
...
@@ -1913,7 +2110,7 @@ PROPSHEET_DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
return
TRUE
;
case
WM_CLOSE
:
PROPSHEET_Cancel
(
hwnd
);
PROPSHEET_Cancel
(
hwnd
,
1
);
return
TRUE
;
case
WM_COMMAND
:
...
...
@@ -1927,11 +2124,9 @@ PROPSHEET_DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
HWND
hwndApplyBtn
=
GetDlgItem
(
hwnd
,
IDC_APPLY_BUTTON
);
if
(
PROPSHEET_Apply
(
hwnd
)
==
FALSE
)
if
(
PROPSHEET_Apply
(
hwnd
,
wID
==
IDOK
?
1
:
0
)
==
FALSE
)
break
;
EnableWindow
(
hwndApplyBtn
,
FALSE
);
if
(
wID
==
IDOK
)
{
PropSheetInfo
*
psInfo
=
(
PropSheetInfo
*
)
GetPropA
(
hwnd
,
...
...
@@ -1946,10 +2141,12 @@ PROPSHEET_DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
result
=
ID_PSREBOOTSYSTEM
;
if
(
psInfo
->
isModeless
)
psInfo
->
active
_page
=
-
1
;
psInfo
->
active
Valid
=
FALSE
;
else
EndDialog
(
hwnd
,
result
);
}
else
EnableWindow
(
hwndApplyBtn
,
FALSE
);
break
;
}
...
...
@@ -1967,7 +2164,7 @@ PROPSHEET_DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
break
;
case
IDCANCEL
:
PROPSHEET_Cancel
(
hwnd
);
PROPSHEET_Cancel
(
hwnd
,
0
);
break
;
case
IDHELP
:
...
...
@@ -2005,7 +2202,7 @@ PROPSHEET_DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
PropSheetInfoStr
);
HWND
hwndPage
=
0
;
if
(
psInfo
->
active_page
!=
-
1
)
if
(
psInfo
->
active
Valid
&&
psInfo
->
active
_page
!=
-
1
)
hwndPage
=
psInfo
->
proppage
[
psInfo
->
active_page
].
hwndPage
;
SetWindowLongA
(
hwnd
,
DWL_MSGRESULT
,
hwndPage
);
...
...
@@ -2049,13 +2246,15 @@ PROPSHEET_DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
case
PSM_CANCELTOCLOSE
:
{
char
buf
[
MAX_BUTTONTEXT_LENGTH
];
HWND
hwndOK
=
GetDlgItem
(
hwnd
,
IDOK
);
HWND
hwndCancel
=
GetDlgItem
(
hwnd
,
IDCANCEL
);
EnableWindow
(
hwndCancel
,
FALSE
);
SetWindowTextA
(
hwndOK
,
"Close"
);
/* FIXME: hardcoded string */
if
(
LoadStringA
(
COMCTL32_hModule
,
IDS_CLOSE
,
buf
,
sizeof
(
buf
)))
SetWindowTextA
(
hwndOK
,
buf
);
return
TRU
E
;
return
FALS
E
;
}
case
PSM_RESTARTWINDOWS
:
...
...
@@ -2082,7 +2281,7 @@ PROPSHEET_DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
case
PSM_APPLY
:
{
BOOL
msgResult
=
PROPSHEET_Apply
(
hwnd
);
BOOL
msgResult
=
PROPSHEET_Apply
(
hwnd
,
0
);
SetWindowLongA
(
hwnd
,
DWL_MSGRESULT
,
msgResult
);
...
...
@@ -2121,8 +2320,9 @@ PROPSHEET_DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
case
PSM_ISDIALOGMESSAGE
:
{
FIXME
(
"Unimplemented msg PSM_ISDIALOGMESSAGE
\n
"
);
return
0
;
BOOL
msgResult
=
PROPSHEET_IsDialogMessage
(
hwnd
,
(
LPMSG
)
lParam
);
SetWindowLongA
(
hwnd
,
DWL_MSGRESULT
,
msgResult
);
return
TRUE
;
}
case
PSM_PRESSBUTTON
:
...
...
dlls/comctl32/rsrc.rc
View file @
08afc1a5
...
...
@@ -10,8 +10,8 @@ BEGIN
DEFPUSHBUTTON "OK", IDOK,72,138,50,14
PUSHBUTTON "Cancel", IDCANCEL,127,138,50,14
PUSHBUTTON "&Apply", IDC_APPLY_BUTTON,181,138,50,14
PUSHBUTTON "Help", IDHELP,235,138,50,14
CONTROL "Tab", IDC_TABCONTROL,"SysTabControl32",WS_CLIPSIBLINGS,7,7,278,125
PUSHBUTTON "Help", IDHELP,235,138,50,14
,WS_TABSTOP|WS_GROUP
CONTROL "Tab", IDC_TABCONTROL,"SysTabControl32",WS_CLIPSIBLINGS
|WS_TABSTOP
,7,7,278,125
END
...
...
@@ -24,7 +24,7 @@ BEGIN
DEFPUSHBUTTON "&Next >", IDC_NEXT_BUTTON,121,138,50,14
PUSHBUTTON "< &Back", IDC_BACK_BUTTON,71,138,50,14
PUSHBUTTON "Cancel", IDCANCEL,178,138,50,14
PUSHBUTTON "Help", IDHELP,235,138,50,14
PUSHBUTTON "Help", IDHELP,235,138,50,14
,WS_GROUP
LTEXT "", IDC_SUNKEN_LINE,7,129,278,1,SS_SUNKEN
CONTROL "Tab", IDC_TABCONTROL,"SysTabControl32",WS_CLIPSIBLINGS | WS_DISABLED,7,7,258,5
END
...
...
@@ -96,6 +96,10 @@ IDT_CHECK BITMAP LOADONCALL DISCARDABLE
'0D 11 02 99 0E 11 01 99 00 00 1F 99 00 01'
}
STRINGTABLE DISCARDABLE
{
IDS_CLOSE "Close"
}
IDB_STD_SMALL BITMAP LOADONCALL DISCARDABLE
{
...
...
@@ -398,89 +402,266 @@ IDB_STD_LARGE BITMAP LOADONCALL DISCARDABLE
/* BINRES idb_view_small.bmp */
IDB_VIEW_SMALL BITMAP LOADONCALL DISCARDABLE
{
'42 4D
2A 05 00 00 00 00 00 00 76 00
00 00 28 00'
'00 00 C0 00 00 00 10 00 00 00 01 00 0
4 00 02
00'
'00 00
B4 04
00 00 00 00 00 00 00 00 00 00 00 00'
'42 4D
36 10 00 00 00 00 00 00 36 04
00 00 28 00'
'00 00 C0 00 00 00 10 00 00 00 01 00 0
8 00 00
00'
'00 00
00 0C
00 00 00 00 00 00 00 00 00 00 00 00'
'00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 80'
'00 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80'
'00 00 C0 C0 C0 00 80 80 80 00 00 00 FF 00 00 FF'
'00 00 C0 C0 C0 00 C0 DC C0 00 F0 CA A6 00 04 04'
'04 00 08 08 08 00 0C 0C 0C 00 11 11 11 00 16 16'
'16 00 1C 1C 1C 00 22 22 22 00 29 29 29 00 55 55'
'55 00 4D 4D 4D 00 42 42 42 00 39 39 39 00 80 7C'
'FF 00 50 50 FF 00 93 00 D6 00 FF EC CC 00 C6 D6'
'EF 00 D6 E7 E7 00 90 A9 AD 00 00 00 33 00 00 00'
'66 00 00 00 99 00 00 00 CC 00 00 33 00 00 00 33'
'33 00 00 33 66 00 00 33 99 00 00 33 CC 00 00 33'
'FF 00 00 66 00 00 00 66 33 00 00 66 66 00 00 66'
'99 00 00 66 CC 00 00 66 FF 00 00 99 00 00 00 99'
'33 00 00 99 66 00 00 99 99 00 00 99 CC 00 00 99'
'FF 00 00 CC 00 00 00 CC 33 00 00 CC 66 00 00 CC'
'99 00 00 CC CC 00 00 CC FF 00 00 FF 66 00 00 FF'
'99 00 00 FF CC 00 33 00 00 00 33 00 33 00 33 00'
'66 00 33 00 99 00 33 00 CC 00 33 00 FF 00 33 33'
'00 00 33 33 33 00 33 33 66 00 33 33 99 00 33 33'
'CC 00 33 33 FF 00 33 66 00 00 33 66 33 00 33 66'
'66 00 33 66 99 00 33 66 CC 00 33 66 FF 00 33 99'
'00 00 33 99 33 00 33 99 66 00 33 99 99 00 33 99'
'CC 00 33 99 FF 00 33 CC 00 00 33 CC 33 00 33 CC'
'66 00 33 CC 99 00 33 CC CC 00 33 CC FF 00 33 FF'
'33 00 33 FF 66 00 33 FF 99 00 33 FF CC 00 33 FF'
'FF 00 66 00 00 00 66 00 33 00 66 00 66 00 66 00'
'99 00 66 00 CC 00 66 00 FF 00 66 33 00 00 66 33'
'33 00 66 33 66 00 66 33 99 00 66 33 CC 00 66 33'
'FF 00 66 66 00 00 66 66 33 00 66 66 66 00 66 66'
'99 00 66 66 CC 00 66 99 00 00 66 99 33 00 66 99'
'66 00 66 99 99 00 66 99 CC 00 66 99 FF 00 66 CC'
'00 00 66 CC 33 00 66 CC 99 00 66 CC CC 00 66 CC'
'FF 00 66 FF 00 00 66 FF 33 00 66 FF 99 00 66 FF'
'CC 00 CC 00 FF 00 FF 00 CC 00 99 99 00 00 99 33'
'99 00 99 00 99 00 99 00 CC 00 99 00 00 00 99 33'
'33 00 99 00 66 00 99 33 CC 00 99 00 FF 00 99 66'
'00 00 99 66 33 00 99 33 66 00 99 66 99 00 99 66'
'CC 00 99 33 FF 00 99 99 33 00 99 99 66 00 99 99'
'99 00 99 99 CC 00 99 99 FF 00 99 CC 00 00 99 CC'
'33 00 66 CC 66 00 99 CC 99 00 99 CC CC 00 99 CC'
'FF 00 99 FF 00 00 99 FF 33 00 99 CC 66 00 99 FF'
'99 00 99 FF CC 00 99 FF FF 00 CC 00 00 00 99 00'
'33 00 CC 00 66 00 CC 00 99 00 CC 00 CC 00 99 33'
'00 00 CC 33 33 00 CC 33 66 00 CC 33 99 00 CC 33'
'CC 00 CC 33 FF 00 CC 66 00 00 CC 66 33 00 99 66'
'66 00 CC 66 99 00 CC 66 CC 00 99 66 FF 00 CC 99'
'00 00 CC 99 33 00 CC 99 66 00 CC 99 99 00 CC 99'
'CC 00 CC 99 FF 00 CC CC 00 00 CC CC 33 00 CC CC'
'66 00 CC CC 99 00 CC CC CC 00 CC CC FF 00 CC FF'
'00 00 CC FF 33 00 99 FF 66 00 CC FF 99 00 CC FF'
'CC 00 CC FF FF 00 CC 00 33 00 FF 00 66 00 FF 00'
'99 00 CC 33 00 00 FF 33 33 00 FF 33 66 00 FF 33'
'99 00 FF 33 CC 00 FF 33 FF 00 FF 66 00 00 FF 66'
'33 00 CC 66 66 00 FF 66 99 00 FF 66 CC 00 CC 66'
'FF 00 FF 99 00 00 FF 99 33 00 FF 99 66 00 FF 99'
'99 00 FF 99 CC 00 FF 99 FF 00 FF CC 00 00 FF CC'
'33 00 FF CC 66 00 FF CC 99 00 FF CC CC 00 FF CC'
'FF 00 FF FF 33 00 CC FF 66 00 FF FF 99 00 FF FF'
'CC 00 66 66 FF 00 66 FF 66 00 66 FF FF 00 FF 66'
'66 00 FF 66 FF 00 FF FF 66 00 21 00 A5 00 5F 5F'
'5F 00 77 77 77 00 86 86 86 00 96 96 96 00 CB CB'
'CB 00 B2 B2 B2 00 D7 D7 D7 00 DD DD DD 00 E3 E3'
'E3 00 EA EA EA 00 F1 F1 F1 00 F8 F8 F8 00 F0 FB'
'FF 00 A4 A0 A0 00 80 80 80 00 00 00 FF 00 00 FF'
'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
'00 00 FF FF FF 00 C0 77 00 00 08 77 02 70 04 00'
'00 08 07 77 74 44 0A 77 00 04 44 47 04 77 00 04'
'44 47 04 77 00 18 47 70 00 07 00 07 00 07 77 74'
'44 47 04 77 00 04 71 77 08 44 00 06 47 77 71 00'
'0E 77 02 71 0E 77 02 71 14 77 02 70 0C 00 02 77'
'0E 70 0A 00 02 07 04 77 00 00 12 77 00 08 74 F4'
'70 00 06 77 00 10 4F 47 00 07 4F 47 00 07 12 77'
'00 06 44 77 44 00 04 77 00 06 11 17 4F 00 06 FF'
'00 08 47 77 11 17 0C 77 00 04 11 17 08 00 04 77'
'00 04 11 17 0E 00 00 08 07 77 70 78 08 88 02 80'
'10 77 02 0B 08 FB 02 07 04 77 00 00 0A 77 04 44'
'04 77 00 04 74 47 0A 77 02 44 06 77 02 44 06 77'
'00 14 47 70 00 07 00 07 00 07 77 44 06 77 02 71'
'04 11 02 4F 06 FF 00 04 47 71 04 11 0A 77 02 71'
'04 11 02 0F 04 FF 00 06 F0 77 71 00 04 11 02 0F'
'0C BF 00 06 07 77 70 00 0A 77 00 08 80 77 70 77'
'08 07 00 04 70 0F 08 BF 02 07 04 77 00 00 0A 77'
'00 04 4F F4 34 77 06 44 04 77 00 06 71 77 4F 00'
'06 FF 00 0A 47 77 71 77 70 00 08 00 00 08 77 71'
'77 0F 04 FF 02 F0 04 77 00 06 71 77 0B 00 0C FB'
'00 08 07 77 70 78 08 88 02 80 10 77 02 0B 08 FB'
'02 07 04 77 00 00 0A 77 00 04 4F F4 22 77 00 18'
'47 70 00 07 00 07 00 07 77 44 77 44 04 77 00 06'
'71 77 4F 00 06 FF 00 08 47 77 71 77 08 44 00 0A'
'40 77 71 77 0F 00 04 FF 00 10 F0 44 47 71 77 0F'
'BF B0 04 00 00 0A 0F BF 07 77 70 00 0A 77 00 08'
'80 77 70 77 08 07 00 04 70 0F 08 BF 00 06 07 70'
'77 00 00 00 0A 77 00 04 4F 44 0A 77 00 04 44 47'
'04 77 00 04 44 47 04 77 00 04 44 47 16 77 00 06'
'74 44 47 00 04 77 00 06 71 77 4F 00 06 FF 00 0A'
'47 77 71 77 4F 00 04 7F 00 0C 77 40 77 71 77 0F'
'04 FF 00 10 F0 BF 47 71 77 0B FB F0 08 FB 04 07'
'00 04 70 78 06 88 00 04 22 80 10 77 02 0B 08 FB'
'04 07 02 77 00 00 02 70 04 00 00 08 07 77 44 47'
'0A 77 00 28 4F 47 00 07 4F 47 00 07 4F 47 00 07'
'47 70 00 07 00 07 00 07 0C 77 00 06 71 77 4F 00'
'06 FF 00 0A 47 77 71 77 47 00 04 F1 00 0C 17 40'
'77 71 77 0F 04 FF 00 10 F0 FB 47 71 77 0F BF B0'
'08 BF 02 07 06 70 06 88 00 08 AA 80 77 70 06 77'
'04 07 00 04 70 0F 08 BF 02 00 04 77 00 00 18 77'
'02 44 06 77 02 44 06 77 02 44 22 77 00 06 71 77'
'4F 00 06 FF 00 0A 47 77 71 77 4F 00 04 71 00 0E'
'7F 40 77 71 77 0F FF 00 04 00 00 0C BF 47 71 77'
'0B F0 04 00 06 FB 00 08 07 77 00 07 08 77 00 08'
'70 11 77 11 0A 77 0A 00 02 77 04 07 00 00 02 77'
'04 44 2A 77 00 14 47 70 00 07 00 07 00 07 77 74'
'04 44 04 77 00 04 71 77 08 44 00 30 47 77 71 77'
'47 11 F7 17 40 77 71 77 0F FF 0F 0B FB 47 71 77'
'0F BF 00 0F 06 BF 00 06 07 00 77 00 0C 00 00 06'
'71 11 17 00 0C 70 04 BF 02 07 04 70 04 77 00 00'
'00 06 77 4F F4 00 3C 77 00 06 44 77 44 00 04 77'
'02 71 0E 77 00 06 71 77 4F 00 04 71 00 10 1F 40'
'77 71 77 0F FF 00 04 BF 00 0C 47 71 77 0B FB F0'
'08 FB 00 04 07 77 04 07 0C 77 02 11 0E 77 04 00'
'02 77 06 07 02 77 00 00 00 06 77 4F F4 00 0A 77'
'00 04 74 44 0C 77 00 04 44 47 04 77 00 04 44 47'
'04 77 10 44 00 08 77 44 77 44 04 77 02 71 06 77'
'00 0E 74 44 47 77 71 77 47 00 06 F7 00 08 40 77'
'71 77 04 00 00 0E 0B F4 44 47 71 77 0F 00 0C BF'
'02 07 06 70 0A 77 00 06 71 11 17 00 10 77 02 70'
'04 77 00 04 70 77 00 00 00 06 77 4F 44 00 0A 77'
'00 08 74 F4 70 00 08 77 00 10 4F 47 00 07 4F 47'
'00 07 12 77 02 74 04 44 04 77 02 71 06 77 00 0C'
'74 FF 47 77 71 77 08 44 00 06 40 77 71 00 04 77'
'00 04 74 BF 04 B4 00 06 77 71 77 00 0E 00 00 04'
'77 07 04 77 02 07 08 77 00 06 11 77 11 00 14 77'
'02 07 04 77 00 00 00 06 77 44 47 00 0A 77 00 04'
'74 47 0C 77 02 44 06 77 02 44 08 77 00 0E 70 00'
'07 00 07 00 07 00 06 77 02 44 04 77 02 71 06 77'
'00 0C 74 FF 47 77 71 77 04 4C 00 0A CC 4C 40 77'
'71 00 04 77 00 10 74 FB F4 47 77 71 77 70 04 BF'
'02 B0 0A 77 02 70 2C 77 00 00 42 77 00 06 74 44'
'47 00 04 77 02 71 06 77 00 0C 74 44 47 77 71 77'
'08 44 00 06 47 77 71 00 04 77 02 74 04 44 04 77'
'02 71 04 77 04 00 02 07 32 77 02 07 04 77 00 00'
'92 77 02 70 2C 77 00 00 00 01'
'00 00 FF FF FF 00 07 07 07 07 07 07 07 07 07 07'
'07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07'
'07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07'
'07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07'
'07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07'
'07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07'
'07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07'
'07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07'
'07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07'
'07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07'
'07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07'
'07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07'
'07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 00'
'00 00 00 00 00 07 07 07 07 04 04 04 07 07 07 07'
'07 07 07 07 07 07 07 07 00 00 00 07 07 07 07 07'
'07 07 07 07 07 07 07 00 00 07 07 07 07 07 07 07'
'07 07 07 07 07 07 07 07 07 04 04 04 04 07 07 07'
'07 07 07 01 07 07 04 04 04 04 04 04 04 04 04 07'
'07 07 07 01 07 07 07 07 07 07 07 07 07 07 07 07'
'07 07 07 01 07 07 07 07 07 07 07 07 07 07 07 07'
'07 07 07 01 07 07 07 07 92 92 92 92 92 92 92 92'
'92 92 92 92 92 07 07 07 07 00 00 00 00 00 00 00'
'00 00 00 00 00 00 07 07 07 00 07 00 07 00 07 00'
'07 00 07 00 07 00 07 07 6D 6D 6D 6D 6D 6D 6D 6D'
'6D 6D 6D 6D 6D 07 07 07 07 07 07 07 07 07 07 07'
'07 07 07 07 07 07 07 07 07 04 FF 04 07 00 00 00'
'07 07 07 07 07 07 07 07 FF FF 00 07 00 00 00 00'
'00 00 07 07 07 07 07 FF 00 07 00 00 00 00 07 00'
'00 07 00 00 00 07 07 07 04 04 07 07 04 04 07 07'
'07 07 01 01 01 07 04 FF FF FF FF FF FF FF 04 07'
'07 07 01 01 01 07 07 07 07 07 07 07 07 07 07 07'
'07 07 01 01 01 07 00 00 00 00 00 00 00 00 07 07'
'07 07 01 01 01 07 07 00 00 00 00 00 00 00 00 00'
'00 00 00 00 92 07 07 07 07 00 07 EC EC EC EC EC'
'EC EC EC EC EC 00 07 07 07 07 07 07 07 07 07 07'
'07 07 07 07 07 07 07 00 00 00 00 00 00 00 00 00'
'00 00 00 00 6D 07 07 07 07 07 07 07 07 07 07 07'
'04 04 04 04 07 07 07 07 07 04 04 07 07 07 07 07'
'07 07 07 07 07 07 07 07 FF FF 00 07 00 00 00 00'
'00 00 07 07 07 07 07 FF 00 07 07 07 07 07 07 07'
'07 07 07 07 07 07 07 07 04 04 07 07 07 07 07 07'
'07 01 01 01 01 01 04 FF FF FF FF FF FF FF 04 07'
'07 01 01 01 01 01 07 07 07 07 07 07 07 07 07 07'
'07 01 01 01 01 01 00 FF FF FF FF FF FF 00 07 07'
'07 01 01 01 01 01 07 00 FF DD DD DD DD D6 D6 D6'
'D6 D6 D6 00 92 07 07 07 07 00 07 07 07 07 07 07'
'07 07 07 07 EC 00 07 07 07 00 07 07 00 07 00 07'
'00 07 00 07 07 00 07 00 FF DD DD DD DD D6 D6 D6'
'D6 D6 D6 00 6D 07 07 07 07 07 07 07 07 07 07 07'
'04 FF FF 04 07 07 07 07 07 07 07 07 07 07 07 07'
'07 07 07 07 07 07 07 07 FF FF 00 07 07 07 07 07'
'07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07'
'07 07 07 07 07 07 07 07 04 04 04 04 04 04 07 07'
'07 07 07 01 07 07 04 FF FF FF FF FF FF FF 04 07'
'07 07 07 01 07 07 07 00 00 00 00 00 00 00 00 00'
'07 07 07 01 07 07 00 FF FF FF FF FF FF 00 07 07'
'07 07 07 01 07 07 07 00 FF DD DD DD DD DD DD D6'
'D6 D6 D6 00 92 07 07 07 07 00 07 EC EC EC EC EC'
'EC EC EC EC EC 00 07 07 07 07 07 07 07 07 07 07'
'07 07 07 07 07 07 07 00 FF DD DD DD DD DD DD D6'
'D6 D6 D6 00 6D 07 07 07 07 07 07 07 07 07 07 07'
'04 FF FF 04 07 07 07 07 07 07 07 07 07 07 07 07'
'07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07'
'07 07 07 07 07 07 07 00 00 07 07 07 07 07 07 07'
'07 07 07 07 07 07 07 07 04 04 07 07 04 04 07 07'
'07 07 07 01 07 07 04 FF FF FF FF FF FF FF 04 07'
'07 07 07 01 07 07 04 04 04 04 04 04 04 04 04 00'
'07 07 07 01 07 07 00 FF FF FF FF FF FF 00 04 04'
'04 07 07 01 07 07 07 00 FF DD DD DD DD DD DD DD'
'D6 D6 D6 00 92 07 07 07 07 00 07 07 07 07 07 07'
'07 07 07 07 EC 00 07 07 07 00 07 07 00 07 00 07'
'00 07 00 07 07 00 07 00 FF DD DD DD DD DD DD DD'
'D6 D6 D6 00 6D 07 07 07 07 07 07 07 07 07 07 07'
'04 FF 04 04 07 07 07 07 07 07 07 07 07 07 04 04'
'04 07 07 07 07 07 07 07 00 00 00 07 07 07 07 07'
'07 07 07 07 07 07 07 FF 00 07 00 00 00 00 07 00'
'00 07 00 00 00 07 07 07 07 04 04 04 04 07 07 07'
'07 07 07 01 07 07 04 FF FF FF FF FF FF FF 04 07'
'07 07 07 01 07 07 04 FF 07 FF 07 FF 07 07 04 00'
'07 07 07 01 07 07 00 FF FF FF FF FF FF 00 FB FF'
'04 07 07 01 07 07 07 00 FF DD DD DD DD 1F 1F 1F'
'D6 D6 D6 00 92 07 00 07 07 00 07 EC EC EC EC EC'
'EC EC 02 02 EC 00 07 07 07 07 07 07 07 07 07 07'
'07 07 07 07 07 07 07 00 FF DD DD DD DD DD DD DD'
'D6 FB D6 00 6D 07 07 00 00 00 00 00 00 07 07 07'
'04 04 04 07 07 07 07 07 07 07 07 07 07 07 04 FF'
'04 07 00 00 00 07 07 07 FF FF 00 07 00 00 00 00'
'00 00 07 07 07 07 07 FF 00 07 07 07 07 07 07 07'
'07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07'
'07 07 07 01 07 07 04 FF FF FF FF FF FF FF 04 07'
'07 07 07 01 07 07 04 07 FF 01 FF 01 01 07 04 00'
'07 07 07 01 07 07 00 FF FF FF FF FF FF 00 FF FB'
'04 07 07 01 07 07 07 00 FF DD DD DD DD DD DD DD'
'1F D6 D6 00 92 07 07 00 07 00 07 00 EC EC EC EC'
'EC EC FA FA EC 00 07 07 07 00 07 07 07 07 07 07'
'00 07 00 07 07 00 07 00 FF DD DD DD DD DD DD DD'
'D6 FB D6 00 6D 07 07 07 07 07 07 07 07 07 07 07'
'07 07 07 07 07 07 07 07 07 07 07 07 07 07 04 04'
'07 07 07 07 07 07 07 07 FF FF 00 07 00 00 00 00'
'00 00 07 07 07 07 07 07 07 07 07 07 07 07 07 07'
'07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07'
'07 07 07 01 07 07 04 FF FF FF FF FF FF FF 04 07'
'07 07 07 01 07 07 04 FF 07 01 07 01 07 FF 04 00'
'07 07 07 01 07 07 00 FF FF FF 00 00 00 00 FB FF'
'04 07 07 01 07 07 07 00 FF DD DD DD DD DD DD DD'
'DD 1F D6 00 92 07 07 07 00 00 00 07 07 07 07 07'
'07 07 07 07 07 00 01 01 07 07 01 01 07 07 07 07'
'07 07 07 07 07 07 07 00 FF DD DD DD DD DD FB DD'
'DD FB D6 92 FB 07 07 07 04 04 04 04 07 07 07 07'
'07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07'
'07 07 07 07 07 07 07 07 FF FF 00 07 07 07 07 07'
'07 07 07 07 07 07 07 00 00 07 07 07 07 07 07 07'
'07 07 07 07 07 07 07 07 07 04 04 04 04 04 07 07'
'07 07 07 01 07 07 04 04 04 04 04 04 04 04 04 07'
'07 07 07 01 07 07 04 07 01 01 FF 07 01 07 04 00'
'07 07 07 01 07 07 00 FF FF FF 00 FF 00 FB FF FB'
'04 07 07 01 07 07 07 00 FF FF FF FF FF FF FF FF'
'FF 1F C3 00 07 07 00 00 07 07 00 00 00 00 00 00'
'00 00 00 00 00 00 07 01 01 01 01 07 07 00 07 00'
'07 00 07 00 07 00 07 00 FF FF FF FF FF FF FF FB'
'FF FB C3 FB 07 07 07 07 04 FF FF 04 07 07 07 07'
'07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07'
'07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07'
'07 07 07 07 07 07 07 FF 00 07 00 00 00 00 07 00'
'00 07 00 00 00 07 07 07 04 04 07 07 04 04 07 07'
'07 07 07 01 07 07 07 07 07 07 07 07 07 07 07 07'
'07 07 07 01 07 07 04 FF 07 01 07 01 01 FF 04 00'
'07 07 07 01 07 07 00 FF FF FF 00 00 FB FF FB FF'
'04 07 07 01 07 07 07 00 D6 D6 D6 D6 D6 D6 D6 00'
'00 1F 00 00 07 07 07 07 00 07 00 07 07 07 07 07'
'07 07 07 07 07 07 07 07 01 01 07 07 07 07 07 07'
'07 07 07 07 07 07 07 00 D6 D6 D6 D6 D6 D6 D6 92'
'FB FB FB 92 92 07 07 07 04 FF FF 04 07 07 07 07'
'07 07 07 07 07 07 07 04 04 04 07 07 07 07 07 07'
'07 07 07 07 07 07 07 07 00 00 00 07 07 07 07 07'
'07 07 07 07 07 07 07 FF 00 07 07 07 07 07 07 07'
'07 07 07 07 07 07 07 07 04 04 07 07 04 04 07 07'
'07 07 07 01 07 07 07 07 07 07 07 04 04 04 04 07'
'07 07 07 01 07 07 04 07 FF 07 FF 07 FF 07 04 00'
'07 07 07 01 07 07 00 00 00 00 00 FB FF 04 04 04'
'04 07 07 01 07 07 07 07 00 D6 D6 D6 D6 D6 00 07'
'07 1F 07 07 07 07 07 00 07 00 07 00 07 07 07 07'
'07 07 07 07 07 07 07 01 01 01 01 07 07 07 07 07'
'07 07 07 07 07 07 07 07 00 D6 D6 D6 D6 FB FB FB'
'FB FB FB FB FB FB 07 07 04 FF 04 04 07 07 07 07'
'07 07 07 07 07 07 07 04 FF 04 07 00 00 00 07 07'
'07 07 07 07 07 07 07 07 FF FF 00 07 00 00 00 00'
'00 00 07 07 07 07 07 07 07 07 07 07 07 07 07 07'
'07 07 07 07 07 07 07 07 07 04 04 04 04 04 07 07'
'07 07 07 01 07 07 07 07 07 07 07 04 FF FF 04 07'
'07 07 07 01 07 07 04 04 04 04 04 04 04 04 04 00'
'07 07 07 01 07 07 07 07 07 04 FB FF FB 04 FB 04'
'07 07 07 01 07 07 07 07 07 00 00 00 00 00 07 07'
'07 1F 07 07 07 07 00 07 07 07 07 07 00 07 07 07'
'07 07 07 07 07 07 01 01 07 07 01 01 07 07 07 07'
'07 07 07 07 07 07 07 07 07 00 00 00 00 00 07 92'
'FB FB FB 92 07 07 07 07 04 04 04 07 07 07 07 07'
'07 07 07 07 07 07 07 04 04 07 07 07 07 07 07 07'
'07 07 07 07 07 07 07 07 FF FF 00 07 00 00 00 00'
'00 00 07 07 07 07 92 92 92 92 92 92 92 92 92 92'
'92 92 92 92 92 92 07 07 07 07 07 07 04 04 07 07'
'07 07 07 01 07 07 07 07 07 07 07 04 FF FF 04 07'
'07 07 07 01 07 07 04 FC 04 FC FC FC 04 FC 04 00'
'07 07 07 01 07 07 07 07 07 04 FF FB FF 04 04 07'
'07 07 07 01 07 07 07 07 07 07 07 07 07 07 07 1F'
'1F 1F 1F 1F 07 07 07 07 07 00 07 07 07 07 07 07'
'07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07'
'07 07 07 07 07 07 07 07 07 07 07 07 07 07 FF FB'
'07 FB 07 FB 92 07 07 07 07 07 07 07 07 07 07 07'
'07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07'
'07 07 07 07 07 07 07 07 FF FF 00 07 07 07 07 07'
'07 07 07 07 07 07 92 FF FF 92 FF FF FF FF 92 FF'
'FF 92 FF FF FF 92 07 07 07 04 04 04 04 07 07 07'
'07 07 07 01 07 07 07 07 07 07 07 04 04 04 04 07'
'07 07 07 01 07 07 04 04 04 04 04 04 04 04 04 07'
'07 07 07 01 07 07 07 07 07 04 04 04 04 04 07 07'
'07 07 07 01 07 07 07 07 07 07 07 07 07 07 07 07'
'1F 1F 1F 07 07 07 07 07 07 07 07 07 07 07 07 07'
'07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07'
'07 07 07 07 07 07 07 07 07 07 07 07 07 07 FB 07'
'07 FB 07 07 FB 07 07 07 07 07 07 07 07 07 07 07'
'07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07'
'07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07'
'07 07 07 07 07 07 92 92 92 92 92 92 92 92 92 92'
'92 92 92 92 92 92 07 07 07 07 07 07 07 07 07 07'
'07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07'
'07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07'
'07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07'
'07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07'
'07 1F 07 07 07 07 07 07 07 00 07 07 07 07 07 07'
'07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07'
'07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07'
'07 FB 07 07 07 07'
}
...
...
include/prsht.h
View file @
08afc1a5
...
...
@@ -201,7 +201,11 @@ DECL_WINELIB_TYPE_AW(LPFNPSPCALLBACK)
#define PSP_HASHELP 0x0020
#define PSP_USEREFPARENT 0x0040
#define PSP_USECALLBACK 0x0080
#define PSP_PREMATURE 0x0400
#define PSP_HIDEHEADER 0x00000800
#define PSP_USEHEADERTITLE 0x00001000
#define PSP_USEHEADERSUBTITLE 0x00002000
#define PSPCB_RELEASE 1
#define PSPCB_CREATE 2
...
...
@@ -218,10 +222,26 @@ DECL_WINELIB_TYPE_AW(LPFNPSPCALLBACK)
#define PSH_HASHELP 0x0200
#define PSH_MODELESS 0x0400
#define PSH_RTLREADING 0x0800
#define PSH_WIZARDCONTEXTHELP 0x00001000
#define PSH_WIZARD97 0x00002000
#define PSH_WATERMARK 0x00008000
#define PSH_USEHBMWATERMARK 0x00010000
#define PSH_USEHPLWATERMARK 0x00020000
#define PSH_STRETCHWATERMARK 0x00040000
#define PSH_HEADER 0x00080000
#define PSH_USEHBMHEADER 0x00100000
#define PSH_USEPAGELANG 0x00200000
#define PSCB_INITIALIZED 1
#define PSCB_PRECREATE 2
typedef
struct
_PSHNOTIFY
{
NMHDR
hdr
;
LPARAM
lParam
;
}
PSHNOTIFY
,
*
LPPSHNOTIFY
;
#define PSN_FIRST (0U-200U)
#define PSN_LAST (0U-299U)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment