Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
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-cw
Commits
323c94b5
Commit
323c94b5
authored
Feb 05, 2009
by
Francois Gouget
Committed by
Alexandre Julliard
Feb 05, 2009
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
progman: Reorder some functions to avoid forward declarations in dialog.c.
parent
cb425822
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
288 additions
and
302 deletions
+288
-302
dialog.c
programs/progman/dialog.c
+288
-302
No files found.
programs/progman/dialog.c
View file @
323c94b5
...
...
@@ -25,43 +25,109 @@
#include "windows.h"
#include "commdlg.h"
#include "progman.h"
static
BOOL
DIALOG_BrowsePrograms
(
HWND
,
LPSTR
,
INT
);
static
BOOL
DIALOG_BrowseSymbols
(
HWND
,
LPSTR
,
INT
);
static
INT_PTR
CALLBACK
DIALOG_NEW_DlgProc
(
HWND
,
UINT
,
WPARAM
,
LPARAM
);
static
INT_PTR
CALLBACK
DIALOG_COPY_MOVE_DlgProc
(
HWND
,
UINT
,
WPARAM
,
LPARAM
);
static
INT_PTR
CALLBACK
DIALOG_GROUP_DlgProc
(
HWND
,
UINT
,
WPARAM
,
LPARAM
);
static
INT_PTR
CALLBACK
DIALOG_PROGRAM_DlgProc
(
HWND
,
UINT
,
WPARAM
,
LPARAM
);
static
INT_PTR
CALLBACK
DIALOG_SYMBOL_DlgProc
(
HWND
,
UINT
,
WPARAM
,
LPARAM
);
static
INT_PTR
CALLBACK
DIALOG_EXECUTE_DlgProc
(
HWND
,
UINT
,
WPARAM
,
LPARAM
);
/***********************************************************************
*
* DIALOG_
New
* DIALOG_
Browse
*/
static
struct
static
BOOL
DIALOG_Browse
(
HWND
hDlg
,
LPCSTR
lpszzFilter
,
LPSTR
lpstrFile
,
INT
nMaxFile
)
{
INT
nDefault
;
}
New
;
OPENFILENAME
openfilename
;
INT
DIALOG_New
(
INT
nDefault
)
CHAR
szDir
[
MAX_PATH
];
CHAR
szDefaultExt
[]
=
"exe"
;
ZeroMemory
(
&
openfilename
,
sizeof
(
openfilename
));
GetCurrentDirectory
(
sizeof
(
szDir
),
szDir
);
openfilename
.
lStructSize
=
sizeof
(
openfilename
);
openfilename
.
hwndOwner
=
Globals
.
hMainWnd
;
openfilename
.
hInstance
=
Globals
.
hInstance
;
openfilename
.
lpstrFilter
=
lpszzFilter
;
openfilename
.
lpstrFile
=
lpstrFile
;
openfilename
.
nMaxFile
=
nMaxFile
;
openfilename
.
lpstrInitialDir
=
szDir
;
openfilename
.
Flags
=
0
;
openfilename
.
lpstrDefExt
=
szDefaultExt
;
openfilename
.
lpstrCustomFilter
=
0
;
openfilename
.
nMaxCustFilter
=
0
;
openfilename
.
nFilterIndex
=
0
;
openfilename
.
lpstrFileTitle
=
0
;
openfilename
.
nMaxFileTitle
=
0
;
openfilename
.
lpstrInitialDir
=
0
;
openfilename
.
lpstrTitle
=
0
;
openfilename
.
nFileOffset
=
0
;
openfilename
.
nFileExtension
=
0
;
openfilename
.
lCustData
=
0
;
openfilename
.
lpfnHook
=
0
;
openfilename
.
lpTemplateName
=
0
;
return
GetOpenFileName
(
&
openfilename
);
}
/***********************************************************************
*
* DIALOG_AddFilterItem
*/
static
VOID
DIALOG_AddFilterItem
(
LPSTR
*
p
,
UINT
ids
,
LPCSTR
filter
)
{
DLGPROC
lpfnDlg
=
MakeProcInstance
(
DIALOG_NEW_DlgProc
,
Globals
.
hInstance
);
INT
ret
;
LoadString
(
Globals
.
hInstance
,
ids
,
*
p
,
MAX_STRING_LEN
);
*
p
+=
strlen
(
*
p
)
+
1
;
lstrcpy
(
*
p
,
filter
);
*
p
+=
strlen
(
*
p
)
+
1
;
**
p
=
'\0'
;
}
New
.
nDefault
=
nDefault
;
/***********************************************************************
*
* DIALOG_BrowsePrograms
*/
ret
=
DialogBox
(
Globals
.
hInstance
,
STRING_NEW
,
Globals
.
hMainWnd
,
lpfnDlg
);
FreeProcInstance
(
lpfnDlg
);
return
ret
;
static
BOOL
DIALOG_BrowsePrograms
(
HWND
hDlg
,
LPSTR
lpszFile
,
INT
nMaxFile
)
{
CHAR
szzFilter
[
2
*
MAX_STRING_LEN
+
100
];
LPSTR
p
=
szzFilter
;
DIALOG_AddFilterItem
(
&
p
,
IDS_PROGRAMS
,
"*.exe;*.pif;*.com;*.bat"
);
DIALOG_AddFilterItem
(
&
p
,
IDS_ALL_FILES
,
"*.*"
);
return
(
DIALOG_Browse
(
hDlg
,
szzFilter
,
lpszFile
,
nMaxFile
));
}
/***********************************************************************
*
* DIALOG_BrowseSymbols
*/
static
BOOL
DIALOG_BrowseSymbols
(
HWND
hDlg
,
LPSTR
lpszFile
,
INT
nMaxFile
)
{
CHAR
szzFilter
[
5
*
MAX_STRING_LEN
+
100
];
LPSTR
p
=
szzFilter
;
DIALOG_AddFilterItem
(
&
p
,
IDS_SYMBOL_FILES
,
"*.ico;*.exe;*.dll"
);
DIALOG_AddFilterItem
(
&
p
,
IDS_PROGRAMS
,
"*.exe"
);
DIALOG_AddFilterItem
(
&
p
,
IDS_LIBRARIES_DLL
,
"*.dll"
);
DIALOG_AddFilterItem
(
&
p
,
IDS_SYMBOLS_ICO
,
"*.ico"
);
DIALOG_AddFilterItem
(
&
p
,
IDS_ALL_FILES
,
"*.*"
);
return
(
DIALOG_Browse
(
hDlg
,
szzFilter
,
lpszFile
,
nMaxFile
));
}
static
struct
{
INT
nDefault
;
}
New
;
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* DIALOG_NEW_DlgProc
*/
static
INT_PTR
CALLBACK
DIALOG_NEW_DlgProc
(
HWND
hDlg
,
UINT
msg
,
WPARAM
wParam
,
LPARAM
lParam
)
{
switch
(
msg
)
...
...
@@ -93,38 +159,32 @@ static INT_PTR CALLBACK DIALOG_NEW_DlgProc(HWND hDlg, UINT msg, WPARAM wParam, L
/***********************************************************************
*
* DIALOG_
CopyMove
* DIALOG_
New
*/
static
struct
{
LPCSTR
lpszProgramName
,
lpszFromGroupName
;
HLOCAL
hToGroup
;
}
CopyMove
;
HLOCAL
DIALOG_CopyMove
(
LPCSTR
lpszProgramName
,
LPCSTR
lpszFromGroupName
,
BOOL
bMove
)
INT
DIALOG_New
(
INT
nDefault
)
{
DLGPROC
lpfnDlg
=
MakeProcInstance
(
DIALOG_
COPY_MOVE
_DlgProc
,
Globals
.
hInstance
);
DLGPROC
lpfnDlg
=
MakeProcInstance
(
DIALOG_
NEW
_DlgProc
,
Globals
.
hInstance
);
INT
ret
;
CopyMove
.
lpszProgramName
=
lpszProgramName
;
CopyMove
.
lpszFromGroupName
=
lpszFromGroupName
;
CopyMove
.
hToGroup
=
0
;
New
.
nDefault
=
nDefault
;
ret
=
DialogBox
(
Globals
.
hInstance
,
bMove
?
STRING_MOVE
:
STRING_COPY
,
ret
=
DialogBox
(
Globals
.
hInstance
,
STRING_NEW
,
Globals
.
hMainWnd
,
lpfnDlg
);
FreeProcInstance
(
lpfnDlg
);
return
((
ret
==
IDOK
)
?
CopyMove
.
hToGroup
:
0
);
return
ret
;
}
static
struct
{
LPCSTR
lpszProgramName
,
lpszFromGroupName
;
HLOCAL
hToGroup
;
}
CopyMove
;
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* DIALOG_COPY_MOVE_DlgProc
*/
static
INT_PTR
CALLBACK
DIALOG_COPY_MOVE_DlgProc
(
HWND
hDlg
,
UINT
msg
,
WPARAM
wParam
,
LPARAM
lParam
)
{
HLOCAL
hGroup
;
...
...
@@ -172,6 +232,28 @@ static INT_PTR CALLBACK DIALOG_COPY_MOVE_DlgProc(HWND hDlg, UINT msg, WPARAM wPa
/***********************************************************************
*
* DIALOG_CopyMove
*/
HLOCAL
DIALOG_CopyMove
(
LPCSTR
lpszProgramName
,
LPCSTR
lpszFromGroupName
,
BOOL
bMove
)
{
DLGPROC
lpfnDlg
=
MakeProcInstance
(
DIALOG_COPY_MOVE_DlgProc
,
Globals
.
hInstance
);
INT
ret
;
CopyMove
.
lpszProgramName
=
lpszProgramName
;
CopyMove
.
lpszFromGroupName
=
lpszFromGroupName
;
CopyMove
.
hToGroup
=
0
;
ret
=
DialogBox
(
Globals
.
hInstance
,
bMove
?
STRING_MOVE
:
STRING_COPY
,
Globals
.
hMainWnd
,
lpfnDlg
);
FreeProcInstance
(
lpfnDlg
);
return
((
ret
==
IDOK
)
?
CopyMove
.
hToGroup
:
0
);
}
/***********************************************************************
*
* DIALOG_Delete
*/
...
...
@@ -182,37 +264,16 @@ BOOL DIALOG_Delete(UINT ids_text_s, LPCSTR lpszName)
}
/***********************************************************************
*
* DIALOG_GroupAttributes
*/
static
struct
{
LPSTR
lpszTitle
,
lpszGrpFile
;
INT
nSize
;
}
GroupAttributes
;
BOOL
DIALOG_GroupAttributes
(
LPSTR
lpszTitle
,
LPSTR
lpszGrpFile
,
INT
nSize
)
{
DLGPROC
lpfnDlg
=
MakeProcInstance
(
DIALOG_GROUP_DlgProc
,
Globals
.
hInstance
);
INT
ret
;
GroupAttributes
.
nSize
=
nSize
;
GroupAttributes
.
lpszTitle
=
lpszTitle
;
GroupAttributes
.
lpszGrpFile
=
lpszGrpFile
;
ret
=
DialogBox
(
Globals
.
hInstance
,
STRING_GROUP
,
Globals
.
hMainWnd
,
lpfnDlg
);
FreeProcInstance
(
lpfnDlg
);
return
(
ret
==
IDOK
);
}
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* DIALOG_GROUP_DlgProc
*/
static
INT_PTR
CALLBACK
DIALOG_GROUP_DlgProc
(
HWND
hDlg
,
UINT
msg
,
WPARAM
wParam
,
LPARAM
lParam
)
{
switch
(
msg
)
...
...
@@ -243,144 +304,100 @@ static INT_PTR CALLBACK DIALOG_GROUP_DlgProc(HWND hDlg, UINT msg, WPARAM wParam,
/***********************************************************************
*
* DIALOG_
Program
Attributes
* DIALOG_
Group
Attributes
*/
static
struct
{
LPSTR
lpszTitle
,
lpszCmdLine
,
lpszWorkDir
,
lpszIconFile
,
lpszTmpIconFile
;
INT
nSize
;
INT
*
lpnCmdShow
;
INT
*
lpnHotKey
;
HWND
hSelGroupWnd
;
HICON
*
lphIcon
,
hTmpIcon
;
INT
*
lpnIconIndex
,
nTmpIconIndex
;
}
ProgramAttributes
;
BOOL
DIALOG_ProgramAttributes
(
LPSTR
lpszTitle
,
LPSTR
lpszCmdLine
,
LPSTR
lpszWorkDir
,
LPSTR
lpszIconFile
,
HICON
*
lphIcon
,
INT
*
lpnIconIndex
,
INT
*
lpnHotKey
,
INT
*
lpnCmdShow
,
INT
nSize
)
BOOL
DIALOG_GroupAttributes
(
LPSTR
lpszTitle
,
LPSTR
lpszGrpFile
,
INT
nSize
)
{
CHAR
szTmpIconFile
[
MAX_PATHNAME_LEN
];
DLGPROC
lpfnDlg
=
MakeProcInstance
(
DIALOG_PROGRAM_DlgProc
,
Globals
.
hInstance
);
DLGPROC
lpfnDlg
=
MakeProcInstance
(
DIALOG_GROUP_DlgProc
,
Globals
.
hInstance
);
INT
ret
;
ProgramAttributes
.
nSize
=
nSize
;
ProgramAttributes
.
lpszTitle
=
lpszTitle
;
ProgramAttributes
.
lpszCmdLine
=
lpszCmdLine
;
ProgramAttributes
.
lpszWorkDir
=
lpszWorkDir
;
ProgramAttributes
.
lpszIconFile
=
lpszIconFile
;
ProgramAttributes
.
lpnCmdShow
=
lpnCmdShow
;
ProgramAttributes
.
lpnHotKey
=
lpnHotKey
;
ProgramAttributes
.
lphIcon
=
lphIcon
;
ProgramAttributes
.
lpnIconIndex
=
lpnIconIndex
;
#if 0
ProgramAttributes.hTmpIcon = 0;
#else
ProgramAttributes
.
hTmpIcon
=
*
lphIcon
;
#endif
ProgramAttributes
.
nTmpIconIndex
=
*
lpnIconIndex
;
ProgramAttributes
.
lpszTmpIconFile
=
szTmpIconFile
;
lstrcpyn
(
ProgramAttributes
.
lpszTmpIconFile
,
lpszIconFile
,
MAX_PATHNAME_LEN
);
GroupAttributes
.
nSize
=
nSize
;
GroupAttributes
.
lpszTitle
=
lpszTitle
;
GroupAttributes
.
lpszGrpFile
=
lpszGrpFile
;
ret
=
DialogBox
(
Globals
.
hInstance
,
STRING_
PROGRAM
,
ret
=
DialogBox
(
Globals
.
hInstance
,
STRING_
GROUP
,
Globals
.
hMainWnd
,
lpfnDlg
);
FreeProcInstance
(
lpfnDlg
);
return
(
ret
==
IDOK
);
}
static
struct
{
LPSTR
lpszIconFile
;
INT
nSize
;
HICON
*
lphIcon
;
INT
*
lpnIconIndex
;
}
Symbol
;
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* DIALOG_
PROGRAM
_DlgProc
* DIALOG_
SYMBOL
_DlgProc
*/
static
INT_PTR
CALLBACK
DIALOG_PROGRAM_DlgProc
(
HWND
hDlg
,
UINT
msg
,
WPARAM
wParam
,
LPARAM
lParam
)
static
INT_PTR
CALLBACK
DIALOG_SYMBOL_DlgProc
(
HWND
hDlg
,
UINT
msg
,
WPARAM
wParam
,
LPARAM
lParam
)
{
CHAR
buffer
[
MAX_STRING_LEN
];
switch
(
msg
)
{
case
WM_INITDIALOG
:
SetDlgItemText
(
hDlg
,
PM_DESCRIPTION
,
ProgramAttributes
.
lpszTitle
);
SetDlgItemText
(
hDlg
,
PM_COMMAND_LINE
,
ProgramAttributes
.
lpszCmdLine
);
SetDlgItemText
(
hDlg
,
PM_DIRECTORY
,
ProgramAttributes
.
lpszWorkDir
);
if
(
!*
ProgramAttributes
.
lpnHotKey
)
{
LoadString
(
Globals
.
hInstance
,
IDS_NO_HOT_KEY
,
buffer
,
sizeof
(
buffer
));
SetDlgItemText
(
hDlg
,
PM_HOT_KEY
,
buffer
);
}
CheckDlgButton
(
hDlg
,
PM_SYMBOL
,
(
*
ProgramAttributes
.
lpnCmdShow
==
SW_SHOWMINIMIZED
));
SendDlgItemMessage
(
hDlg
,
PM_ICON
,
STM_SETICON
,
(
WPARAM
)
ProgramAttributes
.
hTmpIcon
,
0
);
break
;
SetDlgItemText
(
hDlg
,
PM_ICON_FILE
,
Symbol
.
lpszIconFile
);
SendDlgItemMessage
(
hDlg
,
PM_SYMBOL_LIST
,
CB_SETITEMHEIGHT
,
0
,
(
LPARAM
)
32
);
SendDlgItemMessage
(
hDlg
,
PM_SYMBOL_LIST
,
CB_ADDSTRING
,
0
,
(
LPARAM
)
*
Symbol
.
lphIcon
);
SendDlgItemMessage
(
hDlg
,
PM_SYMBOL_LIST
,
CB_ADDSTRING
,
0
,
(
LPARAM
)
Globals
.
hDefaultIcon
);
SendDlgItemMessage
(
hDlg
,
PM_SYMBOL_LIST
,
CB_SETCURSEL
,
0
,
0
);
return
TRUE
;
case
WM_MEASUREITEM
:
{
PMEASUREITEMSTRUCT
measure
=
(
PMEASUREITEMSTRUCT
)
lParam
;
measure
->
itemWidth
=
32
;
measure
->
itemHeight
=
32
;
return
TRUE
;
}
case
WM_DRAWITEM
:
{
PDRAWITEMSTRUCT
dis
=
(
PDRAWITEMSTRUCT
)
lParam
;
DrawIcon
(
dis
->
hDC
,
dis
->
rcItem
.
left
,
dis
->
rcItem
.
top
,
(
HICON
)
dis
->
itemData
);
return
TRUE
;
}
case
WM_COMMAND
:
switch
(
wParam
)
{
case
PM_SYMBOL
:
CheckDlgButton
(
hDlg
,
PM_SYMBOL
,
!
IsDlgButtonChecked
(
hDlg
,
PM_SYMBOL
));
return
TRUE
;
case
PM_BROWSE
:
{
CHAR
filename
[
MAX_PATHNAME_LEN
];
filename
[
0
]
=
0
;
if
(
DIALOG_Browse
Program
s
(
hDlg
,
filename
,
sizeof
(
filename
)))
SetDlgItemText
(
hDlg
,
PM_
COMMAND_LIN
E
,
filename
);
if
(
DIALOG_Browse
Symbol
s
(
hDlg
,
filename
,
sizeof
(
filename
)))
SetDlgItemText
(
hDlg
,
PM_
ICON_FIL
E
,
filename
);
return
TRUE
;
}
case
PM_OTHER_SYMBOL
:
{
DIALOG_Symbol
(
&
ProgramAttributes
.
hTmpIcon
,
ProgramAttributes
.
lpszTmpIconFile
,
&
ProgramAttributes
.
nTmpIconIndex
,
MAX_PATHNAME_LEN
);
SendDlgItemMessage
(
hDlg
,
PM_ICON
,
STM_SETICON
,
(
WPARAM
)
ProgramAttributes
.
hTmpIcon
,
0
);
return
TRUE
;
}
case
PM_HELP
:
MAIN_MessageBoxIDS
(
IDS_NOT_IMPLEMENTED
,
IDS_ERROR
,
MB_OK
);
return
TRUE
;
case
IDOK
:
GetDlgItemText
(
hDlg
,
PM_DESCRIPTION
,
ProgramAttributes
.
lpszTitle
,
ProgramAttributes
.
nSize
);
GetDlgItemText
(
hDlg
,
PM_COMMAND_LINE
,
ProgramAttributes
.
lpszCmdLine
,
ProgramAttributes
.
nSize
);
GetDlgItemText
(
hDlg
,
PM_DIRECTORY
,
ProgramAttributes
.
lpszWorkDir
,
ProgramAttributes
.
nSize
);
{
INT
nCurSel
=
SendDlgItemMessage
(
hDlg
,
PM_SYMBOL_LIST
,
CB_GETCURSEL
,
0
,
0
);
if
(
ProgramAttributes
.
hTmpIcon
)
{
GetDlgItemText
(
hDlg
,
PM_ICON_FILE
,
Symbol
.
lpszIconFile
,
Symbol
.
nSize
);
*
Symbol
.
lphIcon
=
(
HICON
)
SendDlgItemMessage
(
hDlg
,
PM_SYMBOL_LIST
,
CB_GETITEMDATA
,
(
WPARAM
)
nCurSel
,
0
);
#if 0
if (*ProgramAttributes.lphIcon)
DestroyIcon(*ProgramAttributes.lphIcon);
*Symbol.lphIcon = CopyIcon(*Symbol.lphIcon);
#endif
*
ProgramAttributes
.
lphIcon
=
ProgramAttributes
.
hTmpIcon
;
*
ProgramAttributes
.
lpnIconIndex
=
ProgramAttributes
.
nTmpIconIndex
;
lstrcpyn
(
ProgramAttributes
.
lpszIconFile
,
ProgramAttributes
.
lpszTmpIconFile
,
ProgramAttributes
.
nSize
);
}
*
ProgramAttributes
.
lpnCmdShow
=
IsDlgButtonChecked
(
hDlg
,
PM_SYMBOL
)
?
SW_SHOWMINIMIZED
:
SW_SHOWNORMAL
;
EndDialog
(
hDlg
,
IDOK
);
return
TRUE
;
EndDialog
(
hDlg
,
IDOK
);
return
TRUE
;
}
case
IDCANCEL
:
EndDialog
(
hDlg
,
IDCANCEL
);
return
TRUE
;
}
return
FALSE
;
}
return
FALSE
;
}
...
...
@@ -389,15 +406,6 @@ static INT_PTR CALLBACK DIALOG_PROGRAM_DlgProc(HWND hDlg, UINT msg, WPARAM wPara
*
* DIALOG_Symbol
*/
static
struct
{
LPSTR
lpszIconFile
;
INT
nSize
;
HICON
*
lphIcon
;
INT
*
lpnIconIndex
;
}
Symbol
;
VOID
DIALOG_Symbol
(
HICON
*
lphIcon
,
LPSTR
lpszIconFile
,
INT
*
lpnIconIndex
,
INT
nSize
)
{
...
...
@@ -413,98 +421,154 @@ VOID DIALOG_Symbol(HICON *lphIcon, LPSTR lpszIconFile,
FreeProcInstance
(
lpfnDlg
);
}
static
struct
{
LPSTR
lpszTitle
,
lpszCmdLine
,
lpszWorkDir
,
lpszIconFile
,
lpszTmpIconFile
;
INT
nSize
;
INT
*
lpnCmdShow
;
INT
*
lpnHotKey
;
HWND
hSelGroupWnd
;
HICON
*
lphIcon
,
hTmpIcon
;
INT
*
lpnIconIndex
,
nTmpIconIndex
;
}
ProgramAttributes
;
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* DIALOG_
SYMBOL
_DlgProc
* DIALOG_
PROGRAM
_DlgProc
*/
static
INT_PTR
CALLBACK
DIALOG_SYMBOL_DlgProc
(
HWND
hDlg
,
UINT
msg
,
WPARAM
wParam
,
LPARAM
lParam
)
static
INT_PTR
CALLBACK
DIALOG_PROGRAM_DlgProc
(
HWND
hDlg
,
UINT
msg
,
WPARAM
wParam
,
LPARAM
lParam
)
{
CHAR
buffer
[
MAX_STRING_LEN
];
switch
(
msg
)
{
case
WM_INITDIALOG
:
SetDlgItemText
(
hDlg
,
PM_ICON_FILE
,
Symbol
.
lpszIconFile
);
SendDlgItemMessage
(
hDlg
,
PM_SYMBOL_LIST
,
CB_SETITEMHEIGHT
,
0
,
(
LPARAM
)
32
);
SendDlgItemMessage
(
hDlg
,
PM_SYMBOL_LIST
,
CB_ADDSTRING
,
0
,
(
LPARAM
)
*
Symbol
.
lphIcon
);
SendDlgItemMessage
(
hDlg
,
PM_SYMBOL_LIST
,
CB_ADDSTRING
,
0
,
(
LPARAM
)
Globals
.
hDefaultIcon
);
SendDlgItemMessage
(
hDlg
,
PM_SYMBOL_LIST
,
CB_SETCURSEL
,
0
,
0
);
return
TRUE
;
case
WM_MEASUREITEM
:
{
PMEASUREITEMSTRUCT
measure
=
(
PMEASUREITEMSTRUCT
)
lParam
;
measure
->
itemWidth
=
32
;
measure
->
itemHeight
=
32
;
return
TRUE
;
}
SetDlgItemText
(
hDlg
,
PM_DESCRIPTION
,
ProgramAttributes
.
lpszTitle
);
SetDlgItemText
(
hDlg
,
PM_COMMAND_LINE
,
ProgramAttributes
.
lpszCmdLine
);
SetDlgItemText
(
hDlg
,
PM_DIRECTORY
,
ProgramAttributes
.
lpszWorkDir
);
if
(
!*
ProgramAttributes
.
lpnHotKey
)
{
LoadString
(
Globals
.
hInstance
,
IDS_NO_HOT_KEY
,
buffer
,
sizeof
(
buffer
));
SetDlgItemText
(
hDlg
,
PM_HOT_KEY
,
buffer
);
}
case
WM_DRAWITEM
:
{
PDRAWITEMSTRUCT
dis
=
(
PDRAWITEMSTRUCT
)
lParam
;
DrawIcon
(
dis
->
hDC
,
dis
->
rcItem
.
left
,
dis
->
rcItem
.
top
,
(
HICON
)
dis
->
itemData
);
return
TRUE
;
}
CheckDlgButton
(
hDlg
,
PM_SYMBOL
,
(
*
ProgramAttributes
.
lpnCmdShow
==
SW_SHOWMINIMIZED
));
SendDlgItemMessage
(
hDlg
,
PM_ICON
,
STM_SETICON
,
(
WPARAM
)
ProgramAttributes
.
hTmpIcon
,
0
);
break
;
case
WM_COMMAND
:
switch
(
wParam
)
{
case
PM_SYMBOL
:
CheckDlgButton
(
hDlg
,
PM_SYMBOL
,
!
IsDlgButtonChecked
(
hDlg
,
PM_SYMBOL
));
return
TRUE
;
case
PM_BROWSE
:
{
CHAR
filename
[
MAX_PATHNAME_LEN
];
filename
[
0
]
=
0
;
if
(
DIALOG_Browse
Symbol
s
(
hDlg
,
filename
,
sizeof
(
filename
)))
SetDlgItemText
(
hDlg
,
PM_
ICON_FIL
E
,
filename
);
if
(
DIALOG_Browse
Program
s
(
hDlg
,
filename
,
sizeof
(
filename
)))
SetDlgItemText
(
hDlg
,
PM_
COMMAND_LIN
E
,
filename
);
return
TRUE
;
}
case
PM_HELP
:
MAIN_MessageBoxIDS
(
IDS_NOT_IMPLEMENTED
,
IDS_ERROR
,
MB_OK
);
return
TRUE
;
case
IDOK
:
case
PM_OTHER_SYMBOL
:
{
INT
nCurSel
=
SendDlgItemMessage
(
hDlg
,
PM_SYMBOL_LIST
,
CB_GETCURSEL
,
0
,
0
);
DIALOG_Symbol
(
&
ProgramAttributes
.
hTmpIcon
,
ProgramAttributes
.
lpszTmpIconFile
,
&
ProgramAttributes
.
nTmpIconIndex
,
MAX_PATHNAME_LEN
);
GetDlgItemText
(
hDlg
,
PM_ICON_FILE
,
Symbol
.
lpszIconFile
,
Symbol
.
nSize
);
SendDlgItemMessage
(
hDlg
,
PM_ICON
,
STM_SETICON
,
(
WPARAM
)
ProgramAttributes
.
hTmpIcon
,
0
);
return
TRUE
;
}
*
Symbol
.
lphIcon
=
(
HICON
)
SendDlgItemMessage
(
hDlg
,
PM_SYMBOL_LIST
,
CB_GETITEMDATA
,
(
WPARAM
)
nCurSel
,
0
);
case
IDOK
:
GetDlgItemText
(
hDlg
,
PM_DESCRIPTION
,
ProgramAttributes
.
lpszTitle
,
ProgramAttributes
.
nSize
);
GetDlgItemText
(
hDlg
,
PM_COMMAND_LINE
,
ProgramAttributes
.
lpszCmdLine
,
ProgramAttributes
.
nSize
);
GetDlgItemText
(
hDlg
,
PM_DIRECTORY
,
ProgramAttributes
.
lpszWorkDir
,
ProgramAttributes
.
nSize
);
if
(
ProgramAttributes
.
hTmpIcon
)
{
#if 0
*Symbol.lphIcon = CopyIcon(*Symbol.lphIcon);
if (*ProgramAttributes.lphIcon)
DestroyIcon(*ProgramAttributes.lphIcon);
#endif
*
ProgramAttributes
.
lphIcon
=
ProgramAttributes
.
hTmpIcon
;
*
ProgramAttributes
.
lpnIconIndex
=
ProgramAttributes
.
nTmpIconIndex
;
lstrcpyn
(
ProgramAttributes
.
lpszIconFile
,
ProgramAttributes
.
lpszTmpIconFile
,
ProgramAttributes
.
nSize
);
}
EndDialog
(
hDlg
,
IDOK
);
return
TRUE
;
}
*
ProgramAttributes
.
lpnCmdShow
=
IsDlgButtonChecked
(
hDlg
,
PM_SYMBOL
)
?
SW_SHOWMINIMIZED
:
SW_SHOWNORMAL
;
EndDialog
(
hDlg
,
IDOK
);
return
TRUE
;
case
IDCANCEL
:
EndDialog
(
hDlg
,
IDCANCEL
);
return
TRUE
;
}
return
FALSE
;
}
return
FALSE
;
}
/***********************************************************************
*
* DIALOG_
Execute
* DIALOG_
ProgramAttributes
*/
VOID
DIALOG_Execute
(
void
)
BOOL
DIALOG_ProgramAttributes
(
LPSTR
lpszTitle
,
LPSTR
lpszCmdLine
,
LPSTR
lpszWorkDir
,
LPSTR
lpszIconFile
,
HICON
*
lphIcon
,
INT
*
lpnIconIndex
,
INT
*
lpnHotKey
,
INT
*
lpnCmdShow
,
INT
nSize
)
{
INT_PTR
z
;
DLGPROC
lpfnDlg
=
MakeProcInstance
(
DIALOG_EXECUTE_DlgProc
,
Globals
.
hInstance
);
z
=
DialogBox
(
Globals
.
hInstance
,
STRING_EXECUTE
,
Globals
.
hMainWnd
,
lpfnDlg
);
FreeProcInstance
(
lpfnDlg
);
CHAR
szTmpIconFile
[
MAX_PATHNAME_LEN
];
DLGPROC
lpfnDlg
=
MakeProcInstance
(
DIALOG_PROGRAM_DlgProc
,
Globals
.
hInstance
);
INT
ret
;
ProgramAttributes
.
nSize
=
nSize
;
ProgramAttributes
.
lpszTitle
=
lpszTitle
;
ProgramAttributes
.
lpszCmdLine
=
lpszCmdLine
;
ProgramAttributes
.
lpszWorkDir
=
lpszWorkDir
;
ProgramAttributes
.
lpszIconFile
=
lpszIconFile
;
ProgramAttributes
.
lpnCmdShow
=
lpnCmdShow
;
ProgramAttributes
.
lpnHotKey
=
lpnHotKey
;
ProgramAttributes
.
lphIcon
=
lphIcon
;
ProgramAttributes
.
lpnIconIndex
=
lpnIconIndex
;
#if 0
ProgramAttributes.hTmpIcon = 0;
#else
ProgramAttributes
.
hTmpIcon
=
*
lphIcon
;
#endif
ProgramAttributes
.
nTmpIconIndex
=
*
lpnIconIndex
;
ProgramAttributes
.
lpszTmpIconFile
=
szTmpIconFile
;
lstrcpyn
(
ProgramAttributes
.
lpszTmpIconFile
,
lpszIconFile
,
MAX_PATHNAME_LEN
);
ret
=
DialogBox
(
Globals
.
hInstance
,
STRING_PROGRAM
,
Globals
.
hMainWnd
,
lpfnDlg
);
FreeProcInstance
(
lpfnDlg
);
return
(
ret
==
IDOK
);
}
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* DIALOG_EXECUTE_DlgProc
*/
static
INT_PTR
CALLBACK
DIALOG_EXECUTE_DlgProc
(
HWND
hDlg
,
UINT
msg
,
WPARAM
wParam
,
LPARAM
lParam
)
{
...
...
@@ -553,94 +617,16 @@ static INT_PTR CALLBACK DIALOG_EXECUTE_DlgProc(HWND hDlg, UINT msg,
/***********************************************************************
*
* DIALOG_Browse
*/
static
BOOL
DIALOG_Browse
(
HWND
hDlg
,
LPCSTR
lpszzFilter
,
LPSTR
lpstrFile
,
INT
nMaxFile
)
{
OPENFILENAME
openfilename
;
CHAR
szDir
[
MAX_PATH
];
CHAR
szDefaultExt
[]
=
"exe"
;
ZeroMemory
(
&
openfilename
,
sizeof
(
openfilename
));
GetCurrentDirectory
(
sizeof
(
szDir
),
szDir
);
openfilename
.
lStructSize
=
sizeof
(
openfilename
);
openfilename
.
hwndOwner
=
Globals
.
hMainWnd
;
openfilename
.
hInstance
=
Globals
.
hInstance
;
openfilename
.
lpstrFilter
=
lpszzFilter
;
openfilename
.
lpstrFile
=
lpstrFile
;
openfilename
.
nMaxFile
=
nMaxFile
;
openfilename
.
lpstrInitialDir
=
szDir
;
openfilename
.
Flags
=
0
;
openfilename
.
lpstrDefExt
=
szDefaultExt
;
openfilename
.
lpstrCustomFilter
=
0
;
openfilename
.
nMaxCustFilter
=
0
;
openfilename
.
nFilterIndex
=
0
;
openfilename
.
lpstrFileTitle
=
0
;
openfilename
.
nMaxFileTitle
=
0
;
openfilename
.
lpstrInitialDir
=
0
;
openfilename
.
lpstrTitle
=
0
;
openfilename
.
nFileOffset
=
0
;
openfilename
.
nFileExtension
=
0
;
openfilename
.
lCustData
=
0
;
openfilename
.
lpfnHook
=
0
;
openfilename
.
lpTemplateName
=
0
;
return
GetOpenFileName
(
&
openfilename
);
}
/***********************************************************************
*
* DIALOG_AddFilterItem
*/
static
VOID
DIALOG_AddFilterItem
(
LPSTR
*
p
,
UINT
ids
,
LPCSTR
filter
)
{
LoadString
(
Globals
.
hInstance
,
ids
,
*
p
,
MAX_STRING_LEN
);
*
p
+=
strlen
(
*
p
)
+
1
;
lstrcpy
(
*
p
,
filter
);
*
p
+=
strlen
(
*
p
)
+
1
;
**
p
=
'\0'
;
}
/***********************************************************************
*
* DIALOG_BrowsePrograms
*/
static
BOOL
DIALOG_BrowsePrograms
(
HWND
hDlg
,
LPSTR
lpszFile
,
INT
nMaxFile
)
{
CHAR
szzFilter
[
2
*
MAX_STRING_LEN
+
100
];
LPSTR
p
=
szzFilter
;
DIALOG_AddFilterItem
(
&
p
,
IDS_PROGRAMS
,
"*.exe;*.pif;*.com;*.bat"
);
DIALOG_AddFilterItem
(
&
p
,
IDS_ALL_FILES
,
"*.*"
);
return
(
DIALOG_Browse
(
hDlg
,
szzFilter
,
lpszFile
,
nMaxFile
));
}
/***********************************************************************
*
* DIALOG_BrowseSymbols
* DIALOG_Execute
*/
static
BOOL
DIALOG_BrowseSymbols
(
HWND
hDlg
,
LPSTR
lpszFile
,
INT
nMaxFile
)
VOID
DIALOG_Execute
(
void
)
{
CHAR
szzFilter
[
5
*
MAX_STRING_LEN
+
100
];
LPSTR
p
=
szzFilter
;
DIALOG_AddFilterItem
(
&
p
,
IDS_SYMBOL_FILES
,
"*.ico;*.exe;*.dll"
);
DIALOG_AddFilterItem
(
&
p
,
IDS_PROGRAMS
,
"*.exe"
);
DIALOG_AddFilterItem
(
&
p
,
IDS_LIBRARIES_DLL
,
"*.dll"
);
DIALOG_AddFilterItem
(
&
p
,
IDS_SYMBOLS_ICO
,
"*.ico"
);
DIALOG_AddFilterItem
(
&
p
,
IDS_ALL_FILES
,
"*.*"
);
return
(
DIALOG_Browse
(
hDlg
,
szzFilter
,
lpszFile
,
nMaxFile
));
INT_PTR
z
;
DLGPROC
lpfnDlg
=
MakeProcInstance
(
DIALOG_EXECUTE_DlgProc
,
Globals
.
hInstance
);
z
=
DialogBox
(
Globals
.
hInstance
,
STRING_EXECUTE
,
Globals
.
hMainWnd
,
lpfnDlg
);
FreeProcInstance
(
lpfnDlg
);
}
/* Local Variables: */
...
...
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