From 30008a00ab0152a08af8ef2a4e540f41fbf97eaa Mon Sep 17 00:00:00 2001 From: Eric Williams <ewill@ncal.verio.com> Date: Fri, 5 Feb 1999 17:40:47 +0000 Subject: [PATCH] Added common dialogs test program. --- configure | 2 + configure.in | 1 + programs/Makefile.in | 1 + programs/cmdlgtst/.cvsignore | 3 + programs/cmdlgtst/Makefile.in | 45 ++ programs/cmdlgtst/cmdlgr.h | 108 +++++ programs/cmdlgtst/cmdlgr.rc | 264 +++++++++++ programs/cmdlgtst/cmdlgtst.c | 802 ++++++++++++++++++++++++++++++++++ 8 files changed, 1226 insertions(+) create mode 100644 programs/cmdlgtst/.cvsignore create mode 100644 programs/cmdlgtst/Makefile.in create mode 100644 programs/cmdlgtst/cmdlgr.h create mode 100644 programs/cmdlgtst/cmdlgr.rc create mode 100644 programs/cmdlgtst/cmdlgtst.c diff --git a/configure b/configure index 50d86714d50..ad343f77b6d 100755 --- a/configure +++ b/configure @@ -4510,6 +4510,7 @@ objects/Makefile ole/Makefile programs/Makefile programs/clock/Makefile +programs/cmdlgtst/Makefile programs/control/Makefile programs/avitools/Makefile programs/notepad/Makefile @@ -4668,6 +4669,7 @@ objects/Makefile ole/Makefile programs/Makefile programs/clock/Makefile +programs/cmdlgtst/Makefile programs/control/Makefile programs/avitools/Makefile programs/notepad/Makefile diff --git a/configure.in b/configure.in index d6304c67deb..b54f898578e 100644 --- a/configure.in +++ b/configure.in @@ -637,6 +637,7 @@ objects/Makefile ole/Makefile programs/Makefile programs/clock/Makefile +programs/cmdlgtst/Makefile programs/control/Makefile programs/avitools/Makefile programs/notepad/Makefile diff --git a/programs/Makefile.in b/programs/Makefile.in index 4e15ece7421..aa0b4f2b36c 100644 --- a/programs/Makefile.in +++ b/programs/Makefile.in @@ -1,6 +1,7 @@ SUBDIRS = \ avitools \ clock \ + cmdlgtst \ control \ notepad \ progman \ diff --git a/programs/cmdlgtst/.cvsignore b/programs/cmdlgtst/.cvsignore new file mode 100644 index 00000000000..ac39503607f --- /dev/null +++ b/programs/cmdlgtst/.cvsignore @@ -0,0 +1,3 @@ +Makefile +cmdlgr.s +cmdlgtst diff --git a/programs/cmdlgtst/Makefile.in b/programs/cmdlgtst/Makefile.in new file mode 100644 index 00000000000..f1347922649 --- /dev/null +++ b/programs/cmdlgtst/Makefile.in @@ -0,0 +1,45 @@ +DEFS = -DWINELIB +TOPSRCDIR = @top_srcdir@ +TOPOBJDIR = ../.. +SRCDIR = @srcdir@ +VPATH = @srcdir@ +MODULE = none +PROGRAMS = cmdlgtst +ALL_LIBS = $(WINELIB) $(X_LIBS) $(XLIB) $(LIBS) +RCFLAGS = -w32 -h +WRCEXTRA = -A -p $* + +C_SRCS = \ + cmdlgtst.c + +RC_SRCS = \ + cmdlgr.rc + +all: check_wrc $(PROGRAMS) + +depend:: $(RC_SRCS:.rc=.h) + +@MAKE_RULES@ + +# Override resource compiler rules +.rc.s: + $(CPP) $(DEFS) $(OPTIONS) $(DIVINCL) -DRC_INVOKED -P -x c $< | $(WRC) $(WRCFLAGS) $(WRCEXTRA) -o $*.s + +.rc.h: + $(CPP) $(DEFS) $(OPTIONS) $(DIVINCL) -DRC_INVOKED -P -x c $< | $(WRC) $(WRCFLAGS) $(WRCEXTRA) -nH $*.h + + +cmdlgtst: $(OBJS) + $(CC) -o cmdlgtst $(OBJS) $(LDOPTIONS) $(ALL_LIBS) + +install: dummy + $(INSTALL_PROGRAM) cmdlgtst $(bindir)/cmdlgtst + +uninstall: dummy + $(RM) $(bindir)/cmdlgtst + +$(RC_SRCS:.rc=.s): $(WRC) + +dummy: + +### Dependencies: diff --git a/programs/cmdlgtst/cmdlgr.h b/programs/cmdlgtst/cmdlgr.h new file mode 100644 index 00000000000..22abd833053 --- /dev/null +++ b/programs/cmdlgtst/cmdlgr.h @@ -0,0 +1,108 @@ +#define CM_U_COLOR 105 +#define CM_U_SAVE 104 +#define CM_U_OPEN 101 +#define I_OFN_SHAREAWARE 116 +#define I_OFN_SHOWHELP 117 +#define I_OFN_ALLOWMULTISELECT 101 +#define I_OFN_READONLY 115 +#define I_OFN_PATHMUSTEXIST 114 +#define I_OFN_OVERWRITEPROMPT 113 +#define I_OFN_NOVALIDATE 112 +#define I_OFN_NOTESTFILECREATE 111 +#define I_OFN_NOREADONLYRETURN 110 +#define I_OFN_NOCHANGEDIR 109 +#define I_OFN_HIDEREADONLY 108 +#define I_OFN_FILEMUSTEXIST 107 +#define I_OFN_EXTENSIONDIFFERENT 106 +#define I_OFN_ENABLETEMPLATEHANDLE 105 +#define I_OFN_ENABLETEMPLATE 104 +#define I_OFN_ENABLEHOOK 103 +#define I_OFN_CREATEPROMPT 102 +#define CM_H_ABOUT 103 +#define CM_F_FILE 102 +#define I_PD_SHOWHELP 121 +#define I_PD_USEDEVMODECOPIES 122 +#define I_PD_SELECTION 120 +#define I_PD_RETURNIC 119 +#define I_PD_RETURNDEFAULT 118 +#define I_PD_RETURNDC 117 +#define I_PD_PRINTTOFILE 116 +#define I_PD_PRINTSETUP 115 +#define I_PD_PAGENUMS 114 +#define I_PD_NOWARNING 113 +#define I_PD_NOSELECTION 112 +#define I_PD_NOPAGENUMS 111 +#define I_PD_HIDEPRINTTOFILE 110 +#define I_PD_ENABLESETUPTEMPLATEHANDLE 109 +#define I_PD_ENABLESETUPTEMPLATE 108 +#define I_PD_ENABLESETUPHOOK 107 +#define I_PD_ENABLEPRINTTEMPLATEHANDLE 106 +#define I_PD_ENABLEPRINTTEMPLATE 105 +#define I_PD_ENABLEPRINTHOOK 104 +#define I_PD_DISABLEPRINTTOFILE 103 +#define I_PD_COLLATE 102 +#define I_PD_ALLPAGES 101 + +#define I_FR_SHOWHELP 116 +#define I_FR_WHOLEWORD 117 +#define I_FR_REPLACEALL 115 +#define I_FR_REPLACE 114 +#define I_FR_NOWHOLEWORD 113 +#define I_FR_NOUPDOWN 112 +#define I_FR_NOMATCHCASE 111 +#define I_FR_MATCHCASE 110 +#define I_FR_HIDEUPDOWN 109 +#define I_FR_HIDEWHOLEWORD 108 +#define I_FR_HIDEMATCHCASE 107 +#define I_FR_FINDNEXT 106 +#define I_FR_ENABLETEMPLATEHANDLE 105 +#define I_FR_ENABLETEMPLATE 104 +#define I_FR_ENABLEHOOK 103 +#define I_FR_DOWN 102 +#define I_FR_DIALOGTERM 101 +#define CM_R_HELP 998 + +#define CM_U_EXIT 1000 +#define CM_U_FONT 1002 +#define CM_U_FIND 1003 +#define CM_U_REPLACE 1004 +#define CM_U_PSETUP 1008 +#define CM_U_PRINT 1009 +#define CM_F_PRINT 1100 +#define CM_F_FINDREPLACE 1101 +#define CM_F_FONT 1102 +#define CM_F_COLOR 1103 + +#define I_CF_APPLY 10 +#define I_CF_ANSIONLY 11 +#define I_CF_BOTH 12 +#define I_CF_TTONLY 13 +#define I_CF_EFFECTS 14 +#define I_CF_ENABLEHOOK 15 +#define I_CF_ENABLETEMPLATE 16 +#define I_CF_ENABLETEMPLATEHANDLE 17 +#define I_CF_FIXEDPITCHONLY 18 +#define I_CF_FORCEFONTEXIST 19 +#define I_CF_INITTOLOGFONTSTRUCT 20 +#define I_CF_LIMITSIZE 21 +#define I_CF_NOFACESEL 22 +#define I_CF_USESTYLE 32 +#define I_CF_WYSIWYG 33 +#define I_CF_SHOWHELP 30 +#define I_CF_SCREENFONTS 31 +#define I_CF_SCALABLEONLY 29 +#define I_CF_PRINTERFONTS 28 +#define I_CF_NOVECTORFONTS 27 +#define I_CF_NOSTYLESEL 26 +#define I_CF_NOSIZESEL 25 +#define I_CF_NOSIMULATIONS 24 +#define I_CF_NOOEMFONTS 23 + +#define I_CC_RGBINIT 15 +#define I_CC_SHOWHELP 16 +#define I_CC_PREVENTFULLOPEN 14 +#define I_CC_FULLOPEN 13 +#define I_CC_ENABLETEMPLATEHANDLE 12 +#define I_CC_ENABLETEMPLATE 11 +#define I_CC_ENABLEHOOK 10 + diff --git a/programs/cmdlgtst/cmdlgr.rc b/programs/cmdlgtst/cmdlgr.rc new file mode 100644 index 00000000000..9f71e57a029 --- /dev/null +++ b/programs/cmdlgtst/cmdlgr.rc @@ -0,0 +1,264 @@ +/**************************************************************************** + + +CMDLGR.RC + +originally produced by Borland Resource Workshop, and then heavily edited + + +*****************************************************************************/ + +#include <windows.h> +#include "cmdlgr.h" + +TestCommdlgMenu MENU +{ + POPUP "&File" + { + MENUITEM "&Quit", CM_U_EXIT + } + + POPUP "&Commdlg" + { + MENUITEM "&Open", CM_U_OPEN + MENUITEM "&Save", CM_U_SAVE + MENUITEM SEPARATOR + MENUITEM "&Color", CM_U_COLOR + MENUITEM "&Font", CM_U_FONT + MENUITEM SEPARATOR + MENUITEM "Find &Text", CM_U_FIND + MENUITEM "&Replace Text", CM_U_REPLACE + MENUITEM SEPARATOR + MENUITEM "P&rint", CM_U_PRINT + } + + POPUP "F&lags" + { + MENUITEM "Fil&e", CM_F_FILE + MENUITEM SEPARATOR + MENUITEM "&Color", CM_F_COLOR + MENUITEM "&Font", CM_F_FONT + MENUITEM SEPARATOR + MENUITEM "Find/&Replace", CM_F_FINDREPLACE + MENUITEM SEPARATOR + MENUITEM "P&rint", CM_F_PRINT + } + + POPUP "&Help" + { + MENUITEM "&About", CM_H_ABOUT + } + +} + + +Color_Flags_Dialog DIALOG 11, 20, 207, 107 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION +CAPTION "Color dialog flags" +FONT 8, "MS Sans Serif" +{ + DEFPUSHBUTTON "OK", IDOK, 148, 6, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Cancel", IDCANCEL, 148, 24, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Help", CM_R_HELP, 148, 42, 50, 14, WS_GROUP | WS_TABSTOP + CHECKBOX "CC_ENABLEHOOK", I_CC_ENABLEHOOK, 12, 12, 122, 10, WS_GROUP | WS_TABSTOP + CHECKBOX "CC_ENABLETEMPLATE", I_CC_ENABLETEMPLATE, 12, 24, 122, 10, WS_GROUP | WS_TABSTOP + CHECKBOX "CC_ENABLETEMPLATEHANDLE", I_CC_ENABLETEMPLATEHANDLE, 12, 36, 122, 10, WS_GROUP | WS_TABSTOP + CHECKBOX "CC_FULLOPEN", I_CC_FULLOPEN, 12, 48, 122, 10, WS_GROUP | WS_TABSTOP + CHECKBOX "CC_PREVENTFULLOPEN", I_CC_PREVENTFULLOPEN, 12, 60, 122, 10, WS_GROUP | WS_TABSTOP + CHECKBOX "CC_RGBINIT", I_CC_RGBINIT, 12, 72, 122, 10, WS_GROUP | WS_TABSTOP + CHECKBOX "CC_SHOWHELP", I_CC_SHOWHELP, 12, 84, 122, 10, WS_GROUP | WS_TABSTOP +} + + +Font_Flags_Dialog DIALOG 9, 20, 207, 313 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION +CAPTION "Font Dialog Flags" +FONT 8, "MS Sans Serif" +{ + DEFPUSHBUTTON "OK", IDOK, 148, 6, 50, 14 + PUSHBUTTON "Cancel", IDCANCEL, 148, 24, 50, 14 + PUSHBUTTON "Help", CM_R_HELP, 148, 42, 50, 14 + CHECKBOX "CF_APPLY", I_CF_APPLY, 12, 12, 120, 10, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "CF_ANSIONLY", I_CF_ANSIONLY, 12, 24, 120, 10, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "CF_BOTH", I_CF_BOTH, 12, 36, 120, 10, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "CF_TTONLY", I_CF_TTONLY, 12, 48, 120, 10, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "CF_EFFECTS", I_CF_EFFECTS, 12, 60, 120, 10, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "CF_ENABLEHOOK", I_CF_ENABLEHOOK, 12, 72, 120, 10, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "CF_ENABLETEMPLATE", I_CF_ENABLETEMPLATE, 12, 84, 120, 10, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "CF_ENABLETEMPLATEHANDLE", I_CF_ENABLETEMPLATEHANDLE, 12, 96, 120, 10, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "CF_FIXEDPITCHONLY", I_CF_FIXEDPITCHONLY, 12, 108, 120, 10, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "CF_FORCEFONTEXIST", I_CF_FORCEFONTEXIST, 12, 120, 120, 10, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "CF_INITTOLOGFONTSTRUCT", I_CF_INITTOLOGFONTSTRUCT, 12, 132, 120, 10, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "CF_LIMITSIZE", I_CF_LIMITSIZE, 12, 144, 120, 10, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "CF_NOFACESEL", I_CF_NOFACESEL, 12, 156, 120, 10, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "CF_NOOEMFONTS", I_CF_NOOEMFONTS, 12, 168, 120, 10, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "CF_NOSIMULATIONS", I_CF_NOSIMULATIONS, 12, 180, 120, 10, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "CF_NOSIZESEL", I_CF_NOSIZESEL, 12, 192, 120, 10, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "CF_NOSTYLESEL", I_CF_NOSTYLESEL, 12, 204, 120, 10, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "CF_NOVECTORFONTS", I_CF_NOVECTORFONTS, 12, 216, 120, 10, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "CF_PRINTERFONTS", I_CF_PRINTERFONTS, 12, 228, 120, 10, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "CF_SCALABLEONLY", I_CF_SCALABLEONLY, 12, 240, 120, 10, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "CF_SHOWHELP", I_CF_SHOWHELP, 12, 264, 120, 10, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "CF_SCREENFONTS", I_CF_SCREENFONTS, 12, 252, 120, 10, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "CF_USESTYLE", I_CF_USESTYLE, 12, 276, 120, 10, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "CF_WYSIWYG", I_CF_WYSIWYG, 12, 288, 120, 10, BS_AUTOCHECKBOX | WS_TABSTOP +} + + +Find_Flags_Dialog DIALOG 8, 24, 207, 306 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION +CAPTION "Find/Replace Dialog Flags" +FONT 8, "MS Sans Serif" +{ + DEFPUSHBUTTON "OK", IDOK, 148, 6, 50, 14 + PUSHBUTTON "Cancel", IDCANCEL, 148, 24, 50, 14 + PUSHBUTTON "Help", IDHELP, 148, 42, 50, 14 + CHECKBOX "FR_DIALOGTERM", I_FR_DIALOGTERM, 24, 12, 120, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "FR_DOWN", I_FR_DOWN, 24, 24, 120, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "FR_ENABLEHOOK", I_FR_ENABLEHOOK, 24, 36, 120, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "FR_ENABLETEMPLATE", I_FR_ENABLETEMPLATE, 24, 48, 120, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "FR_ENABLETEMPLATEHANDLE", I_FR_ENABLETEMPLATEHANDLE, 24, 60, 120, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "FR_FINDNEXT", I_FR_FINDNEXT, 24, 72, 120, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "FR_HIDEMATCHCASE", I_FR_HIDEMATCHCASE, 24, 84, 120, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "FR_HIDEWHOLEWORD", I_FR_HIDEWHOLEWORD, 24, 96, 120, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "FR_HIDEUPDOWN", I_FR_HIDEUPDOWN, 24, 108, 120, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "FR_MATCHCASE", I_FR_MATCHCASE, 24, 120, 120, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "FR_NOMATCHCASE", I_FR_NOMATCHCASE, 24, 132, 120, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "FR_NOUPDOWN", I_FR_NOUPDOWN, 24, 144, 120, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "FR_NOWHOLEWORD", I_FR_NOWHOLEWORD, 24, 156, 120, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "FR_REPLACE", I_FR_REPLACE, 24, 168, 120, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "FR_REPLACEALL", I_FR_REPLACEALL, 24, 180, 120, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "FR_SHOWHELP", I_FR_SHOWHELP, 24, 192, 120, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "FR_WHOLEWORD", I_FR_WHOLEWORD, 24, 204, 120, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CONTROL "", -1, "static", SS_BLACKRECT | WS_CHILD | WS_VISIBLE, 12, 12, 11, 13 + CONTROL "", -1, "static", SS_BLACKRECT | WS_CHILD | WS_VISIBLE, 12, 72, 11, 13 + CONTROL "", -1, "static", SS_BLACKRECT | WS_CHILD | WS_VISIBLE, 12, 168, 11, 13 + CONTROL "", -1, "static", SS_BLACKRECT | WS_CHILD | WS_VISIBLE, 12, 180, 11, 13 + CONTROL "", -1, "static", SS_BLACKRECT | WS_CHILD | WS_VISIBLE, 24, 228, 11, 13 + CONTROL "Marks flags that are set by the system and must be cleared by the user.", -1, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 48, 228, 98, 36 +} + + +Print_Flags_Dialog DIALOG 4, 17, 239, 287 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Print / PrintSetup Flags" +FONT 8, "MS Sans Serif" +{ + DEFPUSHBUTTON "OK", IDOK, 180, 6, 50, 14 + PUSHBUTTON "Cancel", IDCANCEL, 180, 24, 50, 14 + PUSHBUTTON "Help", CM_R_HELP, 180, 42, 50, 14 + CHECKBOX "PD_ALLPAGES", I_PD_ALLPAGES, 12, 12, 144, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "PD_COLLATE", I_PD_COLLATE, 12, 24, 144, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "PD_DISABLEPRINTTOFILE", I_PD_DISABLEPRINTTOFILE, 12, 36, 144, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "PD_ENABLEPRINTHOOK", I_PD_ENABLEPRINTHOOK, 12, 48, 144, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "PD_ENABLEPRINTTEMPLATE", I_PD_ENABLEPRINTTEMPLATE, 12, 60, 144, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "PD_ENABLEPRINTTEMPLATEHANDLE", I_PD_ENABLEPRINTTEMPLATEHANDLE, 12, 72, 144, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "PD_ENABLESETUPHOOK", I_PD_ENABLESETUPHOOK, 12, 84, 144, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "PD_ENABLESETUPTEMPLATE", I_PD_ENABLESETUPTEMPLATE, 12, 96, 144, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "PD_ENABLESETUPTEMPLATEHANDLE", I_PD_ENABLESETUPTEMPLATEHANDLE, 12, 108, 144, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "PD_HIDEPRINTTOFILE", I_PD_HIDEPRINTTOFILE, 12, 120, 144, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "PD_NOPAGENUMS", I_PD_NOPAGENUMS, 12, 132, 144, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "PD_NOSELECTION", I_PD_NOSELECTION, 12, 144, 144, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "PD_NOWARNING", I_PD_NOWARNING, 12, 156, 144, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "PD_PAGENUMS", I_PD_PAGENUMS, 12, 168, 144, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "PD_PRINTSETUP", I_PD_PRINTSETUP, 12, 180, 144, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "PD_PRINTTOFILE", I_PD_PRINTTOFILE, 12, 192, 144, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "PD_RETURNDC", I_PD_RETURNDC, 12, 204, 144, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "PD_RETURNDEFAULT", I_PD_RETURNDEFAULT, 12, 216, 144, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "PD_RETURNIC", I_PD_RETURNIC, 12, 228, 144, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "PD_SELECTION", I_PD_SELECTION, 12, 240, 144, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "PD_SHOWHELP", I_PD_SHOWHELP, 12, 252, 144, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "PD_USEDEVMODECOPIES", I_PD_USEDEVMODECOPIES, 12, 264, 144, 12, BS_AUTOCHECKBOX | WS_TABSTOP +} + + +AboutDialog DIALOG 6, 15, 194, 119 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "About" +FONT 8, "MS Sans Serif" +{ + DEFPUSHBUTTON "OK", IDOK, 72, 96, 50, 14 + LTEXT "Common Dialog Test Jig Exerciser, version 1.00", -1, 13, 36, 168, 12 + LTEXT "(c) 1999, Eric Williams. Rights are as granted under the WINE license. Don't hoard code...share it!", -1, 18, 60, 157, 24 + ICON "AboutIcon", -1, 84, 12, 18, 20 +} + + +AboutIcon ICON +{ + '00 00 01 00 01 00 20 20 10 00 00 00 00 00 E8 02' + '00 00 16 00 00 00 28 00 00 00 20 00 00 00 40 00' + '00 00 01 00 04 00 00 00 00 00 80 02 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 00 FF FF 00 FF 00' + '00 00 FF 00 FF 00 FF FF 00 00 FF FF FF 00 70 00' + '00 00 00 00 00 00 00 00 00 00 00 00 00 00 78 88' + '88 88 88 88 88 88 88 88 88 88 88 88 88 80 78 88' + '88 88 88 88 88 88 88 88 88 88 88 88 88 80 78 88' + '88 88 88 88 88 88 88 88 88 88 88 88 88 80 78 88' + '88 88 88 88 88 88 88 88 88 88 88 88 88 80 78 88' + '88 88 88 88 88 88 88 00 00 88 88 88 88 80 78 88' + '88 88 88 88 88 88 88 88 88 08 88 88 88 80 78 88' + '88 88 00 00 88 88 08 80 00 08 88 88 88 80 78 88' + '88 88 08 88 08 88 08 08 88 08 88 88 88 80 78 88' + '88 88 08 88 80 88 08 08 88 08 88 88 88 80 78 88' + '88 88 08 88 80 88 08 08 88 08 88 88 88 80 78 88' + '88 88 08 88 80 88 08 08 88 08 88 88 88 80 78 88' + '88 88 08 88 80 88 08 80 00 08 88 88 88 80 78 88' + '88 88 08 88 80 88 08 88 88 88 88 88 88 80 78 88' + '88 88 08 88 08 88 08 88 88 88 88 88 88 80 78 88' + '88 88 00 00 88 88 08 88 88 88 88 88 88 80 78 88' + '88 88 88 88 88 88 88 88 88 88 88 88 88 80 78 88' + '88 88 88 88 88 88 88 88 88 88 88 88 88 80 78 88' + '88 88 88 88 88 88 88 88 88 88 88 88 88 80 78 80' + '00 08 88 00 08 80 88 08 80 80 88 08 80 80 78 08' + '88 80 80 88 80 80 88 08 80 80 88 08 80 80 78 08' + '88 88 80 88 80 80 88 08 80 80 88 08 80 80 78 08' + '88 88 80 88 80 80 88 08 80 80 88 08 80 80 78 08' + '88 88 80 88 80 80 88 08 80 80 88 08 80 80 78 08' + '88 88 88 00 08 80 00 80 08 80 00 80 08 80 78 08' + '88 88 88 88 88 88 88 88 88 88 88 88 88 80 78 08' + '88 80 88 88 88 88 88 88 88 88 88 88 88 80 78 80' + '00 08 88 88 88 88 88 88 88 88 88 88 88 80 78 88' + '88 88 88 88 88 88 88 88 88 88 88 88 88 80 78 88' + '88 88 88 88 88 88 88 88 88 88 88 88 88 80 78 88' + '88 88 88 88 88 88 88 88 88 88 88 88 88 80 77 77' + '77 77 77 77 77 77 77 77 77 77 77 77 77 77 00 00' + '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00' + '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00' + '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00' + '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00' + '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00' + '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00' + '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00' + '00 00 00 00 00 00 00 00 00 00 00 00 00 00' +} + +File_Flags_Dialog DIALOG 6, 15, 207, 227 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Open File/Save File Flags" +FONT 8, "MS Sans Serif" +{ + DEFPUSHBUTTON "OK", IDOK, 148, 6, 50, 14 + PUSHBUTTON "Cancel", IDCANCEL, 148, 24, 50, 14 + PUSHBUTTON "Help", CM_R_HELP, 148, 42, 50, 14 + CHECKBOX "OFN_ALLOWMULTISELECT", I_OFN_ALLOWMULTISELECT, 12, 12, 132, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "OFN_CREATEPROMPT", I_OFN_CREATEPROMPT, 12, 24, 132, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "OFN_ENABLEHOOK", I_OFN_ENABLEHOOK, 12, 36, 132, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "OFN_ENABLETEMPLATE", I_OFN_ENABLETEMPLATE, 12, 48, 132, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "OFN_ENABLETEMPLATEHANDLE", I_OFN_ENABLETEMPLATEHANDLE, 12, 60, 132, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "OFN_EXTENSIONDIFFERENT", I_OFN_EXTENSIONDIFFERENT, 12, 72, 132, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "OFN_FILEMUSTEXIST", I_OFN_FILEMUSTEXIST, 12, 84, 132, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "OFN_HIDEREADONLY", I_OFN_HIDEREADONLY, 12, 96, 132, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "OFN_NOCHANGEDIR", I_OFN_NOCHANGEDIR, 12, 108, 132, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "OFN_NOREADONLYRETURN", I_OFN_NOREADONLYRETURN, 12, 120, 132, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "OFN_NOTESTFILECREATE", I_OFN_NOTESTFILECREATE, 12, 132, 132, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "OFN_NOVALIDATE", I_OFN_NOVALIDATE, 12, 144, 132, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "OFN_OVERWRITEPROMPT", I_OFN_OVERWRITEPROMPT, 12, 156, 132, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "OFN_PATHMUSTEXIST", I_OFN_PATHMUSTEXIST, 12, 168, 132, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "OFN_READONLY", I_OFN_READONLY, 12, 180, 132, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "OFN_SHAREAWARE", I_OFN_SHAREAWARE, 12, 192, 132, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "OFN_SHOWHELP", I_OFN_SHOWHELP, 12, 204, 132, 12, BS_AUTOCHECKBOX | WS_TABSTOP +} diff --git a/programs/cmdlgtst/cmdlgtst.c b/programs/cmdlgtst/cmdlgtst.c new file mode 100644 index 00000000000..0e228b2773d --- /dev/null +++ b/programs/cmdlgtst/cmdlgtst.c @@ -0,0 +1,802 @@ +// (c) 1999 Eric Williams. Rights as specified under the WINE +// License. Don't hoard code; share it! + +// +// One might call this a Commdlg test jig. Its sole function in life +// is to call the Commdlg Common Dialogs; at present it doesn't even +// do anything horribly interesting with the results. + +// Ideally it would also do event logging and be a bit less stupid +// about displaying the results of the various requesters. But hey, +// it's only a first step. :-) + +#include <windows.h> +#include <commdlg.h> +#include <stdio.h> +#include "cmdlgr.h" + +// This structure is to set up flag / control associations for the custom +// requesters. The ft_id is the id for the control (usually generated +// by the system) and the ft_bit is the flag bit which goes into the +// settings longword for the various Commdlg structures. It is assumed +// that all flags fit in an unsigned long and that all bits are in fact +// one bit. + +// The array of entries is terminated by {IDOK, 0}; the assumption is that +// IDOK would never be associated with a dialogbox control (since it's +// usually the ID of the OK button}. + +struct FlagTableEntry { + int ft_id; + unsigned long ft_bit; +}; + +// #ifdef __WINE_WINDOWS_H +// #define EXPORT +// #define HWND HWND32 +// int ctx_debug = 0; +// #else +// #define EXPORT _export +// #endif + +//#define FAR +#define EXPORT + +static char menuName[] = "TestCommdlgMenu"; +static char className[] = "TestCommdlg"; +static char windowName[] = "TestCommdlg Window"; + +// global hInstance variable. This makes the code non-threadable, +// but wotthehell; this is Win32 anyway! (Though it does work +// under Win16, if one doesn't run more than one copy at a time.) + +static HINSTANCE g_hInstance; + +// global CommDlg data structures for modals. These are placed here +// so that the custom dialog boxes can get at them. + +static PRINTDLG pd; +static COLORREF cc_cr[16]; +static CHOOSECOLOR cc; +static LOGFONT cf_lf; +static CHOOSEFONT cf; +static char ofn_filepat[] = "All Files (*.*)\0*.*\0Only Text Files (*.txt)\0*.txt\0"; +static char ofn_result[1024]; +static OPENFILENAME ofn; + +// Stuff for find and replace. These are modeless, so I have to put them here. + +static HWND findDialogBox = 0; +static UINT findMessageId = 0; + +static int findDialogBoxInit = 0; +static int findDialogStructInit = 0; +static FINDREPLACE frS; +static char fromstring[1024], tostring[1024]; + +// Utility routines. Currently there is only one, and it's a nasty +// reminder that I'm not done yet. + +void nyi(HWND hWnd) +{ + MessageBox(hWnd, "Not yet implemented!", "NYI", MB_ICONEXCLAMATION | MB_OK); +} + + +// Initial initialization code. This code simply shoves in predefined +// data into the COMMDLG data structures; in the future, I might use +// a series of loadable resources, or static initializers; of course, +// if Microsoft decides to change the field ordering, I'd be screwed. + +void mwi_Print(HWND hWnd) +{ + pd.lStructSize = sizeof(PRINTDLG); + pd.hwndOwner = hWnd; + pd.hDevMode = 0; + pd.hDevNames = 0; + pd.hDC = 0; + pd.Flags = 0; + pd.nMinPage = 1; + pd.nMaxPage = 100; + pd.hInstance = 0; + pd.lCustData = 0; + pd.lpfnPrintHook = 0; + pd.lpfnSetupHook = 0; + pd.lpPrintTemplateName = 0; + pd.lpSetupTemplateName = 0; + pd.hPrintTemplate = 0; + pd.hSetupTemplate = 0; + +} + +void mwi_Color(HWND hWnd) +{ + int i; + + // there's probably an init call for this, somewhere. + + for(i=0;i<16;i++) + cc_cr[i] = RGB(0,0,0); + + cc.lStructSize = sizeof(CHOOSECOLOR); + cc.hwndOwner = hWnd; + cc.hInstance = 0; + cc.rgbResult = RGB(0,0,0); + cc.lpCustColors = cc_cr; + cc.Flags = 0; + cc.lCustData = 0; + cc.lpfnHook = 0; + cc.lpTemplateName = 0; +} + +void mwi_Font(HWND hWnd) +{ + cf.lStructSize = sizeof(CHOOSEFONT); + cf.hwndOwner = hWnd; + cf.hDC = 0; + cf.lpLogFont = &cf_lf; + cf.Flags = 0; + cf.rgbColors = RGB(0,0,0); // what is *this* doing here?? + cf.lCustData = 0; + cf.lpfnHook = 0; + cf.lpTemplateName = 0; + cf.hInstance = 0; + cf.lpszStyle = 0; + cf.nFontType = 0; + cf.nSizeMin = 8; + cf.nSizeMax = 72; +} + +void mwi_File(HWND hWnd) +{ + ofn.lStructSize = sizeof(OPENFILENAME); + ofn.hwndOwner = hWnd; + ofn.hInstance = 0; + ofn.lpstrFilter = (LPSTR) ofn_filepat; + ofn.lpstrCustomFilter = 0; + ofn.nMaxCustFilter = 0; + ofn.nFilterIndex = 0; + ofn.lpstrFile = ofn_result; + ofn.nMaxFile = sizeof(ofn_result); + ofn.lpstrFileTitle = 0; + ofn.nMaxFileTitle = 0; + ofn.lpstrInitialDir = 0; + ofn.lpstrTitle = "Open File"; + ofn.Flags = 0; + ofn.nFileOffset = 0; + ofn.nFileExtension = 0; + ofn.lpstrDefExt = "*"; + ofn.lCustData = 0; + ofn.lpfnHook = 0; + ofn.lpTemplateName = 0; + + ofn_result[0] = '\0'; +} + +void mwi_FindReplace(HWND hWnd) +{ + frS.lStructSize = sizeof(FINDREPLACE); + frS.hwndOwner = hWnd; + frS.hInstance = 0; + frS.Flags = FR_DOWN; + frS.lpstrFindWhat = fromstring; + frS.lpstrReplaceWith = tostring; + frS.wFindWhatLen = sizeof(fromstring); + frS.wReplaceWithLen = sizeof(tostring); + frS.lCustData = 0; + frS.lpfnHook = 0; + frS.lpTemplateName = 0; + + fromstring[0] = '\0'; + tostring[0] = '\0'; + findMessageId = RegisterWindowMessage(FINDMSGSTRING); +} + +void mwi_InitAll(HWND hWnd) +{ + mwi_Print(hWnd); + mwi_Font(hWnd); + mwi_Color(hWnd); + mwi_File(hWnd); + mwi_FindReplace(hWnd); +} + +// Various configurations for the window. Ideally, this +// would be stored with the window itself, but then, this +// isn't the brightest of apps. Wouldn't be hard to set up, +// though -- one of the neater functions of Windows, but if +// someone decides to load the windows themselves from resources, +// there might be a problem. + +void paintMainWindow(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam) +{ + PAINTSTRUCT ps; + RECT rect; + + // This is the Windows equivalent of one of my widgets, + // which basically just draws a large 'X'. + + BeginPaint(hWnd, &ps); + GetClientRect(hWnd, (LPRECT) &rect); + MoveToEx(ps.hdc, rect.left, rect.top, (POINT FAR *) 0); + LineTo(ps.hdc, rect.right, rect.bottom); + MoveToEx(ps.hdc, rect.left, rect.bottom, (POINT FAR *) 0); + LineTo(ps.hdc, rect.right, rect.top); + + EndPaint(hWnd, &ps); +} + +// This function simply returns an error indication. Naturally, +// I do not (yet) see an elegant method by which one can convert +// the CDERR_xxx return values into something resembling usable text; +// consult cderr.h to see what was returned. + +void mw_checkError(HWND hWnd) +{ + DWORD errval = CommDlgExtendedError(); + if(errval) { + char errbuf[80]; + + sprintf(errbuf, "CommDlgExtendedError(): error code %ld (0x%lx)", errval, errval); + MessageBox(hWnd, errbuf, "Error", MB_ICONEXCLAMATION | MB_OK); + } + else { + MessageBox(hWnd, "Nope, user canceled it.", "No", MB_OK); + } +} + +// The actual dialog function calls. These merely wrap the Commdlg +// calls, and do something (not so) intelligent with the result. +// Ideally, the main window would refresh and take into account the +// various values specified in the dialog. + +void mw_ColorSetup(HWND hWnd) +{ + if(ChooseColor(&cc)) { + MessageBox(hWnd, "Success.", "Yes", MB_OK); + } + else mw_checkError(hWnd); +} + +void mw_FontSetup(HWND hWnd) +{ + if(ChooseFont(&cf)) { + MessageBox(hWnd, "Success.", "Yes", MB_OK); + } + else mw_checkError(hWnd); +} + +void mw_FindSetup(HWND hWnd) +{ + if(findDialogBox == 0) { + findDialogBox = FindText(&frS); + if(findDialogBox==0) mw_checkError(hWnd); + } +} + +void mw_ReplaceSetup(HWND hWnd) +{ + if(findDialogBox == 0) { + findDialogBox = ReplaceText(&frS); + if(findDialogBox==0) mw_checkError(hWnd); + } +} + +void mw_OpenSetup(HWND hWnd) +{ + if(GetOpenFileName(&ofn)) { + MessageBox(hWnd, "Success.", "Yes", MB_OK); + } + else mw_checkError(hWnd); +} + +void mw_SaveSetup(HWND hWnd) +{ + if(GetSaveFileName(&ofn)) { + MessageBox(hWnd, "Success.", "Yes", MB_OK); + } + else mw_checkError(hWnd); +} + +// Can't find documentation in Borland for this one. Does it +// exist at all, or is it merely a subdialog of Print? + +void mw_PSetupSetup(HWND hWnd) +{ + nyi(hWnd); +} + +void mw_PrintSetup(HWND hWnd) +{ + if(PrintDlg(&pd)) { + // the following are suggested in the Borland documentation, + // but aren't that useful until WinE starts to actually + // function with respect to printing. + + // Escape(tmp.hDC, STARTDOC, 8, "Test-Doc", NULL); + + /* Print text and rectangle */ + + // TextOut(tmp.hDC, 50, 50, "Common Dialog Test Page", 23); + + // Rectangle(tmp.hDC, 50, 90, 625, 105); + // Escape(tmp.hDC, NEWFRAME, 0, NULL, NULL); + // Escape(tmp.hDC, ENDDOC, 0, NULL, NULL); + // DeleteDC(tmp.hDC); + if (pd.hDevMode != NULL) + GlobalFree(pd.hDevMode); + if (pd.hDevNames != NULL) + GlobalFree(pd.hDevNames); + + pd.hDevMode = 0; + pd.hDevNames = 0; + + MessageBox(hWnd, "Success.", "Yes", MB_OK); + } + else mw_checkError(hWnd); +} + +// Some support functions for the custom dialog box handlers. +// In particular, we have to set things properly, and get the flags back. + +void mwcd_SetFlags(HWND hWnd, struct FlagTableEntry *table, unsigned long flags) +{ + int i; + + for(i=0; table[i].ft_id != IDOK; i++) + { + CheckDlgButton(hWnd, table[i].ft_id,(table[i].ft_bit & flags) ? 1 : 0); + } +} + +unsigned long mwcd_GetFlags(HWND hWnd, struct FlagTableEntry * table) +{ + int i; + unsigned long l = 0; + + for(i=0; table[i].ft_id != IDOK; i++) + { + if(IsDlgButtonChecked(hWnd, table[i].ft_id) == 1) + l |= table[i].ft_bit; + } + + return l; +} + +// These functions are the custom dialog box handlers. +// The division of labor may be a tad peculiar; in particular, +// the flag tables should probably be in the main functions, +// not the handlers. I'll fix that later; this works as of right now. + +BOOL mwcd_Setup(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, + struct FlagTableEntry * table, unsigned long * flags) +{ + switch(uMsg) + { + case WM_INITDIALOG: + // Set the controls properly. + + mwcd_SetFlags(hWnd, table, *flags); + + return TRUE; // I would return FALSE if I explicitly called SetFocus(). + // As usual, Windows is weird. + + case WM_COMMAND: + switch(wParam) { + case IDOK: + *flags = mwcd_GetFlags(hWnd, table); + EndDialog(hWnd,1); + break; + + case IDCANCEL: + EndDialog(hWnd,0); + break; + + case CM_R_HELP: + break; // help? We don't need no steenkin help! + + default: + break; // eat the message + } + return TRUE; + + default: + return FALSE; // since I don't process this particular message + } +} + +BOOL CALLBACK mwcd_ColorSetup(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + static struct FlagTableEntry flagTable[] = { + {I_CC_RGBINIT, CC_RGBINIT}, + {I_CC_SHOWHELP, CC_SHOWHELP}, + {I_CC_PREVENTFULLOPEN, CC_PREVENTFULLOPEN}, + {I_CC_FULLOPEN, CC_FULLOPEN}, + {I_CC_ENABLETEMPLATEHANDLE, CC_ENABLETEMPLATEHANDLE}, + {I_CC_ENABLETEMPLATE, CC_ENABLETEMPLATE}, + {I_CC_ENABLEHOOK, CC_ENABLEHOOK}, + {IDOK, 0}, + }; + + return mwcd_Setup(hWnd, uMsg, wParam, lParam, flagTable, &cc.Flags); +} + +BOOL CALLBACK mwcd_FontSetup(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + static struct FlagTableEntry flagTable[] = { + {I_CF_APPLY, CF_APPLY}, + {I_CF_ANSIONLY, CF_ANSIONLY}, + {I_CF_BOTH, CF_BOTH}, + {I_CF_TTONLY, CF_TTONLY}, + {I_CF_EFFECTS, CF_EFFECTS}, + {I_CF_ENABLEHOOK, CF_ENABLEHOOK}, + {I_CF_ENABLETEMPLATE, CF_ENABLETEMPLATE}, + {I_CF_ENABLETEMPLATEHANDLE, CF_ENABLETEMPLATEHANDLE}, + {I_CF_FIXEDPITCHONLY, CF_FIXEDPITCHONLY}, + {I_CF_INITTOLOGFONTSTRUCT, CF_INITTOLOGFONTSTRUCT}, + {I_CF_LIMITSIZE, CF_LIMITSIZE}, + {I_CF_NOFACESEL, CF_NOFACESEL}, + {I_CF_USESTYLE, CF_USESTYLE}, + {I_CF_WYSIWYG, CF_WYSIWYG}, + {I_CF_SHOWHELP, CF_SHOWHELP}, + {I_CF_SCREENFONTS, CF_SCREENFONTS}, + {I_CF_SCALABLEONLY, CF_SCALABLEONLY}, + {I_CF_PRINTERFONTS, CF_PRINTERFONTS}, + {I_CF_NOVECTORFONTS, CF_NOVECTORFONTS}, + {I_CF_NOSTYLESEL, CF_NOSTYLESEL}, + {I_CF_NOSIZESEL, CF_NOSIZESEL}, + {I_CF_NOOEMFONTS, CF_NOOEMFONTS}, + {IDOK, 0}, + }; + + return mwcd_Setup(hWnd, uMsg, wParam, lParam, flagTable, &cf.Flags); +} + +BOOL CALLBACK mwcd_FindSetup(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + + static struct FlagTableEntry flagTable[] = { + {I_FR_DIALOGTERM, FR_DIALOGTERM}, + {I_FR_DOWN, FR_DOWN}, + {I_FR_ENABLEHOOK, FR_ENABLEHOOK}, + {I_FR_ENABLETEMPLATE, FR_ENABLETEMPLATE}, + {I_FR_ENABLETEMPLATEHANDLE, FR_ENABLETEMPLATEHANDLE}, + {I_FR_FINDNEXT, FR_FINDNEXT}, + {I_FR_HIDEMATCHCASE, FR_HIDEMATCHCASE}, + {I_FR_HIDEWHOLEWORD, FR_HIDEWHOLEWORD}, + {I_FR_HIDEUPDOWN, FR_HIDEUPDOWN}, + {I_FR_MATCHCASE, FR_MATCHCASE}, + {I_FR_NOMATCHCASE, FR_NOMATCHCASE}, + {I_FR_NOUPDOWN, FR_NOUPDOWN}, + {I_FR_NOWHOLEWORD, FR_NOWHOLEWORD}, + {I_FR_REPLACE, FR_REPLACE}, + {I_FR_REPLACEALL, FR_REPLACEALL}, + {I_FR_SHOWHELP, FR_SHOWHELP}, + {I_FR_WHOLEWORD, FR_WHOLEWORD}, + {IDOK, 0}, + }; + + return mwcd_Setup(hWnd, uMsg, wParam, lParam, flagTable, &frS.Flags); +} + +BOOL CALLBACK mwcd_PrintSetup(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + static struct FlagTableEntry flagTable[] = { + {I_PD_ALLPAGES, PD_ALLPAGES}, + {I_PD_COLLATE, PD_COLLATE}, + {I_PD_DISABLEPRINTTOFILE, PD_DISABLEPRINTTOFILE}, + {I_PD_ENABLEPRINTHOOK, PD_ENABLEPRINTHOOK}, + {I_PD_ENABLEPRINTTEMPLATE, PD_ENABLEPRINTTEMPLATE}, + {I_PD_ENABLEPRINTTEMPLATEHANDLE, PD_ENABLEPRINTTEMPLATEHANDLE}, + {I_PD_ENABLESETUPHOOK, PD_ENABLESETUPHOOK}, + {I_PD_ENABLESETUPTEMPLATE, PD_ENABLESETUPTEMPLATE}, + {I_PD_ENABLESETUPTEMPLATEHANDLE, PD_ENABLESETUPTEMPLATEHANDLE}, + {I_PD_HIDEPRINTTOFILE, PD_HIDEPRINTTOFILE}, + {I_PD_NOPAGENUMS, PD_NOPAGENUMS}, + {I_PD_NOSELECTION, PD_NOSELECTION}, + {I_PD_NOWARNING, PD_NOWARNING}, + {I_PD_PAGENUMS, PD_PAGENUMS}, + {I_PD_PRINTSETUP, PD_PRINTSETUP}, + {I_PD_PRINTTOFILE, PD_PRINTTOFILE}, + {I_PD_RETURNDC, PD_RETURNDC}, + {I_PD_RETURNDEFAULT, PD_RETURNDEFAULT}, + {I_PD_RETURNIC, PD_RETURNIC}, + {I_PD_SELECTION, PD_SELECTION}, + {I_PD_SHOWHELP, PD_SHOWHELP}, + {I_PD_USEDEVMODECOPIES, PD_USEDEVMODECOPIES}, + {IDOK, 0}, + }; + + return mwcd_Setup(hWnd, uMsg, wParam, lParam, flagTable, &pd.Flags); +} + +BOOL CALLBACK mwcd_FileSetup(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + static struct FlagTableEntry flagTable[] = { + {I_OFN_ALLOWMULTISELECT, OFN_ALLOWMULTISELECT}, + {I_OFN_CREATEPROMPT, OFN_CREATEPROMPT}, + {I_OFN_ENABLEHOOK, OFN_ENABLEHOOK}, + {I_OFN_ENABLETEMPLATE, OFN_ENABLETEMPLATE}, + {I_OFN_ENABLETEMPLATEHANDLE, OFN_ENABLETEMPLATEHANDLE}, + {I_OFN_EXTENSIONDIFFERENT, OFN_EXTENSIONDIFFERENT}, + {I_OFN_FILEMUSTEXIST, OFN_FILEMUSTEXIST}, + {I_OFN_HIDEREADONLY, OFN_HIDEREADONLY}, + {I_OFN_NOCHANGEDIR, OFN_NOCHANGEDIR}, + {I_OFN_NOREADONLYRETURN, OFN_NOREADONLYRETURN}, + {I_OFN_NOTESTFILECREATE, OFN_NOTESTFILECREATE}, + {I_OFN_NOVALIDATE, OFN_NOVALIDATE}, + {I_OFN_OVERWRITEPROMPT, OFN_OVERWRITEPROMPT}, + {I_OFN_PATHMUSTEXIST, OFN_PATHMUSTEXIST}, + {I_OFN_READONLY, OFN_READONLY}, + {I_OFN_SHAREAWARE, OFN_SHAREAWARE}, + {I_OFN_SHOWHELP, OFN_SHOWHELP}, + {IDOK, 0}, + }; + + return mwcd_Setup(hWnd, uMsg, wParam, lParam, flagTable, &pd.Flags); +} + +BOOL CALLBACK mwcd_About(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + switch(uMsg) { + case WM_INITDIALOG: return TRUE; // let WINDOWS set the focus. + case WM_COMMAND: EndDialog(hWnd, 0); return TRUE; // it's our OK button. + default: return FALSE; // it's something else, let Windows worry about it + } +} + + +// These functions call custom dialog boxes (resource-loaded, if I do this right). +// Right now they don't do a heck of a lot, but at some future time +// they will muck about with the flags (and be loaded from the flags) of +// the CommDlg structures initialized by the mwi_xxx() routines. + +void mwc_ColorSetup(HWND hWnd) +{ + int r = DialogBox(g_hInstance, "Color_Flags_Dialog", hWnd, (DLGPROC) mwcd_ColorSetup); + if(r < 0) { MessageBox(hWnd, "Failure opening Color_Flags_Dialog box", "Error", MB_ICONASTERISK|MB_OK); } +} + +void mwc_FontSetup(HWND hWnd) +{ + int r = DialogBox(g_hInstance, "Font_Flags_Dialog", hWnd, (DLGPROC) mwcd_FontSetup); + if(r < 0) { MessageBox(hWnd, "Failure opening Font_Flags_Dialog box", "Error", MB_ICONASTERISK|MB_OK); } +} + +void mwc_FindReplaceSetup(HWND hWnd) +{ + int r = DialogBox(g_hInstance, "Find_Flags_Dialog", hWnd, (DLGPROC) mwcd_FindSetup); + if(r < 0) { MessageBox(hWnd, "Failure opening Find_Flags_Dialog box", "Error", MB_ICONASTERISK|MB_OK); } +} + +void mwc_PrintSetup(HWND hWnd) +{ + int r = DialogBox(g_hInstance, "Print_Flags_Dialog", hWnd, (DLGPROC) mwcd_PrintSetup); + if(r < 0) { MessageBox(hWnd, "Failure opening Print_Flags_Dialog box", "Error", MB_ICONASTERISK|MB_OK); } +} + +void mwc_FileSetup(HWND hWnd) +{ + int r = DialogBox(g_hInstance, "File_Flags_Dialog", hWnd, (DLGPROC) mwcd_PrintSetup); + if(r < 0) { MessageBox(hWnd, "Failure opening File_Flags_Dialog box", "Error", MB_ICONASTERISK|MB_OK); } +} + +// Main window message dispatcher. Here the messages get chewed up +// and spit out. Note the ugly hack for the modeless Find/Replace box; +// this looks like it was bolted on with hexhead screws and is now +// dangling from Windows like a loose muffler. Sigh. + +LRESULT CALLBACK EXPORT mainWindowDispatcher( + HWND hWnd, + UINT uMsg, + WPARAM wParam, + LPARAM lParam +) +{ + + if(uMsg == findMessageId) { + FINDREPLACE FAR* lpfr = (FINDREPLACE FAR*) lParam; + if(lpfr->Flags & FR_DIALOGTERM) { + MessageBox(hWnd, "User closing us down.", "Down", MB_OK); + findDialogBox = 0; + } + else if (lpfr->Flags & FR_FINDNEXT) { + MessageBox(hWnd, "Finding next occurrence.", "Findnext", MB_OK); + } + else if (lpfr->Flags & FR_REPLACE) { + MessageBox(hWnd, "Replacing next occurence.", "Replace", MB_OK); + } + else if (lpfr->Flags & FR_REPLACEALL) { + MessageBox(hWnd, "Replacing all occurrences.", "Replace All", MB_OK); + } + else { + MessageBox(hWnd, "Eh?", "Eh?", MB_OK); + } + return 1; + } + else switch(uMsg) { + case WM_CREATE: + // this is always the first message...at least as far as + // we are concerned. + mwi_InitAll(hWnd); + break; + + case WM_PAINT: + // Well, draw something! + paintMainWindow(hWnd, uMsg, wParam, lParam); + break; + + case WM_DESTROY: + // Uh oh. Eject! Eject! Eject! + PostQuitMessage(0); + break; + + case WM_COMMAND: + // menu or accelerator pressed; do something. + + switch(wParam) { + case CM_U_EXIT: + // Uh oh. Eject! Eject! Eject! + PostQuitMessage(0); + break; + + // these actually call the Common Dialogs. + + case CM_U_COLOR: + mw_ColorSetup(hWnd); return 1; + + case CM_U_FONT: + mw_FontSetup(hWnd); return 1; + + case CM_U_FIND: + mw_FindSetup(hWnd); return 1; + + case CM_U_REPLACE: + mw_ReplaceSetup(hWnd); return 1; + + case CM_U_OPEN: + mw_OpenSetup(hWnd); return 1; + + case CM_U_SAVE: + mw_SaveSetup(hWnd); return 1; + + case CM_U_PSETUP: + mw_PSetupSetup(hWnd); return 1; + + case CM_U_PRINT: + mw_PrintSetup(hWnd); return 1; + + // these set up various flags and values in the Common Dialog + // data structures, which are currently stored in static memory. + // The control dialogs themselves are resources as well. + + case CM_F_FILE: + mwc_FileSetup(hWnd); return 1; + + case CM_F_COLOR: + mwc_ColorSetup(hWnd); return 1; + + case CM_F_FONT: + mwc_FontSetup(hWnd); return 1; + + case CM_F_FINDREPLACE: + mwc_FindReplaceSetup(hWnd); return 1; + + case CM_F_PRINT: + mwc_PrintSetup(hWnd); return 1; + + case CM_H_ABOUT: + DialogBox(g_hInstance, "AboutDialog", hWnd, (DLGPROC) mwcd_About); + // return value? *What* return value? + return 1; + + default: + nyi(hWnd); return 1; + } + break; + + default: + return DefWindowProc(hWnd, uMsg, wParam, lParam); + } + return 0; +} + +// Class registration. One might call this a Windowsism. + +int registerMainWindowClass(HINSTANCE hInstance) +{ + WNDCLASS wndClass; + + wndClass.style = CS_HREDRAW|CS_VREDRAW; + wndClass.lpfnWndProc = mainWindowDispatcher; + wndClass.cbClsExtra = 0; + wndClass.cbWndExtra = 0; + wndClass.hInstance = hInstance; + //wndClass.hIcon = LoadIcon(hInstance, "whello"); + //wndClass.hCursor = LoadCursor(hInstance, IDC_ARROW); + wndClass.hIcon = 0; + wndClass.hCursor = 0; + wndClass.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH); + wndClass.lpszMenuName = menuName; + wndClass.lpszClassName = className; + + return RegisterClass(&wndClass); +} + +// Another Windowsism; this one's not too bad, as it compares +// favorably with CreateWindow() in X (mucking about with X Visuals +// can get messy; at least here we don't have to worry about that). + +HWND createMainWindow(HINSTANCE hInstance, int show) +{ + HWND hWnd; + + hWnd = CreateWindow( + className, // classname + windowName, // windowname/title + WS_OVERLAPPEDWINDOW, // dwStyle + 0, //x + 0, //y + CW_USEDEFAULT, //width + CW_USEDEFAULT, //height + 0, // parent window + 0, // menu + hInstance, // instance + 0 // passthrough for MDI + ); + + if(hWnd==0) return 0; + + ShowWindow(hWnd, show); + UpdateWindow(hWnd); + + return hWnd; +} + +int messageLoop(HINSTANCE hInstance, HWND hWnd) +{ + + MSG msg; + + while(GetMessage(&msg, 0, 0, 0)) { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + + return msg.wParam; +} + +// Oh, did we tell you that main() isn't the name of the +// thing called in a Win16/Win32 app? And then there are +// the lack of argument lists, the necessity (at least in Win16) +// of having to deal with class registration exactly once (as the +// app may be run again), and some other bizarre holdovers from +// Windows 3.x days. But hey, Solitaire still works. + +int PASCAL WinMain( + HINSTANCE hInstance, HINSTANCE hPrevInstance, + LPSTR lpszCmdLine, int nCmdShow +) +{ + HWND hWnd; + + if(hPrevInstance==0) { + if(!registerMainWindowClass(hInstance)) + return -1; + } + + g_hInstance = hInstance; + + hWnd = createMainWindow(hInstance,nCmdShow); + if(hWnd == 0) + return -1; + + + return messageLoop(hInstance, hWnd); +} + +// And now the end of the program. Enjoy. + +// (c) 1999 Eric Williams. Rights as specified under the WINE +// License. Don't hoard code; share it! + -- GitLab