1
0
Fork 0
mirror of synced 2025-03-07 03:53:26 +01:00
wine/misc/commdlg.c
Alexandre Julliard fa68b75bad Release 950403
Sun Apr  2 18:31:12 1995  Alexandre Julliard  (julliard@sunsite.unc.edu)

	* [Configure] [if1632/Imakefile]
	Removed new build and short names options.

	* [if1632/*.c] [tools/build.c]
	Implemented compiled call-back functions for better performance;
	all the relay code is now done in assembly code generated by the
	build program.
	Relay code is no longer dependent on being loaded below 64K.

	* [loader/resource.c]
	Fixed memory leak in LoadString(). A fix will also be needed for
	other resources.

	* [memory/global.c]
	Implemented global heap arenas, so we can store informations about
	global blocks, like lock counts or owner handle.
	Implemented FarGetOwner() and FarSetOwner().
	Implemented global heap TOOLHELP functions.

	* [memory/selector.c]
	Bug fix: it was not possible to re-use a free selector.

Sun Apr 2 01:34:52 1995 Constantine Sapuntzakis  (csapuntz@mit.edu)

	*  [controls/listbox.c]
	Major work on listbox code
         - Many bugs fixed (still many bugs)
         - More messages supported
         - Code simplified

Fri Mar 31 03:27:16 EST 1995 William Magro (wmagro@tc.cornell.edu)

	* [controls/edit.c]
	Lots of bug fixes related to diappearing text, lost carets,
	highlighting, segmentation faults, occurance of random
	characters, insertion of characters over selection, misplaced
	caret location, display corruption, end of line behavior, etc.

	* [controls/widgets.c]
	EDIT class doesn't want to use CS_PARENTDC flag.

Thu Mar 30 20:58:25 1995   Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
        
	* [loader/selector.c]
	  FixupFunctionPrologs() should also handle multiple data modules.
	  (this bug only became visible because MakeProcInstance() was fixed
	  in 950319)
	
	* [misc/dosfs.c]
	  Simplified DOS_SimplifyPath.
	  Small fix to DOS_opendir to reuse an entry if an open directory
	  is opened again, to prevent "too many open directories" messages.

Thu Mar 30 12:05:05 1995 Martin von Loewis  <loewis@informatik.hu-berlin.de>

	* [if1632/compobj.spec][include/compobj.h][misc/compobj.c]
	CoDisconnectObject: new stub function

	* [include/msdos.h]
	fix DOSVERSION

	* [loader/ne_image.c]
	NE_FixupSegment: Be more generous on additive fixups

	* [if1632/user.spec][misc/network.c]
	Add more WNet* stubs

Wed Mar 29 11:47:22 1995   Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>

        * [controls/listbox.c]
	  DlgDirList(): send segptr instead of linear pointer 
	  in message to static control
	* [controls/menu.c]
	  Tried to implement ownerdrawn menuitems. Doesn't work.
	* [if1632/gdi.spec] [include/windows.h] [objects/font.c]
	  Provide a stub for GetRasterizerCaps()
	* [loader/selector.c]
	  Pass end address instead of length to LocalInit() in 
	  CreateSelectors()
	* [memory/local.c]
	  LocalInit(): If there's already a local heap in the segment, do
	  nothing and return TRUE
	* [objects/linedda.c]
	  Replaced buggy LineDDA() with a Bresenham algorithm. Should work
	  now.
	* [windows/cursor.c]
	  LoadCursor()/CreateCursor(): Cleaned up the mess. Needs some
	  more work still.

Tue Mar 21 17:54:43 1995   Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>

        * [if1632/relay.c] [if1632/callback.c] [include/dlls.h]
	  [if1632/winprocs.spec] [if1632/winprocs.c] [include/winprocs.h]
	  [controls/widgets.c] [misc/shell.c] [misc/commdlg.c]
	  [windows/nonclient.c] [misc/message.c]
	  Added a new builtin DLL that provides 16 bit entry points for all
	  the Def*Procs (DefDlgProc, ButtonProc etc.). OWL programs work
	  again.
	* [misc/shell.c]
	  RegOpenKey()/RegCreateKey() bugs fixed.
        * [loader/ne_image.c]
	  Skipping the initialization of a DLL when CS == 0 was broken.
1995-04-03 16:55:37 +00:00

1131 lines
33 KiB
C

/*
* COMMDLG functions
*
* Copyright 1994 Martin Ayotte
*/
/*
#define DEBUG_OPENDLG
#define DEBUG_OPENDLG_DRAW
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "dialog.h"
#include "win.h"
#include "user.h"
#include "message.h"
#include "library.h"
#include "commdlg.h"
#include "dlgs.h"
#include "selectors.h"
#define OPENFILEDLG2 11
#define SAVEFILEDLG2 12
static DWORD CommDlgLastError = 0;
static HBITMAP hFolder = 0;
static HBITMAP hFolder2 = 0;
static HBITMAP hFloppy = 0;
static HBITMAP hHDisk = 0;
static HBITMAP hCDRom = 0;
int DOS_GetDefaultDrive(void);
void DOS_SetDefaultDrive(int drive);
char *DOS_GetCurrentDir(int drive);
int DOS_ChangeDir(int drive, char *dirname);
BOOL FileDlg_Init(HWND hWnd, DWORD lParam);
BOOL OpenDlg_ScanFiles(HWND hWnd, WORD nDrive, LPSTR newPath, LPSTR fileSpec);
BOOL OpenDlg_ScanDir(HWND hWnd, WORD nDrive, LPSTR newPath, LPSTR fileSpec);
LPSTR OpenDlg_GetFileType(LPCSTR types, WORD index);
LPSTR OpenDlg_ExtractCurDir(LPSTR FullPath, short MaxLen);
BOOL FileOpenDlgProc(HWND hWnd, WORD wMsg, WORD wParam, LONG lParam);
BOOL FileSaveDlgProc(HWND hWnd, WORD wMsg, WORD wParam, LONG lParam);
BOOL ColorDlgProc(HWND hWnd, WORD wMsg, WORD wParam, LONG lParam);
BOOL PrintDlgProc(HWND hWnd, WORD wMsg, WORD wParam, LONG lParam);
BOOL PrintSetupDlgProc(HWND hWnd, WORD wMsg, WORD wParam, LONG lParam);
BOOL ReplaceTextDlgProc(HWND hWnd, WORD wMsg, WORD wParam, LONG lParam);
BOOL FindTextDlgProc(HWND hWnd, WORD wMsg, WORD wParam, LONG lParam);
/***********************************************************************
* GetOpenFileName [COMMDLG.1]
*/
BOOL GetOpenFileName(LPOPENFILENAME lpofn)
{
HANDLE hDlgTmpl;
HANDLE hResInfo;
HINSTANCE hInst;
WND *wndPtr;
BOOL bRet;
printf("GetOpenFileName(%p); !\n", lpofn);
if (lpofn == NULL) return FALSE;
printf("GetOpenFileName // Flags=%08lX !\n", lpofn->Flags);
printf("GetOpenFileName // nMaxFile=%ld lpstrFile='%s' !\n",
lpofn->nMaxFile, PTR_SEG_TO_LIN(lpofn->lpstrFile));
printf("GetOpenFileName // lpstrInitialDir='%s' !\n", PTR_SEG_TO_LIN(lpofn->lpstrInitialDir));
printf("GetOpenFileName // lpstrFilter=%p !\n", lpofn->lpstrFilter);
printf("GetOpenFileName // nFilterIndex=%ld !\n", lpofn->nFilterIndex);
if (lpofn->Flags & OFN_ENABLETEMPLATEHANDLE) {
hDlgTmpl = lpofn->hInstance;
}
else {
if (lpofn->Flags & OFN_ENABLETEMPLATE) {
printf("GetOpenFileName // avant FindResource hInstance=%04X lpTemplateName='%s' !\n",
lpofn->hInstance, PTR_SEG_TO_LIN(lpofn->lpTemplateName));
hInst = lpofn->hInstance;
hResInfo = FindResource(hInst,
(LPSTR)lpofn->lpTemplateName, RT_DIALOG);
}
else {
printf("GetOpenFileName // avant FindResource hSysRes=%04X !\n", hSysRes);
hInst = hSysRes;
hResInfo = FindResource(hInst, MAKEINTRESOURCE(OPENFILEDLG2), RT_DIALOG);
}
if (hResInfo == 0) {
CommDlgLastError = CDERR_FINDRESFAILURE;
return FALSE;
}
printf("GetOpenFileName // apres FindResource hResInfo=%04X!\n", hResInfo);
hDlgTmpl = LoadResource(hInst, hResInfo);
}
if (hDlgTmpl == 0) {
CommDlgLastError = CDERR_LOADRESFAILURE;
return FALSE;
}
printf("GetOpenFileName // apres LoadResource hDlgTmpl=%04X!\n", hDlgTmpl);
wndPtr = WIN_FindWndPtr(lpofn->hwndOwner);
bRet = DialogBoxIndirectParam(wndPtr->hInstance, hDlgTmpl,
lpofn->hwndOwner, GetWndProcEntry16("FileOpenDlgProc"),
(DWORD)lpofn);
/* strcpy(lpofn->lpstrFile, "SETUP.TXT"); */
/* strcpy(lpofn->lpstrFileTitle, "SETUP.TXT");*/
/*
lpofn->nFileOffset = 0;
lpofn->nFileExtension = strlen(lpofn->lpstrFile) - 3;
bRet = TRUE;
*/
printf("GetOpenFileName // return lpstrFile='%s' !\n", PTR_SEG_TO_LIN(lpofn->lpstrFile));
return bRet;
}
/***********************************************************************
* GetSaveFileName [COMMDLG.2]
*/
BOOL GetSaveFileName(LPOPENFILENAME lpofn)
{
HANDLE hDlgTmpl;
HANDLE hResInfo;
HINSTANCE hInst;
WND *wndPtr;
BOOL bRet;
printf("GetSaveFileName(%p); !\n", lpofn);
if (lpofn == NULL) return FALSE;
printf("GetSaveFileName // Flags=%08lX !\n", lpofn->Flags);
printf("GetSaveFileName // nMaxFile=%ld lpstrFile='%s' !\n",
lpofn->nMaxFile, PTR_SEG_TO_LIN(lpofn->lpstrFile));
printf("GetSaveFileName // lpstrInitialDir='%s' !\n", PTR_SEG_TO_LIN(lpofn->lpstrInitialDir));
printf("GetSaveFileName // lpstrFilter=%p !\n", lpofn->lpstrFilter);
if (lpofn->Flags & OFN_ENABLETEMPLATEHANDLE) {
hDlgTmpl = lpofn->hInstance;
}
else {
if (lpofn->Flags & OFN_ENABLETEMPLATE) {
printf("GetSaveFileName // avant FindResource lpTemplateName='%s' !\n",
PTR_SEG_TO_LIN(lpofn->lpTemplateName));
hInst = lpofn->hInstance;
hResInfo = FindResource(hInst,
(LPSTR)lpofn->lpTemplateName, RT_DIALOG);
}
else {
printf("GetSaveFileName // avant FindResource !\n");
hInst = hSysRes;
hResInfo = FindResource(hInst, MAKEINTRESOURCE(SAVEFILEDLG2), RT_DIALOG);
}
if (hResInfo == 0) {
CommDlgLastError = CDERR_FINDRESFAILURE;
return FALSE;
}
hDlgTmpl = LoadResource(hInst, hResInfo);
}
if (hDlgTmpl == 0) {
CommDlgLastError = CDERR_LOADRESFAILURE;
return FALSE;
}
wndPtr = WIN_FindWndPtr(lpofn->hwndOwner);
bRet = DialogBoxIndirectParam(wndPtr->hInstance, hDlgTmpl,
lpofn->hwndOwner, GetWndProcEntry16("FileSaveDlgProc"),
(DWORD)lpofn);
printf("GetSaveFileName // return lpstrFile='%s' !\n", PTR_SEG_TO_LIN(lpofn->lpstrFile));
return bRet;
}
/***********************************************************************
* ChooseColor [COMMDLG.5]
*/
BOOL ChooseColor(LPCHOOSECOLOR lpChCol)
{
HANDLE hDlgTmpl;
HANDLE hResInfo;
WND *wndPtr;
BOOL bRet;
hResInfo = FindResource(hSysRes, MAKEINTRESOURCE(COLORDLG), RT_DIALOG);
hDlgTmpl = LoadResource(hSysRes, hResInfo);
wndPtr = WIN_FindWndPtr(lpChCol->hwndOwner);
bRet = DialogBoxIndirectParam(wndPtr->hInstance, hDlgTmpl,
lpChCol->hwndOwner, GetWndProcEntry16("ColorDlgProc"),
(DWORD)lpChCol);
return bRet;
}
/***********************************************************************
* FileOpenDlgProc [COMMDLG.6]
*/
BOOL FileOpenDlgProc(HWND hWnd, WORD wMsg, WORD wParam, LONG lParam)
{
int n;
LPSTR ptr;
LPSTR fspec;
char str[512];
char C2[128];
WORD wRet;
HBRUSH hBrush;
HDC hMemDC;
HBITMAP hBitmap;
BITMAP bm;
LPMEASUREITEMSTRUCT lpmeasure;
LPDRAWITEMSTRUCT lpdis;
static int nDrive;
static char CurPath[512];
static LPOPENFILENAME lpofn;
switch (wMsg) {
case WM_INITDIALOG:
#ifdef DEBUG_OPENDLG
printf("FileOpenDlgProc // WM_INITDIALOG lParam=%08X\n", lParam);
#endif
printf("FileOpenDlgProc // WM_INITDIALOG lParam=%08lX\n", lParam);
if (!FileDlg_Init(hWnd, lParam)) return TRUE;
SendDlgItemMessage(hWnd, cmb1, CB_RESETCONTENT, 0, 0L);
lpofn = (LPOPENFILENAME)lParam;
ptr = (LPSTR)PTR_SEG_TO_LIN(lpofn->lpstrFilter);
strcpy(CurPath, PTR_SEG_TO_LIN(lpofn->lpstrInitialDir));
#ifdef DEBUG_OPENDLG
printf("FileOpenDlgProc // lpstrInitialDir='%s' !\n", CurPath);
#endif
while((n = strlen(ptr)) != 0) {
#ifdef DEBUG_OPENDLG
printf("FileOpenDlgProc // file type '%s' !\n", ptr);
#endif
SendDlgItemMessage(hWnd, cmb1, CB_ADDSTRING, 0, (DWORD)ptr);
ptr += ++n;
#ifdef DEBUG_OPENDLG
printf("FileOpenDlgProc // file spec '%s' !\n", ptr);
#endif
n = strlen(ptr);
ptr += ++n;
}
SendDlgItemMessage(hWnd, edt1, WM_SETTEXT, 0, (DWORD)str);
SendDlgItemMessage(hWnd, cmb1, CB_SETCURSEL,
lpofn->nFilterIndex - 1, 0L);
DlgDirListComboBox(hWnd, "", cmb2, 0, 0xC000);
nDrive = 2; /* Drive 'C:' */
SendDlgItemMessage(hWnd, cmb2, CB_SETCURSEL, nDrive, 0L);
sprintf(str, "%c:\\%s", nDrive + 'A', DOS_GetCurrentDir(nDrive));
fspec = OpenDlg_GetFileType(PTR_SEG_TO_LIN(lpofn->lpstrFilter),
lpofn->nFilterIndex);
#ifdef DEBUG_OPENDLG
printf("FileOpenDlgProc // WM_INITDIALOG fspec #%d = '%s' !\n",
lpofn->nFilterIndex, fspec);
#endif
if (!OpenDlg_ScanDir(hWnd, nDrive, str, fspec)) {
printf("OpenDlg_ScanDir // ChangeDir Error !\n");
}
else {
strcpy(CurPath, str);
}
ShowWindow(hWnd, SW_SHOWNORMAL);
return TRUE;
case WM_SHOWWINDOW:
if (wParam == 0) break;
if (!(lpofn->Flags & OFN_SHOWHELP)) {
ShowWindow(GetDlgItem(hWnd, pshHelp), SW_HIDE);
}
if (lpofn->Flags & OFN_HIDEREADONLY) {
ShowWindow(GetDlgItem(hWnd, chx1), SW_HIDE);
}
return TRUE;
case WM_MEASUREITEM:
GetObject(hFolder2, sizeof(BITMAP), (LPSTR)&bm);
lpmeasure = (LPMEASUREITEMSTRUCT)PTR_SEG_TO_LIN(lParam);
lpmeasure->itemHeight = bm.bmHeight;
#ifdef DEBUG_OPENDLG_DRAW
printf("FileOpenDlgProc WM_MEASUREITEM Height=%d !\n", bm.bmHeight);
#endif
return TRUE;
case WM_DRAWITEM:
#ifdef DEBUG_OPENDLG_DRAW
printf("FileOpenDlgProc // WM_DRAWITEM w=%04X l=%08X\n", wParam, lParam);
#endif
if (lParam == 0L) break;
lpdis = (LPDRAWITEMSTRUCT)PTR_SEG_TO_LIN(lParam);
#ifdef DEBUG_OPENDLG_DRAW
printf("FileOpenDlgProc // WM_DRAWITEM CtlType=%04X CtlID=%04X \n",
lpdis->CtlType, lpdis->CtlID);
#endif
if ((lpdis->CtlType == ODT_LISTBOX) && (lpdis->CtlID == lst1)) {
hBrush = SelectObject(lpdis->hDC, GetStockObject(LTGRAY_BRUSH));
SelectObject(lpdis->hDC, hBrush);
FillRect(lpdis->hDC, &lpdis->rcItem, hBrush);
ptr = (LPSTR) PTR_SEG_TO_LIN(lpdis->itemData);
if (ptr == NULL) break;
TextOut(lpdis->hDC, lpdis->rcItem.left, lpdis->rcItem.top,
ptr, strlen(ptr));
}
if ((lpdis->CtlType == ODT_LISTBOX) && (lpdis->CtlID == lst2)) {
hBrush = SelectObject(lpdis->hDC, GetStockObject(LTGRAY_BRUSH));
SelectObject(lpdis->hDC, hBrush);
FillRect(lpdis->hDC, &lpdis->rcItem, hBrush);
ptr = (LPSTR) PTR_SEG_TO_LIN(lpdis->itemData);
if (ptr == NULL) break;
if (strcmp(ptr, "[.]") == 0) {
hBitmap = hFolder2;
/* ptr = OpenDlg_ExtractCurDir(CurPath, -1); */
ptr = CurPath;
}
else
hBitmap = hFolder;
GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&bm);
TextOut(lpdis->hDC, lpdis->rcItem.left + bm.bmWidth,
lpdis->rcItem.top, ptr, strlen(ptr));
hMemDC = CreateCompatibleDC(lpdis->hDC);
SelectObject(hMemDC, hBitmap);
BitBlt(lpdis->hDC, lpdis->rcItem.left, lpdis->rcItem.top,
bm.bmWidth, bm.bmHeight, hMemDC, 0, 0, SRCCOPY);
DeleteDC(hMemDC);
}
if ((lpdis->CtlType == ODT_COMBOBOX) && (lpdis->CtlID == cmb2)) {
hBrush = SelectObject(lpdis->hDC, GetStockObject(LTGRAY_BRUSH));
SelectObject(lpdis->hDC, hBrush);
FillRect(lpdis->hDC, &lpdis->rcItem, hBrush);
ptr = (LPSTR) PTR_SEG_TO_LIN(lpdis->itemData);
if (ptr == NULL) break;
switch(ptr[2]) {
case 'a':
case 'b':
hBitmap = hFloppy;
break;
default:
hBitmap = hHDisk;
}
GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&bm);
TextOut(lpdis->hDC, lpdis->rcItem.left + bm.bmWidth,
lpdis->rcItem.top, ptr, strlen(ptr));
hMemDC = CreateCompatibleDC(lpdis->hDC);
SelectObject(hMemDC, hBitmap);
BitBlt(lpdis->hDC, lpdis->rcItem.left, lpdis->rcItem.top,
bm.bmWidth, bm.bmHeight, hMemDC, 0, 0, SRCCOPY);
DeleteDC(hMemDC);
}
if (lpdis->itemState != 0) {
InvertRect(lpdis->hDC, &lpdis->rcItem);
}
break;
case WM_COMMAND:
switch (wParam) {
case lst1:
if (HIWORD(lParam) == LBN_DBLCLK ||
HIWORD(lParam) == LBN_SELCHANGE) {
#ifdef DEBUG_OPENDLG
printf("FileOpenDlgProc // LBN_SELCHANGE on lst1 !\n");
#endif
wRet = SendDlgItemMessage(hWnd, lst1, LB_GETCURSEL, 0, 0L);
SendDlgItemMessage(hWnd, lst1, LB_GETTEXT, wRet, (DWORD)C2);
}
if (HIWORD(lParam) == LBN_DBLCLK) {
#ifdef DEBUG_OPENDLG
printf("FileOpenDlgProc // LBN_DBLCLK on lst1 !\n");
#endif
return SendMessage(hWnd, WM_COMMAND, IDOK, 0L);
}
break;
case lst2:
if (HIWORD(lParam) == LBN_DBLCLK) {
#ifdef DEBUG_OPENDLG
printf("FileOpenDlgProc // LBN_DBLCLK on lst2 !\n");
#endif
wRet = SendDlgItemMessage(hWnd, cmb1, CB_GETCURSEL, 0, 0L);
if (wRet == (WORD)LB_ERR) return 0;
fspec = OpenDlg_GetFileType(lpofn->lpstrFilter, wRet + 1);
C2[0] = '\0';
wRet = SendDlgItemMessage(hWnd, lst2, LB_GETCURSEL, 0, 0L);
if (wRet == (WORD)LB_ERR) return 0;
SendDlgItemMessage(hWnd, lst2, LB_GETTEXT, wRet, (DWORD)C2);
if (C2[0] == '[') {
C2[strlen(C2) - 1] = '\0';
sprintf(str, "%s\\%s", CurPath, &C2[1]);
if (!OpenDlg_ScanDir(hWnd, nDrive, str, fspec)) {
printf("OpenDlg_ScanDir // ChangeDir Error !\n");
}
else {
strcpy(CurPath, str);
}
}
}
break;
case cmb1:
if (HIWORD(lParam) == CBN_SELCHANGE) {
wRet = SendDlgItemMessage(hWnd, cmb1, CB_GETCURSEL, 0, 0L);
if (wRet == (WORD)LB_ERR) return 0;
fspec = OpenDlg_GetFileType(lpofn->lpstrFilter, wRet + 1);
printf("FileOpenDlgProc // new fspec #%d = '%s' !\n", wRet, fspec);
if (!OpenDlg_ScanFiles(hWnd, nDrive, CurPath, fspec)) {
printf("OpenDlg_ScanFiles // Change FileType Error !\n");
}
}
break;
case cmb2:
#ifdef DEBUG_OPENDLG
printf("FileOpenDlgProc // combo #2 changed !\n");
#endif
wRet = SendDlgItemMessage(hWnd, cmb1, CB_GETCURSEL, 0, 0L);
if (wRet == (WORD)LB_ERR) return 0;
fspec = OpenDlg_GetFileType(lpofn->lpstrFilter, wRet + 1);
wRet = SendDlgItemMessage(hWnd, cmb2, CB_GETCURSEL, 0, 0L);
if (wRet == (WORD)LB_ERR) return 0;
printf("FileOpenDlgProc // combo #2 CB_GETCURSEL=%d !\n", wRet);
SendDlgItemMessage(hWnd, cmb2, CB_GETLBTEXT, wRet, (DWORD)C2);
nDrive = C2[2] - 'a';
#ifdef DEBUG_OPENDLG
printf("FileOpenDlgProc // new drive selected=%d !\n", nDrive);
#endif
sprintf(str, "%c:\\%s", nDrive + 'A', DOS_GetCurrentDir(nDrive));
#ifdef DEBUG_OPENDLG
printf("FileOpenDlgProc // new drive , curPath='%s' !\n", str);
#endif
if (!OpenDlg_ScanDir(hWnd, nDrive, str, fspec)) {
printf("OpenDlg_ScanDir // ChangeDir Error !\n");
}
else {
strcpy(CurPath, str);
}
break;
case chx1:
#ifdef DEBUG_OPENDLG
printf("FileOpenDlgProc // read-only toggled !\n");
#endif
break;
case pshHelp:
#ifdef DEBUG_OPENDLG
printf("FileOpenDlgProc // pshHelp pressed !\n");
#endif
break;
case IDOK:
ShowWindow(hWnd, SW_HIDE);
SendDlgItemMessage(hWnd, edt1, WM_GETTEXT, 0, (DWORD)str);
wRet = SendDlgItemMessage(hWnd, lst1, LB_GETCURSEL, 0, 0L);
SendDlgItemMessage(hWnd, lst1, LB_GETTEXT, wRet, (DWORD)str);
printf("FileOpenDlgProc // IDOK str='%s'\n", str);
strcpy(PTR_SEG_TO_LIN(lpofn->lpstrFile), str);
lpofn->nFileOffset = 0;
lpofn->nFileExtension = strlen(PTR_SEG_TO_LIN(lpofn->lpstrFile)) - 3;
if (lpofn->lpstrFileTitle != NULL) {
wRet = SendDlgItemMessage(hWnd, lst1, LB_GETCURSEL, 0, 0L);
SendDlgItemMessage(hWnd, lst1, LB_GETTEXT, wRet, (DWORD)str);
strcpy(PTR_SEG_TO_LIN(lpofn->lpstrFileTitle), str);
}
EndDialog(hWnd, TRUE);
return(TRUE);
case IDCANCEL:
EndDialog(hWnd, FALSE);
return(TRUE);
}
return(FALSE);
}
/*
case WM_CTLCOLOR:
SetBkColor((HDC)wParam, 0x00C0C0C0);
switch (HIWORD(lParam))
{
case CTLCOLOR_BTN:
SetTextColor((HDC)wParam, 0x00000000);
return(hGRAYBrush);
case CTLCOLOR_STATIC:
SetTextColor((HDC)wParam, 0x00000000);
return(hGRAYBrush);
}
return(FALSE);
*/
return FALSE;
}
/***********************************************************************
* FileDlg_Init [internal]
*/
BOOL FileDlg_Init(HWND hWnd, DWORD lParam)
{
LPOPENFILENAME lpofn;
lpofn = (LPOPENFILENAME)lParam;
if (lpofn == NULL) {
fprintf(stderr, "FileDlg_Init // Bad LPOPENFILENAME pointer !");
return FALSE;
}
if (hFolder == (HBITMAP)NULL)
hFolder = LoadBitmap((HINSTANCE)NULL, MAKEINTRESOURCE(OBM_FOLDER));
if (hFolder2 == (HBITMAP)NULL)
hFolder2 = LoadBitmap((HINSTANCE)NULL, MAKEINTRESOURCE(OBM_FOLDER2));
if (hFloppy == (HBITMAP)NULL)
hFloppy = LoadBitmap((HINSTANCE)NULL, MAKEINTRESOURCE(OBM_FLOPPY));
if (hHDisk == (HBITMAP)NULL)
hHDisk = LoadBitmap((HINSTANCE)NULL, MAKEINTRESOURCE(OBM_HDISK));
if (hCDRom == (HBITMAP)NULL)
hCDRom = LoadBitmap((HINSTANCE)NULL, MAKEINTRESOURCE(OBM_CDROM));
if (hFolder == 0 || hFolder2 == 0 || hFloppy == 0 ||
hHDisk == 0 || hCDRom == 0)
fprintf(stderr, "FileDlg_Init // Error loading bitmaps !");
return TRUE;
}
/***********************************************************************
* OpenDlg_ScanFiles [internal]
*/
BOOL OpenDlg_ScanFiles(HWND hWnd, WORD nDrive, LPSTR newPath, LPSTR fileSpec)
{
int OldDrive;
char OldPath[512];
char str[512];
OldDrive = DOS_GetDefaultDrive();
DOS_SetDefaultDrive(nDrive) ;
strcpy(OldPath, DOS_GetCurrentDir(nDrive));
#ifdef DEBUG_OPENDLG
printf("OpenDlg_ScanFiles // OldDrive=%d OldPath='%s'\n", OldDrive, OldPath);
printf("OpenDlg_ScanFiles // wanted newPath='%s'\n", newPath);
#endif
if (newPath[1] == ':')
DOS_ChangeDir(nDrive, &newPath[2]);
else
DOS_ChangeDir(nDrive, newPath);
sprintf(newPath, "%c:\\%s", nDrive + 'A', DOS_GetCurrentDir(nDrive));
#ifdef DEBUG_OPENDLG
printf("OpenDlg_ScanFiles // actual newPath='%s'\n", newPath);
#endif
if (strlen(newPath) == 3) newPath[2] = '\0';
sprintf(str, "%s\\%s", newPath, fileSpec);
DlgDirList(hWnd, str, lst1, 0, 0x0000);
SendDlgItemMessage(hWnd, edt1, WM_SETTEXT, 0, (DWORD)str);
DOS_ChangeDir(nDrive, OldPath);
DOS_SetDefaultDrive(OldDrive);
return TRUE;
}
/***********************************************************************
* OpenDlg_ScanDir [internal]
*/
BOOL OpenDlg_ScanDir(HWND hWnd, WORD nDrive, LPSTR newPath, LPSTR fileSpec)
{
int OldDrive;
char OldPath[512];
char str[512];
OldDrive = DOS_GetDefaultDrive();
DOS_SetDefaultDrive(nDrive) ;
strcpy(OldPath, DOS_GetCurrentDir(nDrive));
#ifdef DEBUG_OPENDLG
printf("OpenDlg_ScanDir // OldDrive=%d OldPath='%s'\n", OldDrive, OldPath);
printf("OpenDlg_ScanDir // wanted newPath='%s'\n", newPath);
#endif
if (newPath[1] == ':')
DOS_ChangeDir(nDrive, &newPath[2]);
else
DOS_ChangeDir(nDrive, newPath);
sprintf(newPath, "%c:\\%s", nDrive + 'A', DOS_GetCurrentDir(nDrive));
#ifdef DEBUG_OPENDLG
printf("OpenDlg_ScanDir // actual newPath='%s'\n", newPath);
#endif
if (strlen(newPath) == 3) newPath[2] = '\0';
sprintf(str, "%s\\%s", newPath, fileSpec);
DlgDirList(hWnd, str, lst1, 0, 0x0000);
SendDlgItemMessage(hWnd, edt1, WM_SETTEXT, 0, (DWORD)str);
sprintf(str, "%s\\*.*", newPath);
DlgDirList(hWnd, str, lst2, 0, 0x8010);
if (strlen(newPath) == 2) strcat(newPath, "\\");
SendDlgItemMessage(hWnd, stc1, WM_SETTEXT, 0, (DWORD)newPath);
DOS_ChangeDir(nDrive, OldPath);
DOS_SetDefaultDrive(OldDrive);
return TRUE;
}
/***********************************************************************
* OpenDlg_GetFileType [internal]
*/
LPSTR OpenDlg_GetFileType(LPCSTR types, WORD index)
{
int n;
int i = 1;
LPSTR ptr = (LPSTR) types;
if (ptr == NULL) return NULL;
while((n = strlen(ptr)) != 0) {
#ifdef DEBUG_OPENDLG
printf("OpenDlg_GetFileType // file type '%s' !\n", ptr);
#endif
ptr += ++n;
#ifdef DEBUG_OPENDLG
printf("OpenDlg_GetFileType // file spec '%s' !\n", ptr);
#endif
if (i++ == index) return ptr;
n = strlen(ptr);
ptr += ++n;
}
return NULL;
}
/***********************************************************************
* OpenDlg_ExtractCurDir [internal]
*/
LPSTR OpenDlg_ExtractCurDir(LPSTR FullPath, short MaxLen)
{
LPSTR ptr;
if (MaxLen < 0) MaxLen = strlen(FullPath);
ptr = FullPath + MaxLen - 1;
if (*ptr == '\\') return NULL;
while (ptr > FullPath) {
if (*ptr == '\\') return (ptr + 1);
ptr--;
}
return NULL;
}
/***********************************************************************
* FileSaveDlgProc [COMMDLG.7]
*/
BOOL FileSaveDlgProc(HWND hWnd, WORD wMsg, WORD wParam, LONG lParam)
{
int n;
LPSTR ptr;
LPSTR fspec;
char str[512];
char C2[128];
WORD wRet;
HBRUSH hBrush;
HDC hMemDC;
HBITMAP hBitmap;
BITMAP bm;
LPMEASUREITEMSTRUCT lpmeasure;
LPDRAWITEMSTRUCT lpdis;
static int nDrive;
static char CurPath[512];
static LPOPENFILENAME lpofn;
switch (wMsg) {
case WM_INITDIALOG:
#ifdef DEBUG_OPENDLG
printf("FileSaveDlgProc // WM_INITDIALOG lParam=%08X\n", lParam);
#endif
if (!FileDlg_Init(hWnd, lParam)) return TRUE;
SendDlgItemMessage(hWnd, cmb1, CB_RESETCONTENT, 0, 0L);
lpofn = (LPOPENFILENAME)lParam;
ptr = (LPSTR)lpofn->lpstrFilter;
strcpy(CurPath, lpofn->lpstrInitialDir);
while((n = strlen(ptr)) != 0) {
#ifdef DEBUG_OPENDLG
printf("FileSaveDlgProc // file type '%s' !\n", ptr);
#endif
SendDlgItemMessage(hWnd, cmb1, CB_ADDSTRING, 0, (DWORD)ptr);
ptr += ++n;
#ifdef DEBUG_OPENDLG
printf("FileSaveDlgProc // file spec '%s' !\n", ptr);
#endif
n = strlen(ptr);
ptr += ++n;
}
SendDlgItemMessage(hWnd, edt1, WM_SETTEXT, 0, (DWORD)str);
SendDlgItemMessage(hWnd, cmb1, CB_SETCURSEL,
lpofn->nFilterIndex - 1, 0L);
DlgDirListComboBox(hWnd, "", cmb2, 0, 0xC000);
nDrive = 2; /* Drive 'C:' */
SendDlgItemMessage(hWnd, cmb2, CB_SETCURSEL, nDrive, 0L);
sprintf(str, "%c:\\%s", nDrive + 'A', DOS_GetCurrentDir(nDrive));
fspec = OpenDlg_GetFileType(lpofn->lpstrFilter,
lpofn->nFilterIndex);
#ifdef DEBUG_OPENDLG
printf("FileSaveDlgProc // WM_INITDIALOG fspec #%d = '%s' !\n",
lpofn->nFilterIndex, fspec);
#endif
if (!OpenDlg_ScanDir(hWnd, nDrive, str, fspec)) {
printf("OpenDlg_ScanDir // ChangeDir Error !\n");
}
else {
strcpy(CurPath, str);
}
ShowWindow(hWnd, SW_SHOWNORMAL);
return (TRUE);
case WM_SHOWWINDOW:
if (wParam == 0) break;
if (!(lpofn->Flags & OFN_SHOWHELP)) {
ShowWindow(GetDlgItem(hWnd, pshHelp), SW_HIDE);
}
if (lpofn->Flags & OFN_HIDEREADONLY) {
ShowWindow(GetDlgItem(hWnd, chx1), SW_HIDE);
}
return TRUE;
case WM_MEASUREITEM:
GetObject(hFolder2, sizeof(BITMAP), (LPSTR)&bm);
lpmeasure = (LPMEASUREITEMSTRUCT)lParam;
lpmeasure->itemHeight = bm.bmHeight;
#ifdef DEBUG_OPENDLG_DRAW
printf("FileSaveDlgProc WM_MEASUREITEM Height=%d !\n", bm.bmHeight);
#endif
return TRUE;
case WM_DRAWITEM:
#ifdef DEBUG_OPENDLG_DRAW
printf("FileSaveDlgProc // WM_DRAWITEM w=%04X l=%08X\n", wParam, lParam);
#endif
if (lParam == 0L) break;
lpdis = (LPDRAWITEMSTRUCT)lParam;
#ifdef DEBUG_OPENDLG_DRAW
printf("FileSaveDlgProc // WM_DRAWITEM lpdis->CtlID=%04X\n", lpdis->CtlID);
#endif
if ((lpdis->CtlType == ODT_LISTBOX) && (lpdis->CtlID == lst1)) {
hBrush = SelectObject(lpdis->hDC, GetStockObject(LTGRAY_BRUSH));
SelectObject(lpdis->hDC, hBrush);
FillRect(lpdis->hDC, &lpdis->rcItem, hBrush);
ptr = (LPSTR) lpdis->itemData;
if (ptr == NULL) break;
TextOut(lpdis->hDC, lpdis->rcItem.left, lpdis->rcItem.top,
ptr, strlen(ptr));
}
if ((lpdis->CtlType == ODT_LISTBOX) && (lpdis->CtlID == lst2)) {
hBrush = SelectObject(lpdis->hDC, GetStockObject(LTGRAY_BRUSH));
SelectObject(lpdis->hDC, hBrush);
FillRect(lpdis->hDC, &lpdis->rcItem, hBrush);
ptr = (LPSTR) lpdis->itemData;
if (ptr == NULL) break;
if (strcmp(ptr, "[.]") == 0) {
hBitmap = hFolder2;
ptr = CurPath;
}
else
hBitmap = hFolder;
GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&bm);
TextOut(lpdis->hDC, lpdis->rcItem.left + bm.bmWidth,
lpdis->rcItem.top, ptr, strlen(ptr));
hMemDC = CreateCompatibleDC(lpdis->hDC);
SelectObject(hMemDC, hBitmap);
BitBlt(lpdis->hDC, lpdis->rcItem.left, lpdis->rcItem.top,
bm.bmWidth, bm.bmHeight, hMemDC, 0, 0, SRCCOPY);
DeleteDC(hMemDC);
}
if ((lpdis->CtlType == ODT_COMBOBOX) && (lpdis->CtlID == cmb2)) {
hBrush = SelectObject(lpdis->hDC, GetStockObject(LTGRAY_BRUSH));
SelectObject(lpdis->hDC, hBrush);
FillRect(lpdis->hDC, &lpdis->rcItem, hBrush);
ptr = (LPSTR) lpdis->itemData;
if (ptr == NULL) break;
switch(ptr[2]) {
case 'a':
case 'b':
hBitmap = hFloppy;
break;
default:
hBitmap = hHDisk;
}
GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&bm);
TextOut(lpdis->hDC, lpdis->rcItem.left + bm.bmWidth,
lpdis->rcItem.top, ptr, strlen(ptr));
hMemDC = CreateCompatibleDC(lpdis->hDC);
SelectObject(hMemDC, hBitmap);
BitBlt(lpdis->hDC, lpdis->rcItem.left, lpdis->rcItem.top,
bm.bmWidth, bm.bmHeight, hMemDC, 0, 0, SRCCOPY);
DeleteDC(hMemDC);
}
break;
case WM_COMMAND:
switch (wParam) {
case lst1:
if (HIWORD(lParam) == LBN_DBLCLK ||
HIWORD(lParam) == LBN_SELCHANGE) {
#ifdef DEBUG_OPENDLG
printf("FileSaveDlgProc // LBN_SELCHANGE on lst1 !\n");
#endif
wRet = SendDlgItemMessage(hWnd, lst1, LB_GETCURSEL, 0, 0L);
SendDlgItemMessage(hWnd, lst1, LB_GETTEXT, wRet, (DWORD)C2);
}
if (HIWORD(lParam) == LBN_DBLCLK) {
#ifdef DEBUG_OPENDLG
printf("FileSaveDlgProc // LBN_DBLCLK on lst1 !\n");
#endif
return SendMessage(hWnd, WM_COMMAND, IDOK, 0L);
}
break;
case lst2:
if (HIWORD(lParam) == LBN_DBLCLK) {
#ifdef DEBUG_OPENDLG
printf("FileSaveDlgProc // LBN_DBLCLK on lst2 !\n");
#endif
wRet = SendDlgItemMessage(hWnd, cmb1, CB_GETCURSEL, 0, 0L);
fspec = OpenDlg_GetFileType(lpofn->lpstrFilter, wRet + 1);
C2[0] = '\0';
wRet = SendDlgItemMessage(hWnd, lst2, LB_GETCURSEL, 0, 0L);
SendDlgItemMessage(hWnd, lst2, LB_GETTEXT, wRet, (DWORD)C2);
if (C2[0] == '[') {
C2[strlen(C2) - 1] = '\0';
sprintf(str, "%s\\%s", CurPath, &C2[1]);
if (!OpenDlg_ScanDir(hWnd, nDrive, str, fspec)) {
printf("FileSaveDlgProc // ChangeDir Error !\n");
}
else {
strcpy(CurPath, str);
}
}
}
break;
case cmb1:
if (HIWORD(lParam) == CBN_SELCHANGE) {
wRet = SendDlgItemMessage(hWnd, cmb1, CB_GETCURSEL, 0, 0L);
fspec = OpenDlg_GetFileType(lpofn->lpstrFilter, wRet + 1);
printf("FileSaveDlgProc // new fspec #%d = '%s' !\n", wRet, fspec);
if (!OpenDlg_ScanFiles(hWnd, nDrive, CurPath, fspec)) {
printf("OpenDlg_ScanFile // Change FileType Error !\n");
}
}
break;
case cmb2:
#ifdef DEBUG_OPENDLG
printf("FileSaveDlgProc // combo #2 changed !\n");
#endif
wRet = SendDlgItemMessage(hWnd, cmb1, CB_GETCURSEL, 0, 0L);
if (wRet == (WORD)LB_ERR) return 0;
fspec = OpenDlg_GetFileType(lpofn->lpstrFilter, wRet + 1);
wRet = SendDlgItemMessage(hWnd, cmb2, CB_GETCURSEL, 0, 0L);
if (wRet == (WORD)LB_ERR) return 0;
printf("FileSaveDlgProc // combo #2 CB_GETCURSEL=%d !\n", wRet);
SendDlgItemMessage(hWnd, cmb2, CB_GETLBTEXT, wRet, (DWORD)C2);
nDrive = C2[2] - 'a';
#ifdef DEBUG_OPENDLG
printf("FileSaveDlgProc // new drive selected=%d !\n", nDrive);
#endif
sprintf(str, "%c:\\%s", nDrive + 'A', DOS_GetCurrentDir(nDrive));
#ifdef DEBUG_OPENDLG
printf("FileSaveDlgProc // new drive , curPath='%s' !\n", str);
#endif
if (!OpenDlg_ScanDir(hWnd, nDrive, str, fspec)) {
printf("FileSaveDlgProc // Change Drive Error !\n");
}
else {
strcpy(CurPath, str);
}
break;
case chx1:
#ifdef DEBUG_OPENDLG
printf("FileSaveDlgProc // read-only toggled !\n");
#endif
break;
case pshHelp:
#ifdef DEBUG_OPENDLG
printf("FileSaveDlgProc // pshHelp pressed !\n");
#endif
break;
case IDOK:
strcpy(lpofn->lpstrFile, "titi.txt");
if (lpofn->lpstrFileTitle != NULL) {
strcpy(lpofn->lpstrFileTitle, "titi.txt");
}
EndDialog(hWnd, TRUE);
return(TRUE);
case IDCANCEL:
EndDialog(hWnd, FALSE);
return(TRUE);
}
return(FALSE);
}
return FALSE;
}
/***********************************************************************
* ColorDlgProc [COMMDLG.8]
*/
BOOL ColorDlgProc(HWND hWnd, WORD wMsg, WORD wParam, LONG lParam)
{
switch (wMsg) {
case WM_INITDIALOG:
printf("ColorDlgProc // WM_INITDIALOG lParam=%08lX\n", lParam);
ShowWindow(hWnd, SW_SHOWNORMAL);
return (TRUE);
case WM_COMMAND:
switch (wParam) {
case IDOK:
EndDialog(hWnd, TRUE);
return(TRUE);
case IDCANCEL:
EndDialog(hWnd, FALSE);
return(TRUE);
}
return(FALSE);
}
return FALSE;
}
/***********************************************************************
* FindTextDlg [COMMDLG.11]
*/
BOOL FindText(LPFINDREPLACE lpFind)
{
HANDLE hDlgTmpl;
HANDLE hResInfo;
WND *wndPtr;
BOOL bRet;
hResInfo = FindResource(hSysRes, MAKEINTRESOURCE(FINDDLG), RT_DIALOG);
if (hResInfo == 0) {
CommDlgLastError = CDERR_FINDRESFAILURE;
return FALSE;
}
hDlgTmpl = LoadResource(hSysRes, hResInfo);
if (hDlgTmpl == 0) {
CommDlgLastError = CDERR_LOADRESFAILURE;
return FALSE;
}
wndPtr = WIN_FindWndPtr(lpFind->hwndOwner);
bRet = DialogBoxIndirectParam(wndPtr->hInstance, hDlgTmpl,
lpFind->hwndOwner, GetWndProcEntry16("FindTextDlgProc"),
(DWORD)lpFind);
return bRet;
}
/***********************************************************************
* ReplaceTextDlg [COMMDLG.12]
*/
BOOL ReplaceText(LPFINDREPLACE lpFind)
{
HANDLE hDlgTmpl;
HANDLE hResInfo;
WND *wndPtr;
BOOL bRet;
hResInfo = FindResource(hSysRes, MAKEINTRESOURCE(REPLACEDLG), RT_DIALOG);
if (hResInfo == 0) {
CommDlgLastError = CDERR_FINDRESFAILURE;
return FALSE;
}
hDlgTmpl = LoadResource(hSysRes, hResInfo);
if (hDlgTmpl == 0) {
CommDlgLastError = CDERR_LOADRESFAILURE;
return FALSE;
}
wndPtr = WIN_FindWndPtr(lpFind->hwndOwner);
bRet = DialogBoxIndirectParam(wndPtr->hInstance, hDlgTmpl,
lpFind->hwndOwner, GetWndProcEntry16("ReplaceTextDlgProc"),
(DWORD)lpFind);
return bRet;
}
/***********************************************************************
* FindTextDlgProc [COMMDLG.13]
*/
BOOL FindTextDlgProc(HWND hWnd, WORD wMsg, WORD wParam, LONG lParam)
{
switch (wMsg) {
case WM_INITDIALOG:
printf("FindTextDlgProc // WM_INITDIALOG lParam=%08lX\n", lParam);
ShowWindow(hWnd, SW_SHOWNORMAL);
return (TRUE);
case WM_COMMAND:
switch (wParam) {
case IDOK:
EndDialog(hWnd, TRUE);
return(TRUE);
case IDCANCEL:
EndDialog(hWnd, FALSE);
return(TRUE);
}
return(FALSE);
}
return FALSE;
}
/***********************************************************************
* ReplaceTextDlgProc [COMMDLG.14]
*/
BOOL ReplaceTextDlgProc(HWND hWnd, WORD wMsg, WORD wParam, LONG lParam)
{
switch (wMsg) {
case WM_INITDIALOG:
printf("ReplaceTextDlgProc // WM_INITDIALOG lParam=%08lX\n", lParam);
ShowWindow(hWnd, SW_SHOWNORMAL);
return (TRUE);
case WM_COMMAND:
switch (wParam) {
case IDOK:
EndDialog(hWnd, TRUE);
return(TRUE);
case IDCANCEL:
EndDialog(hWnd, FALSE);
return(TRUE);
}
return(FALSE);
}
return FALSE;
}
/***********************************************************************
* PrintDlg [COMMDLG.20]
*/
BOOL PrintDlg(LPPRINTDLG lpPrint)
{
HANDLE hDlgTmpl;
HANDLE hResInfo;
WND *wndPtr;
BOOL bRet;
printf("PrintDlg(%p) // Flags=%08lX\n", lpPrint, lpPrint->Flags);
if (lpPrint->Flags & PD_PRINTSETUP)
hResInfo = FindResource(hSysRes, MAKEINTRESOURCE(PRINTSETUPDLG), RT_DIALOG);
else
hResInfo = FindResource(hSysRes, MAKEINTRESOURCE(PRINTDLG), RT_DIALOG);
if (hResInfo == 0) {
CommDlgLastError = CDERR_FINDRESFAILURE;
return FALSE;
}
hDlgTmpl = LoadResource(hSysRes, hResInfo);
if (hDlgTmpl == 0) {
CommDlgLastError = CDERR_LOADRESFAILURE;
return FALSE;
}
wndPtr = WIN_FindWndPtr(lpPrint->hwndOwner);
if (lpPrint->Flags & PD_PRINTSETUP)
bRet = DialogBoxIndirectParam(wndPtr->hInstance, hDlgTmpl,
lpPrint->hwndOwner, GetWndProcEntry16("PrintSetupDlgProc"),
(DWORD)lpPrint);
else
bRet = DialogBoxIndirectParam(wndPtr->hInstance, hDlgTmpl,
lpPrint->hwndOwner, GetWndProcEntry16("PrintDlgProc"),
(DWORD)lpPrint);
return bRet;
}
/***********************************************************************
* PrintDlgProc [COMMDLG.21]
*/
BOOL PrintDlgProc(HWND hWnd, WORD wMsg, WORD wParam, LONG lParam)
{
switch (wMsg) {
case WM_INITDIALOG:
printf("PrintDlgProc // WM_INITDIALOG lParam=%08lX\n", lParam);
ShowWindow(hWnd, SW_SHOWNORMAL);
return (TRUE);
case WM_COMMAND:
switch (wParam) {
case IDOK:
EndDialog(hWnd, TRUE);
return(TRUE);
case IDCANCEL:
EndDialog(hWnd, FALSE);
return(TRUE);
}
return(FALSE);
}
return FALSE;
}
/***********************************************************************
* PrintSetupDlgProc [COMMDLG.22]
*/
BOOL PrintSetupDlgProc(HWND hWnd, WORD wMsg, WORD wParam, LONG lParam)
{
switch (wMsg) {
case WM_INITDIALOG:
printf("PrintSetupDlgProc // WM_INITDIALOG lParam=%08lX\n", lParam);
ShowWindow(hWnd, SW_SHOWNORMAL);
return (TRUE);
case WM_COMMAND:
switch (wParam) {
case IDOK:
EndDialog(hWnd, TRUE);
return(TRUE);
case IDCANCEL:
EndDialog(hWnd, FALSE);
return(TRUE);
}
return(FALSE);
}
return FALSE;
}
/***********************************************************************
* CommDlgExtendError [COMMDLG.26]
*/
DWORD CommDlgExtendError(void)
{
return CommDlgLastError;
}
/***********************************************************************
* GetFileTitle [COMMDLG.27]
*/
int GetFileTitle(LPCSTR lpFile, LPSTR lpTitle, UINT cbBuf)
{
int i, len;
printf("GetFileTitle(%p %p %d); \n", lpFile, lpTitle, cbBuf);
if (lpFile == NULL || lpTitle == NULL) return -1;
len = strlen(lpFile);
if (len == 0) return -1;
if (strchr(lpFile, '*') != NULL) return -1;
if (strchr(lpFile, '[') != NULL) return -1;
if (strchr(lpFile, ']') != NULL) return -1;
len--;
if (lpFile[len] == '/' || lpFile[len] == '\\' || lpFile[len] == ':') return -1;
for (i = len; i >= 0; i--) {
if (lpFile[i] == '/' ||
lpFile[i] == '\\' ||
lpFile[i] == ':') {
i++;
break;
}
}
printf("\n---> '%s' ", &lpFile[i]);
len = min(cbBuf, strlen(&lpFile[i]) + 1);
strncpy(lpTitle, &lpFile[i], len + 1);
if (len != cbBuf)
return len;
else
return 0;
}