mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
380 lines
8.1 KiB
380 lines
8.1 KiB
/*++
|
|
|
|
Copyright (c) 1991 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
fontdlg.c
|
|
|
|
Abstract:
|
|
|
|
Font Editor interface to the common dialog Open File and Save File
|
|
functions. Also, this routine displays and controls the font format
|
|
save dialog.
|
|
|
|
Author:
|
|
|
|
David J. Marsyla (t-davema) 22-Aug-1991
|
|
|
|
Revision History:
|
|
|
|
|
|
--*/
|
|
|
|
|
|
#include "windows.h"
|
|
#include <port1632.h>
|
|
#include "fontedit.h"
|
|
#include "commdlg.h"
|
|
|
|
|
|
/* message box strings loaded in sample.c from the stringtable */
|
|
extern CHAR szIFN[], szFNF[], szREF[], szSCC[], szEOF[], szECF[];
|
|
|
|
extern CHAR szAppName [];
|
|
extern CHAR szExt [];
|
|
extern CHAR szExtDesc [];
|
|
|
|
extern CHAR szNEWFONT [];
|
|
extern CHAR szFRO [];
|
|
|
|
extern INT iFontFormat; /* Set to the id of current font format */
|
|
extern BOOL fReadOnly;
|
|
|
|
CHAR szDlgMsg [MAX_STR_LEN+MAX_FNAME_LEN];
|
|
|
|
extern CHAR szFilter[];
|
|
|
|
//
|
|
// Local Function Prototypes.
|
|
//
|
|
|
|
BOOL
|
|
DlgCheckFormat (
|
|
HANDLE hInstance, // app module instance handle
|
|
HWND hWndParent // window handle of parent window
|
|
);
|
|
|
|
BOOL APIENTRY
|
|
DlgFnCheckFormat (
|
|
HWND hDlg,
|
|
WORD message,
|
|
WPARAM wParam,
|
|
LONG lParam
|
|
);
|
|
|
|
//
|
|
// Functions.
|
|
//
|
|
|
|
BOOL
|
|
CommDlgOpen (
|
|
HWND hWndParent, /* window handle of parent window */
|
|
OFSTRUCT *pofsReOpenInfo,/* ptr to current file OFSTRUCT (->cBytes=0 if no
|
|
* cur. file)*/
|
|
CHAR *pszNewNameIn, /* ptr to array which will get new file's name
|
|
* (no path) */
|
|
CHAR *pszExtIn, /* ptr to current default extension */
|
|
CHAR *pszFileNameOnly, /* ptr to application name */
|
|
BOOL fOpenType
|
|
)
|
|
{
|
|
OPENFILENAME ofTempOF;
|
|
HFILE hFile;
|
|
CHAR szBuf[_MAX_PATH];
|
|
|
|
ofTempOF.lStructSize = sizeof(OPENFILENAME);
|
|
ofTempOF.hwndOwner = hWndParent;
|
|
ofTempOF.lpstrFilter = szFilter;
|
|
ofTempOF.lpstrCustomFilter = (LPSTR)NULL;
|
|
ofTempOF.nMaxCustFilter = 0L;
|
|
ofTempOF.nFilterIndex = 0L;
|
|
ofTempOF.lpstrFile = pszNewNameIn;
|
|
ofTempOF.nMaxFile = MAX_FNAME_LEN;
|
|
ofTempOF.lpstrFileTitle = pszFileNameOnly;
|
|
ofTempOF.nMaxFileTitle = MAX_FNAME_LEN;
|
|
ofTempOF.lpstrInitialDir = (LPSTR)NULL;
|
|
ofTempOF.lpstrTitle = (LPSTR)NULL;
|
|
ofTempOF.Flags = 0;
|
|
ofTempOF.nFileOffset = 0;
|
|
ofTempOF.nFileExtension = 0;
|
|
ofTempOF.lpstrDefExt = pszExtIn;
|
|
|
|
if (fOpenType == FONT_NEW)
|
|
{
|
|
if (MessageBox (hWndParent, (LPSTR)szNEWFONT, (LPSTR)szAppName,
|
|
MB_OKCANCEL | MB_ICONEXCLAMATION | MB_APPLMODAL) == IDCANCEL)
|
|
{
|
|
return (FALSE);
|
|
}
|
|
}
|
|
|
|
// save lpstrFile. Because if GetSaveFileName returns 0(i.e. select
|
|
// [Cancel] in dialog, pointer to lpstrFile will be lost.
|
|
lstrcpy(szBuf,pszNewNameIn);
|
|
if (GetOpenFileName (&ofTempOF) == FALSE)
|
|
{
|
|
lstrcpy(pszNewNameIn,szBuf);
|
|
return (FALSE);
|
|
}
|
|
|
|
CharUpper (pszNewNameIn);
|
|
|
|
fReadOnly = FALSE;
|
|
|
|
hFile = MOpenFile (pszNewNameIn, pofsReOpenInfo, OF_READWRITE);
|
|
|
|
if (hFile == (HFILE) -1) {
|
|
|
|
hFile = MOpenFile (pszNewNameIn, pofsReOpenInfo, OF_READ);
|
|
|
|
if (hFile == (HFILE) -1) {
|
|
|
|
DlgMergeStrings (szFNF, pszNewNameIn, szDlgMsg);
|
|
|
|
MessageBox (hWndParent, szDlgMsg, szAppName,
|
|
MB_OK | MB_ICONASTERISK | MB_APPLMODAL);
|
|
|
|
return (FALSE);
|
|
|
|
} else if (fOpenType != FONT_NEW) {
|
|
|
|
BOOL fResult;
|
|
|
|
DlgMergeStrings (szFRO, pszNewNameIn, szDlgMsg);
|
|
|
|
/* File Is Read Only */
|
|
fResult = MessageBox (hWndParent, szDlgMsg, szAppName,
|
|
MB_OKCANCEL | MB_ICONEXCLAMATION | MB_APPLMODAL);
|
|
|
|
/* Give them the chance to cancel right now. */
|
|
if (fResult == IDCANCEL) {
|
|
|
|
M_lclose (hFile);
|
|
return (FALSE);
|
|
}
|
|
|
|
fReadOnly = TRUE;
|
|
}
|
|
}
|
|
|
|
M_lclose (hFile);
|
|
|
|
return (TRUE);
|
|
}
|
|
|
|
BOOL
|
|
CommDlgSaveAs(
|
|
HANDLE hInstance,
|
|
HWND hWndParent, /* window handle of parent window */
|
|
OFSTRUCT *pofsReOpenInfo,/* ptr to current file OFSTRUCT (->cBytes=0 if no
|
|
* cur. file)*/
|
|
CHAR *pszNewNameIn, /* ptr to array which will get new file's name
|
|
* (no path) */
|
|
CHAR *pszExtIn, /* ptr to current default extension */
|
|
CHAR *pszFileNameOnly /* ptr to file name */
|
|
)
|
|
{
|
|
OPENFILENAME ofTempOF;
|
|
HFILE hFile;
|
|
CHAR szBuf[_MAX_PATH];
|
|
|
|
ofTempOF.lStructSize = sizeof(OPENFILENAME);
|
|
ofTempOF.hwndOwner = hWndParent;
|
|
ofTempOF.lpstrFilter = szFilter;
|
|
ofTempOF.lpstrCustomFilter = (LPSTR)NULL;
|
|
ofTempOF.nMaxCustFilter = 0L;
|
|
ofTempOF.nFilterIndex = 0L;
|
|
ofTempOF.lpstrFile = pszNewNameIn;
|
|
ofTempOF.nMaxFile = MAX_FNAME_LEN;
|
|
ofTempOF.lpstrFileTitle = pszFileNameOnly;
|
|
ofTempOF.nMaxFileTitle = MAX_FNAME_LEN;
|
|
ofTempOF.lpstrInitialDir = (LPSTR)NULL;
|
|
ofTempOF.lpstrTitle = (LPSTR)NULL;
|
|
ofTempOF.Flags = OFN_SHOWHELP;
|
|
ofTempOF.nFileOffset = 0;
|
|
ofTempOF.nFileExtension = 0;
|
|
ofTempOF.lpstrDefExt = pszExtIn;
|
|
|
|
if (DlgCheckFormat (hInstance, hWndParent) == FALSE)
|
|
{
|
|
return (FALSE);
|
|
}
|
|
|
|
// save lpstrFile. Because if GetSaveFileName returns 0(i.e. select
|
|
// [Cancel] in dialog, pointer to lpstrFile will be lost.
|
|
lstrcpy(szBuf,pszNewNameIn);
|
|
if (GetSaveFileName (&ofTempOF) == FALSE)
|
|
{
|
|
lstrcpy(pszNewNameIn,szBuf);
|
|
return (FALSE);
|
|
}
|
|
|
|
CharUpper (pszNewNameIn);
|
|
|
|
hFile = MOpenFile (pszNewNameIn, pofsReOpenInfo, OF_EXIST);
|
|
|
|
if (hFile >= (HFILE) 0) /* already exists */
|
|
{
|
|
M_lclose (hFile);
|
|
|
|
DlgMergeStrings (szREF, pszNewNameIn, szDlgMsg);
|
|
|
|
if (MessageBox (hWndParent, (LPSTR)szDlgMsg, (LPSTR)pszNewNameIn,
|
|
MB_YESNO | MB_DEFBUTTON2 | MB_ICONQUESTION | MB_APPLMODAL)
|
|
== IDNO)
|
|
{
|
|
return (FALSE);
|
|
}
|
|
|
|
hFile = MOpenFile (pszNewNameIn, pofsReOpenInfo, OF_WRITE);
|
|
|
|
if (hFile == (HFILE) -1)
|
|
{
|
|
DlgMergeStrings(szEOF, pszNewNameIn, szDlgMsg);
|
|
|
|
MessageBox(hWndParent, (LPSTR)szDlgMsg, (LPSTR)pszNewNameIn,
|
|
MB_OK | MB_ICONEXCLAMATION | MB_APPLMODAL);
|
|
|
|
return (FALSE);
|
|
}
|
|
|
|
M_lclose (hFile);
|
|
|
|
return (TRUE);
|
|
}
|
|
|
|
hFile = MOpenFile (pszNewNameIn, pofsReOpenInfo, OF_CREATE);
|
|
|
|
if (hFile == (HFILE) -1)
|
|
{
|
|
DlgMergeStrings(szECF, pszNewNameIn, szDlgMsg);
|
|
|
|
MessageBox(hWndParent, (LPSTR)szDlgMsg, (LPSTR)pszNewNameIn,
|
|
MB_OK | MB_ICONEXCLAMATION | MB_APPLMODAL);
|
|
|
|
return (FALSE);
|
|
}
|
|
|
|
M_lclose (hFile);
|
|
|
|
return (TRUE);
|
|
|
|
} /* end dlgsaveas */
|
|
|
|
|
|
/*=============================================================================
|
|
DLGMERGESTRINGS scans string1 for merge spec (%%). If found, insert string2 at
|
|
that point, and then append remainder of string1. Result in string3.
|
|
==============================================================================*/
|
|
BOOL
|
|
DlgMergeStrings(
|
|
CHAR *szSrc,
|
|
CHAR *szMerge,
|
|
CHAR *szDst
|
|
)
|
|
{
|
|
CHAR *pchSrc;
|
|
CHAR *pchDst;
|
|
|
|
pchSrc = szSrc;
|
|
pchDst = szDst;
|
|
|
|
/* Find merge spec if there is one. */
|
|
while (!((*pchSrc == '%') && (*(pchSrc+1) == '%'))) {
|
|
*pchDst++ = *pchSrc;
|
|
|
|
/* If we reach end of string before merge spec, just return. */
|
|
if (!*pchSrc++)
|
|
return FALSE;
|
|
|
|
}
|
|
/* If merge spec found, insert sz2 there. (check for null merge string */
|
|
if (szMerge) {
|
|
while (*szMerge)
|
|
*pchDst++ = *szMerge++;
|
|
|
|
}
|
|
|
|
/* Jump over merge spec */
|
|
pchSrc++; pchSrc++;
|
|
|
|
|
|
/* Now append rest of Src String */
|
|
while (*pchDst++ = *pchSrc++);
|
|
return TRUE;
|
|
|
|
} /* end dlgmergestrings */
|
|
|
|
|
|
BOOL
|
|
DlgCheckFormat (
|
|
HANDLE hInstance, // app module instance handle
|
|
HWND hWndParent // window handle of parent window
|
|
)
|
|
{
|
|
//FARPROC lpProc;
|
|
BOOL fResult;
|
|
|
|
fResult = DialogBox (hInstance, (LPSTR)MAKEINTRESOURCE (IDD_FORMAT),
|
|
//hWndParent, (WNDPROC)(lpProc = DlgFnCheckFormat));
|
|
hWndParent, (WNDPROC)DlgFnCheckFormat);
|
|
|
|
//FreeProcInstance(lpProc);
|
|
|
|
return (fResult);
|
|
|
|
} /* end dlgcheckformat */
|
|
|
|
|
|
BOOL APIENTRY
|
|
DlgFnCheckFormat (
|
|
HWND hDlg,
|
|
WORD message,
|
|
WPARAM wParam,
|
|
LONG lParam
|
|
)
|
|
{
|
|
|
|
switch (message)
|
|
{
|
|
|
|
case WM_INITDIALOG:
|
|
CheckRadioButton (hDlg, ID_FORMAT2, ID_FORMAT3, iFontFormat);
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
|
|
switch (GET_WM_COMMAND_ID(wParam, lParam))
|
|
{
|
|
case IDOK:
|
|
|
|
EndDialog (hDlg, TRUE);
|
|
break;
|
|
|
|
case IDCANCEL:
|
|
EndDialog (hDlg, FALSE);
|
|
break;
|
|
|
|
case ID_FORMAT2:
|
|
case ID_FORMAT3:
|
|
CheckRadioButton(hDlg, ID_FORMAT2,ID_FORMAT3,
|
|
iFontFormat = GET_WM_COMMAND_ID(wParam,lParam));
|
|
break;
|
|
|
|
default:
|
|
|
|
return FALSE;
|
|
|
|
} /* end switch wparam */
|
|
break;
|
|
|
|
default:
|
|
|
|
return FALSE;
|
|
|
|
} /* end switch message */
|
|
|
|
return TRUE;
|
|
|
|
} /* end dlgsaveasdlg */
|