Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
wine
Manage
Activity
Members
Labels
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container Registry
Model registry
Operate
Terraform modules
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Johnny Cai
wine
Commits
69036e99
Commit
69036e99
authored
24 years ago
by
Gerard Patel
Committed by
Alexandre Julliard
24 years ago
Browse files
Options
Downloads
Patches
Plain Diff
Fixed bug when changing drives in 16 bit style dialog for a 32 bit app
+ miscellaneous fixes.
parent
56b68feb
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
dlls/commdlg/filedlg.c
+275
-185
275 additions, 185 deletions
dlls/commdlg/filedlg.c
with
275 additions
and
185 deletions
dlls/commdlg/filedlg.c
+
275
−
185
View file @
69036e99
...
...
@@ -315,17 +315,23 @@ static BOOL FILEDLG_CallWindowProc(LFSPRIVATE lfs, UINT wMsg, WPARAM wParam,
/***********************************************************************
* FILEDLG_ScanDir [internal]
*/
static
BOOL
FILEDLG_ScanDir
(
HWND
hWnd
,
LPWSTR
newPath
,
BOOL
bChgDir
)
static
BOOL
FILEDLG_ScanDir
(
HWND
hWnd
,
LPWSTR
newPath
)
{
WCHAR
buffer
[
BUFFILE
];
HWND
hdlg
;
HWND
hdlg
,
hdlgDir
;
LRESULT
lRet
=
TRUE
;
HCURSOR
hCursorWait
,
oldCursor
;
if
(
bChgDir
)
if
(
!
SetCurrentDirectoryW
(
newPath
))
return
FALSE
;
if
(
!
SetCurrentDirectoryW
(
newPath
))
return
FALSE
;
lstrcpynW
(
buffer
,
newPath
,
sizeof
(
buffer
));
/* get the list of spec files */
GetDlgItemTextW
(
hWnd
,
edt1
,
buffer
,
sizeof
(
buffer
));
hCursorWait
=
LoadCursorA
(
NULL
,
IDC_WAITA
);
oldCursor
=
SetCursor
(
hCursorWait
);
/* list of files */
if
((
hdlg
=
GetDlgItem
(
hWnd
,
lst1
))
!=
0
)
{
WCHAR
*
scptr
;
/* ptr on semi-colon */
...
...
@@ -336,7 +342,7 @@ static BOOL FILEDLG_ScanDir(HWND hWnd, LPWSTR newPath, BOOL bChgDir)
while
(
filter
)
{
scptr
=
strchrW
(
filter
,
';'
);
if
(
scptr
)
*
scptr
=
0
;
while
(
*
filter
==
' '
)
filter
++
;
while
(
*
filter
==
' '
)
filter
++
;
TRACE
(
"Using file spec %s
\n
"
,
debugstr_w
(
filter
));
if
(
SendMessageW
(
hdlg
,
LB_DIR
,
0
,
(
LPARAM
)
filter
)
==
LB_ERR
)
return
FALSE
;
...
...
@@ -344,9 +350,15 @@ static BOOL FILEDLG_ScanDir(HWND hWnd, LPWSTR newPath, BOOL bChgDir)
filter
=
(
scptr
)
?
(
scptr
+
1
)
:
0
;
}
}
/* list of directories */
strcpyW
(
buffer
,
FILE_star
);
return
DlgDirListW
(
hWnd
,
buffer
,
lst2
,
stc1
,
DDL_EXCLUSIVE
|
DDL_DIRECTORY
);
if
((
hdlgDir
=
GetDlgItem
(
hWnd
,
lst2
))
!=
0
)
{
lRet
=
DlgDirListW
(
hWnd
,
buffer
,
lst2
,
stc1
,
DDL_EXCLUSIVE
|
DDL_DIRECTORY
);
}
SetCursor
(
oldCursor
);
return
lRet
;
}
...
...
@@ -586,9 +598,9 @@ static LONG FILEDLG_WMInitDialog(HWND hWnd, WPARAM wParam, LPARAM lParam)
}
else
*
tmpstr
=
0
;
if
(
!
FILEDLG_ScanDir
(
hWnd
,
tmpstr
,
TRUE
))
{
if
(
!
FILEDLG_ScanDir
(
hWnd
,
tmpstr
))
{
*
tmpstr
=
0
;
if
(
!
FILEDLG_ScanDir
(
hWnd
,
tmpstr
,
TRUE
))
if
(
!
FILEDLG_ScanDir
(
hWnd
,
tmpstr
))
WARN
(
"Couldn't read initial directory %s!
\n
"
,
debugstr_w
(
tmpstr
));
}
/* select current drive in combo 2, omit missing drives */
...
...
@@ -608,10 +620,11 @@ static LONG FILEDLG_WMInitDialog(HWND hWnd, WPARAM wParam, LPARAM lParam)
* FILEDLG_UpdateResult [internal]
* update the displayed file name (with path)
*/
void
FILEDLG_UpdateResult
(
LFSPRIVATE
lfs
,
WCHAR
*
tmpstr
,
WCHAR
*
tmpstr2
)
void
FILEDLG_UpdateResult
(
LFSPRIVATE
lfs
,
WCHAR
*
tmpstr
)
{
int
lenstr2
;
LPOPENFILENAMEW
ofnW
=
lfs
->
ofnW
;
WCHAR
tmpstr2
[
BUFFILE
];
GetCurrentDirectoryW
(
BUFFILE
,
tmpstr2
);
lenstr2
=
lstrlenW
(
tmpstr2
);
...
...
@@ -671,9 +684,10 @@ void FILEDLG_UpdateFileTitle(LFSPRIVATE lfs)
/***********************************************************************
* FILEDLG_DirListDblClick [internal]
*/
static
LRESULT
FILEDLG_DirListDblClick
(
HWND
hWnd
,
LFSPRIVATE
lfs
)
static
LRESULT
FILEDLG_DirListDblClick
(
LFSPRIVATE
lfs
)
{
LONG
lRet
;
HWND
hWnd
=
lfs
->
hwnd
;
LPWSTR
pstr
;
WCHAR
tmpstr
[
BUFFILE
];
...
...
@@ -693,8 +707,7 @@ static LRESULT FILEDLG_DirListDblClick(HWND hWnd, LFSPRIVATE lfs)
}
strcatW
(
tmpstr
,
FILE_bslash
);
/* directory *has* to be changed before notifying the hook */
SetCurrentDirectoryW
(
tmpstr
);
FILEDLG_ScanDir
(
hWnd
,
tmpstr
);
/* notify the app */
if
(
lfs
->
hook
)
{
...
...
@@ -702,201 +715,278 @@ static LRESULT FILEDLG_DirListDblClick(HWND hWnd, LFSPRIVATE lfs)
MAKELONG
(
lRet
,
CD_LBSELCHANGE
)))
return
TRUE
;
}
lRet
=
SendDlgItemMessageW
(
hWnd
,
cmb1
,
CB_GETCURSEL
,
0
,
0
);
if
(
lRet
==
LB_ERR
)
return
TRUE
;
pstr
=
(
LPWSTR
)
SendDlgItemMessageW
(
hWnd
,
cmb1
,
CB_GETITEMDATA
,
lRet
,
0
);
TRACE
(
"Selected filter : %s
\n
"
,
debugstr_w
(
pstr
));
SetDlgItemTextW
(
hWnd
,
edt1
,
pstr
);
FILEDLG_ScanDir
(
hWnd
,
tmpstr
,
FALSE
);
return
TRUE
;
}
/***********************************************************************
* FILEDLG_WMCommand [internal]
* FILEDLG_FileListSelect [internal]
* called when a new item is picked in the file list
*/
BOOL
in_update
=
FALSE
;
static
LRESULT
FILEDLG_WMCommand
(
HWND
hWnd
,
LPARAM
lParam
,
UINT
notification
,
UINT
control
,
LFSPRIVATE
lfs
)
static
LRESULT
FILEDLG_FileListSelect
(
LFSPRIVATE
lfs
)
{
LONG
lRet
;
OPENFILENAMEW
ofn2
;
LPOPENFILENAMEW
ofnW
=
lfs
->
ofnW
;
WCHAR
tmpstr
[
BUFFILE
],
tmpstr2
[
BUFFILE
];
LPWSTR
pstr
,
pstr2
;
LONG
lRet
;
HWND
hWnd
=
lfs
->
hwnd
;
LPWSTR
pstr
;
switch
(
control
)
lRet
=
SendDlgItemMessageW
(
hWnd
,
lst1
,
LB_GETCURSEL16
,
0
,
0
);
if
(
lRet
==
LB_ERR
)
return
TRUE
;
/* set the edit control to the choosen file */
if
((
pstr
=
HeapAlloc
(
GetProcessHeap
(),
0
,
BUFFILEALLOC
)))
{
case
lst1
:
/* file list */
FILEDLG_StripEditControl
(
hWnd
);
if
(
notification
==
LBN_DBLCLK
)
goto
almost_ok
;
/* notify the app */
lRet
=
SendDlgItemMessageW
(
hWnd
,
lst1
,
LB_GETCURSEL16
,
0
,
0
);
if
(
lRet
==
LB_ERR
)
return
TRUE
;
if
((
pstr
=
HeapAlloc
(
GetProcessHeap
(),
0
,
BUFFILEALLOC
)))
{
SendDlgItemMessageW
(
hWnd
,
lst1
,
LB_GETTEXT
,
lRet
,
(
LPARAM
)
pstr
);
SetDlgItemTextW
(
hWnd
,
edt1
,
pstr
);
HeapFree
(
GetProcessHeap
(),
0
,
pstr
);
}
if
(
lfs
->
hook
)
FILEDLG_CallWindowProc
(
lfs
,
lfs
->
lbselchstring
,
control
,
MAKELONG
(
lRet
,
CD_LBSELCHANGE
));
/* FIXME: for OFN_ALLOWMULTISELECT we need CD_LBSELSUB, CD_SELADD, CD_LBSELNOITEMS */
return
TRUE
;
case
lst2
:
/* directory list */
FILEDLG_StripEditControl
(
hWnd
);
if
(
notification
==
LBN_DBLCLK
)
{
return
FILEDLG_DirListDblClick
(
hWnd
,
lfs
);
}
return
TRUE
;
SendDlgItemMessageW
(
hWnd
,
lst1
,
LB_GETTEXT
,
lRet
,
(
LPARAM
)
pstr
);
SetDlgItemTextW
(
hWnd
,
edt1
,
pstr
);
HeapFree
(
GetProcessHeap
(),
0
,
pstr
);
}
if
(
lfs
->
hook
)
{
FILEDLG_CallWindowProc
(
lfs
,
lfs
->
lbselchstring
,
lst1
,
MAKELONG
(
lRet
,
CD_LBSELCHANGE
));
}
/* FIXME: for OFN_ALLOWMULTISELECT we need CD_LBSELSUB, CD_SELADD,
CD_LBSELNOITEMS */
return
TRUE
;
}
case
cmb1
:
/* file type drop list */
if
(
notification
==
CBN_SELCHANGE
)
{
*
tmpstr
=
0
;
goto
reset_scan
;
/***********************************************************************
* FILEDLG_TestPath [internal]
* before accepting the file name, test if it includes wild cards
* tries to scan the directory and returns TRUE if no error.
*/
static
LRESULT
FILEDLG_TestPath
(
LFSPRIVATE
lfs
,
LPWSTR
path
)
{
HWND
hWnd
=
lfs
->
hwnd
;
LPWSTR
pBeginFileName
,
pstr2
;
WCHAR
tmpstr2
[
BUFFILE
];
pBeginFileName
=
strrchrW
(
path
,
'\\'
);
if
(
pBeginFileName
==
NULL
)
pBeginFileName
=
strrchrW
(
path
,
':'
);
if
(
strchrW
(
path
,
'*'
)
!=
NULL
||
strchrW
(
path
,
'?'
)
!=
NULL
)
{
/* edit control contains wildcards */
if
(
pBeginFileName
!=
NULL
)
{
lstrcpynW
(
tmpstr2
,
pBeginFileName
+
1
,
BUFFILE
);
*
(
pBeginFileName
+
1
)
=
0
;
}
return
TRUE
;
case
chx1
:
return
TRUE
;
case
pshHelp
:
return
TRUE
;
case
cmb2
:
/* disk drop list */
FILEDLG_StripEditControl
(
hWnd
);
lRet
=
SendDlgItemMessageW
(
hWnd
,
cmb2
,
CB_GETCURSEL
,
0
,
0L
);
if
(
lRet
==
LB_ERR
)
return
0
;
pstr
=
HeapAlloc
(
GetProcessHeap
(),
0
,
BUFFILEALLOC
);
SendDlgItemMessageW
(
hWnd
,
cmb2
,
CB_GETLBTEXT
,
lRet
,
(
LPARAM
)
pstr
);
wsprintfW
(
tmpstr
,
FILE_specc
,
pstr
[
2
]);
HeapFree
(
GetProcessHeap
(),
0
,
pstr
);
if
(
notification
!=
CBN_SELCHANGE
)
return
TRUE
;
/* on entry tmpstr points to the new path to scan */
reset_scan:
lRet
=
SendDlgItemMessageW
(
hWnd
,
cmb1
,
CB_GETCURSEL
,
0
,
0
);
if
(
lRet
==
LB_ERR
)
return
TRUE
;
pstr
=
(
LPWSTR
)
SendDlgItemMessageW
(
hWnd
,
cmb1
,
CB_GETITEMDATA
,
lRet
,
0
);
TRACE
(
"Selected filter : %s
\n
"
,
debugstr_w
(
pstr
));
SetDlgItemTextW
(
hWnd
,
edt1
,
pstr
);
FILEDLG_ScanDir
(
hWnd
,
tmpstr
,
TRUE
);
in_update
=
TRUE
;
case
IDOK
:
almost_ok:
ofn2
=
*
ofnW
;
/* for later restoring */
/* get current file name */
GetDlgItemTextW
(
hWnd
,
edt1
,
tmpstr
,
sizeof
(
tmpstr
)
);
pstr
=
strrchrW
(
tmpstr
,
'\\'
);
if
(
pstr
==
NULL
)
pstr
=
strrchrW
(
tmpstr
,
':'
);
if
(
strchrW
(
tmpstr
,
'*'
)
!=
NULL
||
strchrW
(
tmpstr
,
'?'
)
!=
NULL
)
else
{
/* edit control contains wildcards */
if
(
pstr
!=
NULL
)
{
lstrcpynW
(
tmpstr2
,
pstr
+
1
,
BUFFILE
);
*
(
pstr
+
1
)
=
0
;
}
else
{
strcpyW
(
tmpstr2
,
tmpstr
);
*
tmpstr
=
0
;
}
TRACE
(
"tmpstr=%s, tmpstr2=%s
\n
"
,
debugstr_w
(
tmpstr
),
debugstr_w
(
tmpstr2
));
SetDlgItemTextW
(
hWnd
,
edt1
,
tmpstr2
);
FILEDLG_ScanDir
(
hWnd
,
tmpstr
,
TRUE
);
return
TRUE
;
}
/* no wildcards, we might have a directory or a filename */
/* try appending a wildcard and reading the directory */
pstr2
=
tmpstr
+
lstrlenW
(
tmpstr
);
if
(
pstr
==
NULL
||
*
(
pstr
+
1
)
!=
0
)
strcatW
(
tmpstr
,
FILE_bslash
);
lRet
=
SendDlgItemMessageW
(
hWnd
,
cmb1
,
CB_GETCURSEL
,
0
,
0
);
if
(
lRet
==
LB_ERR
)
return
TRUE
;
ofnW
->
nFilterIndex
=
lRet
+
1
;
TRACE
(
"ofn->nFilterIndex=%ld
\n
"
,
ofnW
->
nFilterIndex
);
lstrcpynW
(
tmpstr2
,
FILEDLG_GetFileType
(
ofnW
->
lpstrCustomFilter
,
(
LPWSTR
)
ofnW
->
lpstrFilter
,
lRet
),
sizeof
(
tmpstr2
));
SetDlgItemTextW
(
hWnd
,
edt1
,
tmpstr2
);
if
(
!
in_update
)
{
/* if ScanDir succeeds, we have changed the directory */
if
(
FILEDLG_ScanDir
(
hWnd
,
tmpstr
,
TRUE
))
return
TRUE
;
}
/* if not, this must be a filename */
*
pstr2
=
0
;
/* remove the wildcard added before */
strcpyW
(
tmpstr2
,
path
);
*
path
=
0
;
}
if
(
pstr
!=
NULL
)
{
/* strip off the pathname */
*
pstr
=
0
;
SetDlgItemTextW
(
hWnd
,
edt1
,
pstr
+
1
);
lstrcpynW
(
tmpstr2
,
pstr
+
1
,
sizeof
(
tmpstr2
)
);
/* Should we MessageBox() if this fails? */
if
(
!
FILEDLG_ScanDir
(
hWnd
,
tmpstr
,
TRUE
))
return
TRUE
;
strcpyW
(
tmpstr
,
tmpstr2
);
}
else
SetDlgItemTextW
(
hWnd
,
edt1
,
tmpstr
);
FILEDLG_UpdateResult
(
lfs
,
tmpstr
,
tmpstr2
);
if
(
in_update
)
{
if
(
lfs
->
hook
)
TRACE
(
"path=%s, tmpstr2=%s
\n
"
,
debugstr_w
(
path
),
debugstr_w
(
tmpstr2
));
SetDlgItemTextW
(
hWnd
,
edt1
,
tmpstr2
);
FILEDLG_ScanDir
(
hWnd
,
path
);
return
FALSE
;
}
/* no wildcards, we might have a directory or a filename */
/* try appending a wildcard and reading the directory */
pstr2
=
path
+
lstrlenW
(
path
);
if
(
pBeginFileName
==
NULL
||
*
(
pBeginFileName
+
1
)
!=
0
)
strcatW
(
path
,
FILE_bslash
);
/* if ScanDir succeeds, we have changed the directory */
if
(
FILEDLG_ScanDir
(
hWnd
,
path
))
return
TRUE
;
/* if not, this must be a filename */
*
pstr2
=
0
;
/* remove the wildcard added before */
if
(
pBeginFileName
!=
NULL
)
{
/* strip off the pathname */
*
pBeginFileName
=
0
;
SetDlgItemTextW
(
hWnd
,
edt1
,
pBeginFileName
+
1
);
lstrcpynW
(
tmpstr2
,
pBeginFileName
+
1
,
sizeof
(
tmpstr2
)
);
/* Should we MessageBox() if this fails? */
if
(
!
FILEDLG_ScanDir
(
hWnd
,
path
))
{
return
FALSE
;
}
strcpyW
(
path
,
tmpstr2
);
}
else
SetDlgItemTextW
(
hWnd
,
edt1
,
path
);
return
TRUE
;
}
/***********************************************************************
* FILEDLG_Validate [internal]
* called on: click Ok button, Enter in edit, DoubleClick in file list
*/
static
LRESULT
FILEDLG_Validate
(
LFSPRIVATE
lfs
,
LPWSTR
path
,
UINT
control
,
INT
itemIndex
,
BOOL
internalUse
)
{
LONG
lRet
;
HWND
hWnd
=
lfs
->
hwnd
;
OPENFILENAMEW
ofnsav
;
LPOPENFILENAMEW
ofnW
=
lfs
->
ofnW
;
WCHAR
filename
[
BUFFILE
];
ofnsav
=
*
ofnW
;
/* for later restoring */
/* get current file name */
if
(
path
)
lstrcpynW
(
filename
,
path
,
sizeof
(
filename
));
else
GetDlgItemTextW
(
hWnd
,
edt1
,
filename
,
sizeof
(
filename
)
);
/* if we did not click in file list to get there */
if
(
control
!=
lst1
)
{
if
(
!
FILEDLG_TestPath
(
lfs
,
filename
)
)
return
FALSE
;
}
FILEDLG_UpdateResult
(
lfs
,
filename
);
if
(
internalUse
)
{
/* called internally after a change in a combo */
if
(
lfs
->
hook
)
{
FILEDLG_CallWindowProc
(
lfs
,
lfs
->
lbselchstring
,
control
,
MAKELONG
(
lRet
,
CD_LBSELCHANGE
));
in_update
=
FALSE
;
return
TRUE
;
}
FILEDLG_UpdateFileTitle
(
lfs
);
if
(
lfs
->
hook
)
{
MAKELONG
(
itemIndex
,
CD_LBSELCHANGE
));
}
return
TRUE
;
}
FILEDLG_UpdateFileTitle
(
lfs
);
if
(
lfs
->
hook
)
{
lRet
=
(
BOOL
)
FILEDLG_CallWindowProc
(
lfs
,
lfs
->
fileokstring
,
0
,
lfs
->
lParam
);
if
(
lRet
)
{
*
ofnW
=
ofn
2
;
/* restore old state */
break
;
*
ofnW
=
ofn
sav
;
/* restore old state */
return
FALSE
;
}
}
if
((
ofnW
->
Flags
&
OFN_ALLOWMULTISELECT
)
&&
(
ofnW
->
Flags
&
OFN_EXPLORER
))
{
if
(
ofnW
->
lpstrFile
)
{
LPWSTR
str
=
(
LPWSTR
)
ofnW
->
lpstrFile
;
LPWSTR
ptr
=
strrchrW
(
str
,
'\\'
);
}
if
((
ofnW
->
Flags
&
OFN_ALLOWMULTISELECT
)
&&
(
ofnW
->
Flags
&
OFN_EXPLORER
))
{
if
(
ofnW
->
lpstrFile
)
{
LPWSTR
str
=
(
LPWSTR
)
ofnW
->
lpstrFile
;
LPWSTR
ptr
=
strrchrW
(
str
,
'\\'
);
str
[
lstrlenW
(
str
)
+
1
]
=
'\0'
;
*
ptr
=
0
;
}
}
EndDialog
(
hWnd
,
TRUE
);
return
TRUE
;
case
IDCANCEL
:
EndDialog
(
hWnd
,
FALSE
);
return
TRUE
;
case
IDABORT
:
/* can be sent by the hook procedure */
EndDialog
(
hWnd
,
TRUE
);
return
TRUE
;
}
}
return
FALSE
;
return
TRUE
;
}
/***********************************************************************
* FILEDLG_DiskChange [internal]
* called when a new item is picked in the disk selection combo
*/
static
LRESULT
FILEDLG_DiskChange
(
LFSPRIVATE
lfs
)
{
LONG
lRet
;
HWND
hWnd
=
lfs
->
hwnd
;
LPWSTR
pstr
;
WCHAR
diskname
[
BUFFILE
];
FILEDLG_StripEditControl
(
hWnd
);
lRet
=
SendDlgItemMessageW
(
hWnd
,
cmb2
,
CB_GETCURSEL
,
0
,
0L
);
if
(
lRet
==
LB_ERR
)
return
0
;
pstr
=
HeapAlloc
(
GetProcessHeap
(),
0
,
BUFFILEALLOC
);
SendDlgItemMessageW
(
hWnd
,
cmb2
,
CB_GETLBTEXT
,
lRet
,
(
LPARAM
)
pstr
);
wsprintfW
(
diskname
,
FILE_specc
,
pstr
[
2
]);
HeapFree
(
GetProcessHeap
(),
0
,
pstr
);
return
FILEDLG_Validate
(
lfs
,
diskname
,
cmb2
,
lRet
,
TRUE
);
}
/***********************************************************************
* FILEDLG_FileTypeChange [internal]
* called when a new item is picked in the file type combo
*/
static
LRESULT
FILEDLG_FileTypeChange
(
LFSPRIVATE
lfs
)
{
LONG
lRet
;
WCHAR
diskname
[
BUFFILE
];
LPWSTR
pstr
;
diskname
[
0
]
=
0
;
lRet
=
SendDlgItemMessageW
(
lfs
->
hwnd
,
cmb1
,
CB_GETCURSEL
,
0
,
0
);
if
(
lRet
==
LB_ERR
)
return
TRUE
;
pstr
=
(
LPWSTR
)
SendDlgItemMessageW
(
lfs
->
hwnd
,
cmb1
,
CB_GETITEMDATA
,
lRet
,
0
);
TRACE
(
"Selected filter : %s
\n
"
,
debugstr_w
(
pstr
));
SetDlgItemTextW
(
lfs
->
hwnd
,
edt1
,
pstr
);
return
FILEDLG_Validate
(
lfs
,
NULL
,
cmb1
,
lRet
,
TRUE
);
}
/***********************************************************************
* FILEDLG_WMCommand [internal]
*/
static
LRESULT
FILEDLG_WMCommand
(
HWND
hWnd
,
LPARAM
lParam
,
UINT
notification
,
UINT
control
,
LFSPRIVATE
lfs
)
{
switch
(
control
)
{
case
lst1
:
/* file list */
FILEDLG_StripEditControl
(
hWnd
);
if
(
notification
==
LBN_DBLCLK
)
{
if
(
FILEDLG_Validate
(
lfs
,
NULL
,
control
,
0
,
FALSE
))
EndDialog
(
hWnd
,
TRUE
);
return
TRUE
;
}
else
if
(
notification
==
LBN_SELCHANGE
)
return
FILEDLG_FileListSelect
(
lfs
);
break
;
case
lst2
:
/* directory list */
FILEDLG_StripEditControl
(
hWnd
);
if
(
notification
==
LBN_DBLCLK
)
return
FILEDLG_DirListDblClick
(
lfs
);
break
;
case
cmb1
:
/* file type drop list */
if
(
notification
==
CBN_SELCHANGE
)
return
FILEDLG_FileTypeChange
(
lfs
);
break
;
case
chx1
:
break
;
case
pshHelp
:
break
;
case
cmb2
:
/* disk dropdown combo */
if
(
notification
==
CBN_SELCHANGE
)
return
FILEDLG_DiskChange
(
lfs
);
break
;
case
IDOK
:
if
(
FILEDLG_Validate
(
lfs
,
NULL
,
control
,
0
,
FALSE
))
EndDialog
(
hWnd
,
TRUE
);
return
TRUE
;
case
IDCANCEL
:
EndDialog
(
hWnd
,
FALSE
);
return
TRUE
;
case
IDABORT
:
/* can be sent by the hook procedure */
EndDialog
(
hWnd
,
TRUE
);
return
TRUE
;
}
return
FALSE
;
}
/***********************************************************************
* FILEDLG_MapDrawItemStruct [internal]
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment