Windows NT 4.0 source code leak
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.
 
 
 
 
 
 

1631 lines
47 KiB

/****************************Module*Header******************************\
* Copyright (c) 1987 - 1991 Microsoft Corporation *
\***********************************************************************/
/********************************************************
* *
* file: MenuCmd.c *
* system: PC Paintbrush for MS-Windows *
* descr: processes menu commands *
* date: 04/01/87 @ 18:15 *
********************************************************/
#include <windows.h>
#include <port1632.h>
#include <shellapi.h>
#include "pbrush.h"
#ifdef WIN32
#define strcpy lstrcpy
#endif
#include "pbserver.h" /* OLE header file */
extern HWND pbrushWnd[], mouseWnd, colorWnd, hDlgModeless;
extern WNDPROC lpNullWP;
extern RECT pbrushRct[];
extern int paintWid, paintHgt, zoomAmount;
extern WORD wFileType;
extern DPPROC dpArray[];
extern DWORD *rgbColor;
extern DWORD colorColor[], bwColor[];
extern TCHAR fileName[], clipName[], tempName[];
extern TCHAR *wildCard, *namePtr, *pathPtr, noFile[];
extern int defaultWid, defaultHgt;
extern BOOL imageFlag;
extern TCHAR filePath[], clipPath[], colorPath[];
extern int DlgCaptionNo;
extern HPALETTE hPalette;
extern int nNewImageWidth, nNewImageHeight, nNewImagePlanes, nNewImagePixels;
extern int fileMode;
extern int imageWid, imageHgt, imageByteWid, imagePlanes, imagePixels;
extern HWND zoomOutWnd;
extern int theTool;
extern LOGFONT theFont;
extern BOOL inMagnify, clearFlag, mouseFlag, outline, shadow, bZoomedOut;
extern DPPROC DrawProc;
extern int cursTool;
extern LPTSTR DrawCursor;
extern WNDPROC lpColorDlg;
extern WNDPROC lpMouseDlg;
extern PRINTDLG PD;
extern BOOL bFileLoaded;
#ifdef JAPAN
#include <dlgs.h> // added 20 May. 1992
void CheckVerticalWriting( HDC, LPSTR );
//int FAR PASCAL _export DeleteFacename( HWND , UINT , WPARAM , LPARAM );
int FAR PASCAL DeleteFacename( HWND , UINT , WPARAM , LPARAM );
BOOL bWritable; // This flag identifies whether the Font is possible to write
// vertically or not.
BOOL bVertical; // This flag identifies whether user chose the Vertical-Writing
// option or not.
extern LOGFONT vertFont; // for vertical writing.
extern LOGFONT horiFont; // for horizontal writing.
int nonBoldWeight; // This weight is used instead of FW_MEDIUM, because some
// TT fonts have FW_LIGHT weight. 06 Jul. 1992
#endif
HDC printDC;
static HWND fullWnd;
BOOL IsCanceled;
static TCHAR szTemplate[WARNMSGMAX*3];
static TCHAR szMessage[WARNMSGMAX*4];
void PUBLIC Help(HWND hWnd, UINT wCommand, LONG lParam)
{
TCHAR szHelpPath[100], *pPath;
BOOL result;
SendMessage(pbrushWnd[PAINTid], WM_TERMINATE, 0, 0L);
pPath = szHelpPath
+ GetModuleFileName(hInst, szHelpPath, CharSizeOf(szHelpPath));
#ifdef DBCS
while (*pPath != TEXT('.')) /* DBCS */
pPath = CharPrev(szHelpPath,pPath);
#else
while (*pPath-- != TEXT('.'))
;
++pPath;
#endif
*++pPath = TEXT('H');
*++pPath = TEXT('L');
*++pPath = TEXT('P');
*++pPath = TEXT('\0');
result = WinHelp(hWnd, szHelpPath, wCommand, lParam);
if(!result)
SimpleMessage(IDSNotEnufMem, NULL, MB_OK|MB_ICONHAND|MB_SYSTEMMODAL);
}
/* they all do this pretty much to clean up the screen */
void PUBLIC Terminatewnd(
void)
{
SendMessage(pbrushWnd[PAINTid], WM_MOUSEMOVE, 0, -1L);
SendMessage(pbrushWnd[PAINTid], WM_TERMINATE, 0, 0L);
}
/* dummy window function. Used to shield input if virtual allocations fail.
*/
BOOL FAR PASCAL NullWP(HWND hWnd, UINT message, WPARAM wParam, LONG lParam)
{
switch(message) {
case WM_SHOWWINDOW:
break;
default:
return((BOOL)DefWindowProc(hWnd,message,wParam,lParam));
}
return(FALSE);
}
static INT EnPaMeIt1[] = {FILEsave, FILEsaveas, FILEpage,
FILEprinter, MISCbrush, MISCeditColor, MISCgetColor, MISCsaveColor, -1};
static INT EnPaMeIt2[] = {1, 2, 3, -1};
static INT MiZoInEn1[] = {EDITcopypict, EDITcutpict,
EDITcopyTo, EDITpasteFrom, MISCzoomIn, FILEshow, WINDOWtool,
WINDOWpalette, MISCmousePos, -1};
static INT MiZoInEn2[] = {0, 3, 4, 5, -1};
static INT MiZoOtEn1[] = {ZOOMundo, EDITcopypict, EDITcutpict,
EDITcopyTo, MISCzoomOut, -1};
static INT MiEdCoEn[] = {0, 1, 2, 3, 4, 5, -1};
void PUBLIC EnablePaintMenuItems(HMENU hMenu, BOOL bEnable)
{
EnableMenuItems(hMenu, EnPaMeIt1,
(UINT)(MF_BYCOMMAND | (bEnable ? MF_ENABLED : MF_GRAYED)));
EnableMenuItems(hMenu, EnPaMeIt2,
(UINT)(MF_BYPOSITION | (bEnable ? MF_ENABLED : MF_GRAYED)));
}
static void PRIVATE EnablePaintWindow(BOOL bEnable)
{
REGISTER HWND hWnd = pbrushWnd[PARENTid];
if(bEnable) {
EnablePaintMenuItems(GetMenu(hWnd), bEnable);
DrawMenuBar(hWnd);
} else {
PostMessage(hWnd, WM_CLOSE, 0, 0L);
}
}
/* this is necessary whenever the paint window size changes */
/* such as loading a small picture */
static void PRIVATE ResetPaintWindow()
{
int x, y;
/* in case it's smaller or something like that */
EnablePaintWindow(TRUE);
CalcWnds(NOCHANGEWINDOW, NOCHANGEWINDOW, NOCHANGEWINDOW, NOCHANGEWINDOW);
x = pbrushRct[PAINTid].right - pbrushRct[PAINTid].left;
y = pbrushRct[PAINTid].bottom - pbrushRct[PAINTid].top;
MoveWindow(pbrushWnd[PAINTid],
pbrushRct[PAINTid].left, pbrushRct[PAINTid].top,
x, y, TRUE);
SendMessage(pbrushWnd[PAINTid], WM_SIZE, 0, MAKELONG(paintWid, paintHgt));
SetScrollPos(pbrushWnd[PAINTid], SB_HORZ, imageView.left, TRUE);
SetScrollPos(pbrushWnd[PAINTid], SB_VERT, imageView.top, TRUE);
InvalidateRect(pbrushWnd[PAINTid], NULL, TRUE);
UpdateWindow(pbrushWnd[PAINTid]);
}
static WORD PRIVATE RealFileType(TCHAR *Filename)
{
HANDLE fh;
BYTE buf[4];
BOOL fNoErr;
DWORD cbRead;
if((fh = MyOpenFile(Filename, NULL, OF_READ | OF_SHARE_DENY_WRITE)) == INVALID_HANDLE_VALUE)
{
SimpleMessage(IDSNotExist, Filename, MB_OK | MB_ICONEXCLAMATION);
return UNKNOWN_TYPE;
}
for( cbRead = 0; cbRead < sizeof(buf); cbRead++ )
buf[cbRead] = 0;
//MyByteReadFile(fh, buf, 4);
fNoErr = ReadFile( fh, buf, 4, &cbRead, NULL );
MyCloseFile(fh);
if (fNoErr && (cbRead == 0) )
return EMPTYFILE;
if(*buf == 0x42 && buf[1] == 0x4D) /* 'B' and 'M' */
return BITMAPFILE;
else if (buf[0] == 10)
return PCXFILE;
else if ((*((WORD *) buf) == 0x694c && *((WORD *) (buf+2)) == 0x536e) ||
(*((WORD *) buf) == 0x6144 && *((WORD *) (buf+2)) == 0x4d6e))
return MSPFILE;
else if (buf[0] == 2)
SimpleMessage(IDS3PlaneFile, Filename, MB_OK | MB_ICONEXCLAMATION);
else
SimpleMessage(IDSBadHeader, Filename, MB_OK | MB_ICONEXCLAMATION);
return UNKNOWN_TYPE;
}
static void PRIVATE GetWildcard(LPTSTR lpFilename, LPTSTR lpWildcard)
{
LPTSTR lpStr;
/* start with a star ... */
*lpWildcard++ = TEXT('*');
/* scan backwards until . or beginning of string */
for(lpStr = lpFilename + lstrlen(lpFilename);
lpStr > lpFilename && *lpStr != TEXT('.');
lpStr = CharPrev(lpFilename, lpStr))
;
/* if there is no extension use wFiletype to determine extension */
if(*lpStr != TEXT('.'))
lstrcpy(lpWildcard, (wFileType == PCXFILE) ? TEXT(".PCX") : TEXT(".BMP"));
else
lstrcpy(lpWildcard, lpStr);
}
static int PRIVATE MCDoDialog(int id, HWND hwnd, WNDPROC theProc)
{
REGISTER int result;
Terminatewnd();
UpdatImg();
if((result = DoDialog(id, hwnd, theProc)) == -1)
SimpleMessage(IDSNotEnufMem, NULL, MB_OK | MB_ICONHAND);
return(result);
}
static BOOL PRIVATE MCDoFileDialog(int id, HWND hwnd) {
Terminatewnd();
UpdatImg();
return DoFileDialog(id, hwnd);
}
void PUBLIC NewImage(WORD result)
/* Changed from:
static void PRIVATE NewImage(int result)
so that we can call this from pbserver.c
*/
{
TCHAR str[2];
LPTSTR lpFilePathName;
TCHAR sz[FILENAMElen + PATHlen];
/* For a more comprehensive file load message. */
lstrcpy(sz, filePath);
/* concatenate a backslash on the path only if this isn't the root */
if ((*sz) && (sz[lstrlen(sz) - 1] != TEXT('\\')))
lstrcat(sz, TEXT("\\"));
lstrcat(sz, fileName);
lpFilePathName = sz;
if (result || (imagePlanes == 1 && imagePixels == 1)) {
dpArray[COLORERASERtool] = EraserDP;
rgbColor = bwColor;
} else {
dpArray[COLORERASERtool] = ColEraDP;
rgbColor = colorColor;
}
InvalidateRect (pbrushWnd[COLORid], NULL, FALSE);
if (!result)
{
bFileLoaded = TRUE; /* For command line print to determine if
* a file has been successfully loaded.
*/
SetTitle(fileName[0] ? fileName : noFile);
ResetPaintWindow(); /* see below */
}
else
{
/* If it failed, create a monochrome by default */
if (!AllocImg(defaultWid, defaultHgt, 1, 1, TRUE))
{
ResetPaintWindow();
if (result == IDSNotDiskAvail)
{
/* Raid #2275 */
TCHAR pszString[144];
GetTempFileName (0, TEXT(""), 0, pszString);
pszString[1] = (TCHAR) 0;
/* 11-Jan-1993 - Jonma - OemToAnsi is obsolete and not
needed here as per bug # */
#ifdef CONVOEM
OemToAnsi (pszString, str);
#else
lstrcpy (str, pszString);
#endif
SimpleMessage (result, str, (WORD)(MB_OK | MB_ICONEXCLAMATION));
}
else
SimpleMessage (result, lpFilePathName, (WORD)(MB_OK | MB_ICONEXCLAMATION));
}
else
{
SimpleMessage (IDSNotEnufMem, lpFilePathName, (WORD)(MB_OK | MB_ICONHAND));
EnablePaintWindow (FALSE);
return;
}
wFileType = BITMAPFILE;
fileName[0] = TEXT('\0');
SetTitle (noFile);
}
InitShapeLibrary();
imageFlag = FALSE; /* does not need saving anymore */
PostMessage(pbrushWnd[TOOLid], WM_SELECTTOOL, 0, 0L);
}
TCHAR tempPath[PATHlen];
void PUBLIC MenuCmd(HWND hWnd, UINT item)
{
int i, result = 0;
int wftOld, wftTemp;
HMENU hMenu;
HCURSOR oldcsr;
RECT rWind;
HPALETTE hOldPalette;
static BOOL inZoom = FALSE;
LPTSTR lpFileUNCName;
TCHAR sz[FILENAMElen + PATHlen];
WORD wTmp;
#ifdef JAPAN // added by Hiraisi 02 Sep. 1992
static int tempType;
#endif
hMenu = GetMenu(hWnd);
SendMessage(pbrushWnd[PAINTid], WM_HIDECURSOR, 0, 0L);
SetCursorOn(); /* not any more */
oldcsr = SetCursor(LoadCursor(NULL, IDC_WAIT));
switch(item) {
case FILEload: /* just supply a name */
case FILEloadForPrint:
{ LPTSTR psz;
TCHAR szPath[MAX_PATH];
int i;
/* Register the document */
i = lstrlen(filePath);
CopyMemory(szPath, filePath, ByteCountOf(i));
if (i > 0 && !IsPathSep(szPath[i-1])) {
szPath[i++] = TEXT('\\');
}
lstrcpy( &szPath[i], fileName );
GetFullPathName( szPath, CharSizeOf(sz), sz, &psz);
}
lpFileUNCName = sz;
if (fOLE && !fInvisible)
{
if (!vfIsLink)
UnfixMenus();
/* OLE modification: We succeeded so open a new document */
vpdoc = InitDoc(vpsrvr, 0, lpFileUNCName);
}
fLoading = TRUE;
Terminatewnd();
if(filePath[0])
changeDiskDir(filePath);
hOldPalette = hPalette;
hPalette = NULL; /* no more palette */
imageView.top = imageView.left = 0; /* reset view */
DlgCaptionNo = -1;
switch(wTmp = RealFileType(fileName)) {
case BITMAPFILE:
result = LoadBitmapFile(hWnd, lpFileUNCName, NULL);
break;
case PCXFILE:
if(!(result = LoadImg(hWnd, lpFileUNCName)))
wFileType = PCXFILE;
break;
case MSPFILE:
if(SimpleMessage(IDSXlat, lpFileUNCName, MB_OKCANCEL | MB_ICONEXCLAMATION)
== IDCANCEL)
goto Error1;
if(!(result = LoadMSPImg(hWnd)))
wFileType = BITMAPFILE;
break;
case EMPTYFILE:
wFileType = BITMAPFILE;
goto Error2;
default:
goto Error1;
break;
}
if (hOldPalette)
DeleteObject(hOldPalette);
NewImage((WORD)result);
fLoading = FALSE;
break;
Error1:
lstrcpy(fileName, tempName);
lstrcpy(filePath, tempPath);
#ifdef JAPAN // added by Hiraisi 02 Sep. 1992
wFileType = tempType;
#endif
Error2:
hPalette = hOldPalette;
fLoading = FALSE;
/* Rename the document back */
if (fOLE && !fInvisible) {
TCHAR sz[FILENAMElen + PATHlen];
if (!vfIsLink)
UnfixMenus();
/* OLE modification: We succeeded so open a new document */
if (vpdoc)
DeleteDoc(vpdoc);
lstrcpy(sz, tempPath);
if (*sz)
lstrcat(sz, TEXT("\\"));
lstrcat(sz, tempName);
vpdoc = InitDoc(vpsrvr, 0, sz);
}
if (fInvisible || item == FILEloadForPrint)
PostMessage(pbrushWnd[PARENTid], WM_SYSCOMMAND, SC_CLOSE, 0L);
else
SendMessage(hWnd, WM_COMMAND, ((wTmp == EMPTYFILE) ? FILEinit : FILEnew), 0L);
break;
case FILEnew:
case FILEopen:
case FILEinit:
if (!SaveAsNeeded())
break;
if(item == FILEnew || item == FILEinit) {
GetWildcard(fileName, wildCard);
namePtr = fileName;
pathPtr = filePath;
Terminatewnd();
UpdatImg();
if(filePath[0])
changeDiskDir(filePath);
if (item != FILEinit)
fileName[0] = TEXT('\0');
if(hPalette)
DeleteObject(hPalette);
hPalette = NULL; /* Palette goes bye bye */
if (fOLE && !fInvisible) {
if (!vfIsLink) {
UnfixMenus();
SetTitle(noFile);
}
/* OLE modification: We succeeded: Register a (NULL) document */
if (vpdoc)
DeleteDoc(vpdoc);
vpdoc = InitDoc(vpsrvr, 0, fileName);
}
fLoading = TRUE;
result = AllocImg(nNewImageWidth, nNewImageHeight,
nNewImagePlanes, nNewImagePixels, TRUE);
wFileType = GetImageFileType(imagePixels * imagePlanes);
fLoading = FALSE;
NewImage((WORD)result);
} else {
fileMode = LOADfile;
DlgCaptionNo = FILELOAD;
lstrcpy(tempName, fileName);
lstrcpy(tempPath, filePath);
#ifdef JAPAN // added by Hiraisi 02 Sep. 1992
tempType = wFileType;
#endif
wftOld = wFileType;
result = DoFileDialog(LOADBOX, hWnd);
wftTemp = wFileType;
if(!pbrushWnd[PARENTid] || !result) {
lstrcpy(fileName, tempName);
lstrcpy(filePath, tempPath);
break;
}
else
{
lstrcpy(fileName, namePtr);
lstrcpy(filePath, pathPtr);
}
if (fOLE && !fInvisible) {
if (vpdoc) {
wFileType = (WORD)wftOld;
DeleteDoc(vpdoc);
wFileType = (WORD)wftTemp;
}
}
GetWildcard(fileName, wildCard);
namePtr = fileName;
pathPtr = filePath;
Terminatewnd();
UpdatImg();
if(filePath[0])
changeDiskDir(filePath);
SendMessage(hWnd, WM_COMMAND, FILEload, 0L);
}
#ifdef JAPAN //KKBUGFIX added by Hiraisi 11 Nov. 1992 (BUG#457/WIN31 in Japan)
// The mouse window sometimes overlaps on the paint window.
if( mouseFlag )
SendMessage(mouseWnd, WM_MOUSEWINDOW, 0, 0L);
#endif
break;
case FILEsave:
if (!vfIsLink) /* It's really update! */
break;
{
int SaveIds[] = { IDS_PCXFILTER, IDS_MONOBMPFILTER, IDS_16COLORFILTER,
IDS_256COLORFILTER, IDS_24BITFILTER, 0 };
WORD twFileType;
HDC hDC;
if (hDC = GetWindowDC(pbrushWnd[PAINTid])) {
twFileType = GetImageFileType(GetDeviceCaps(hDC, BITSPIXEL) * GetDeviceCaps(hDC, PLANES));
ReleaseDC(pbrushWnd[PAINTid], hDC);
} else
twFileType = 1;
if (twFileType < wFileType
&& BITMAPFILE <= twFileType
&& twFileType <= BITMAPFILE24)
{
TCHAR szOldRes[FILTERMAX];
TCHAR szNewRes[FILTERMAX];
LoadString(hInst, (WORD)SaveIds[twFileType], szOldRes, CharSizeOf(szOldRes));
LoadString(hInst, (WORD)SaveIds[wFileType], szNewRes, CharSizeOf(szNewRes));
LoadString(hInst, W_SAVING_LOWER_RESOLUTION1, szTemplate, WARNMSGMAX);
LoadString(hInst, W_SAVING_LOWER_RESOLUTION2, szTemplate + lstrlen(szTemplate), WARNMSGMAX);
LoadString(hInst, W_SAVING_LOWER_RESOLUTION3, szTemplate + lstrlen(szTemplate), WARNMSGMAX);
wsprintf(szMessage, szTemplate, szNewRes, szOldRes);
switch (MessageBox(GetActiveWindow(), szMessage, pgmTitle, MB_OKCANCEL | MB_ICONHAND))
{
case IDCANCEL:
SetCursor(oldcsr);
return;
case IDOK:
/* Default to saving the lower resolution */
wFileType = twFileType;
break;
}
}
}
changeDiskDir(filePath);
/* Fall through */
case FILEsaveas:
if (!vfIsLink)
if (!SaveAsNeeded())
break;
IsCanceled = FALSE;
Terminatewnd();
UpdatImg();
if (!(*fileName))
item = FILEsaveas;
if(item == FILEsaveas) {
GetWildcard(namePtr, wildCard);
lstrcpy(tempName, fileName);
namePtr = tempName;
pathPtr = filePath;
fileMode = SAVEfile;
DlgCaptionNo = FILESAVE;
result = DoFileDialog(SAVEBOX, hWnd);
/* if a client closes us in the midst of the SaveAs dlg, abort */
if(!pbrushWnd[PARENTid] || !result) {
IsCanceled = TRUE;
break;
}
lstrcpy(fileName, tempName);
SetTitle(fileName);
}
if(wFileType == BITMAPFILE ||
wFileType == BITMAPFILE4 ||
wFileType == BITMAPFILE8 ||
wFileType == BITMAPFILE24 ||
wFileType == MSPFILE)
IsCanceled = !SaveBitmapFile(hWnd, 0, 0, imageWid, imageHgt, NULL);
else
IsCanceled = !SaveImg(hWnd, 0, 0, imageWid, imageHgt,
imageByteWid, NULL);
if (fOLE && !IsCanceled) { /* OLE modification */
if (item == FILEsaveas) {
TCHAR sz[FILENAMElen + PATHlen];
lstrcpy(sz, filePath);
if (*sz)
lstrcat(sz, TEXT("\\"));
lstrcat(sz, fileName);
if (vfIsLink)
ChangeDocName(&vpdoc, sz);
else {
if (vpdoc)
DeleteDoc(vpdoc);
vpdoc = InitDoc(vpsrvr, 0, sz);
UnfixMenus();
}
}
if (vpdoc)
OleSavedServerDoc(vpdoc->lhdoc);
}
break;
/* OLE modification -- mikel */
case FILEupdate:
if (vpdoc)
{
int Result;
if (theTool == PICKtool && TerminateKill)
SendMessage(pbrushWnd[PAINTid], WM_TERMINATE, 0, 0);
if (OleSavedServerDoc(vpdoc->lhdoc) == OLE_OK)
{
imageFlag = FALSE;
break;
}
/* If OleSavedServerDoc() fails, it is probably Excel/PowerPnt which
* do not update on OLE_SAVED. Hence imageFlag is not cleared.
* Allow the user to explicitly update and exit, or continue with the
* editing. */
Result = DoDialog(DLG_OBJECTUPDATE,
pbrushWnd[PARENTid],
(WNDPROC)ObjectUpdateDlgProc);
if (Result == FALSE) /* update the object and exit */
{
iExitWithSaving = IDYES;
DeleteDoc(vpdoc);
DeleteServer(vpsrvr);
}
}
break;
/* end of OLE modification */
case FILEprinter:
// Commmon printer setup dialog added 02/28/91
#ifdef BLOCKONMSG
EnterMsgMode();
#endif
PD.Flags = PD_PRINTSETUP;
if(PrintDlg((LPPRINTDLG)&PD))
bIsPrinterDefault = FALSE;
if(CommDlgExtendedError()){ /* If error re-initialize PD. */
FreePrintHandles();
PD.lStructSize = sizeof(PRINTDLG);
PD.hwndOwner = hWnd;
PD.nCopies = 1;
}
break;
case FILEpage:
MCDoDialog(PAGESETUP, hWnd, (WNDPROC)PageSetDlg);
break;
case FILEprint:
{
BOOL fGraphicsPrinter = FALSE;
int iResult = 0;
if (printDC = GetPrtDC())
{
fGraphicsPrinter = (GetDeviceCaps(printDC, RASTERCAPS) & RC_BITBLT);
if (!fGraphicsPrinter)
{
DeleteDC(printDC);
printDC = NULL;
SimpleMessage(IDSCANTPRINTGRAPHICS, NULL, MB_OK | MB_ICONEXCLAMATION);
}
else
{
iResult = MCDoDialog(PRINTBOX, hWnd, (WNDPROC)PrintFileDlg);
/* If the dialog is cancelled, then delete the DC.
*/
if (iResult == 0)
{
DeleteDC(printDC);
printDC = NULL;
}
}
}
}
break;
case FILEshow:
Terminatewnd();
UpdatImg();
fullWnd = CreateWindow(TEXT("pbFull"), NULL, WS_POPUP,
0, 0,
GetSystemMetrics(SM_CXSCREEN),
GetSystemMetrics(SM_CYSCREEN),
pbrushWnd[PARENTid], NULL, hInst, NULL);
if(!fullWnd)
break;
ShowWindow(fullWnd, SHOW_OPENWINDOW);
UpdateWindow(fullWnd);
SetFocus(fullWnd);
break;
case FILEclear:
MCDoDialog(CLEARBOX, hWnd, (WNDPROC)ClearDlg);
break;
case FILEexit:
PostMessage(pbrushWnd[PARENTid], WM_SYSCOMMAND, SC_CLOSE, 0L);
break;
case EDITundo:
if(bZoomedOut) {
SendMessage(zoomOutWnd, WM_COMMAND, EDITundo, 0l);
} else if(inMagnify) {
SendMessage(pbrushWnd[PAINTid], WM_ZOOMUNDO, 0, 0L);
Terminatewnd();
/* set this if we closed the box during zoomin mode */
if(!mouseFlag)
CheckMenuItem(hMenu, MISCmousePos, MF_UNCHECKED);
} else {
Terminatewnd();
UndoImg();
}
break;
case EDITpaste:
if (!OpenClipboard(hWnd))
break;
if (GetClipboardData(CF_BITMAP) ||
GetClipboardData(CF_DIB) ||
GetClipboardData(CF_METAFILEPICT)) /* bitmap/metafile on clipbrd */
{
Terminatewnd();
if (theTool != SCISSORStool)
SendMessage(pbrushWnd[TOOLid], WM_SELECTTOOL, PICKtool, 0L);
imageFlag = TRUE;
}
else if (GetClipboardData(CF_TEXT)) /* only text available on the clipbrd */
{
if (theTool != TEXTtool)
SendMessage(pbrushWnd[TOOLid], WM_SELECTTOOL, TEXTtool, 0L);
}
else
{
CloseClipboard();
break;
}
CloseClipboard();
SendMessage(bZoomedOut ? zoomOutWnd : pbrushWnd[PAINTid],
WM_PASTE, 0, 0L);
break;
case EDITcutpict:
SendMessage(bZoomedOut ? zoomOutWnd : pbrushWnd[PAINTid],
WM_CUT, 0, 0L);
break;
case EDITcopypict:
SendMessage(bZoomedOut ? zoomOutWnd : pbrushWnd[PAINTid],
WM_COPY, 0, 0L);
break;
case EDITcopyTo:
GetWildcard(namePtr, wildCard);
clipName[0] = TEXT('\0');
namePtr = clipName;
pathPtr = clipPath;
fileMode = SAVEfile;
DlgCaptionNo = COPYTO;
if(clipPath[0])
changeDiskDir(clipPath);
i = wFileType;
SendMessage(bZoomedOut ? zoomOutWnd : pbrushWnd[PAINTid],
WM_COPYTO, 0, 0L);
wFileType = (WORD)i;
namePtr = fileName;
pathPtr = filePath;
break;
case EDITpasteFrom:
GetWildcard(namePtr, wildCard);
namePtr = clipName;
pathPtr = clipPath;
fileMode = LOADfile;
DlgCaptionNo = PASTEFROM;
if(clipPath[0])
changeDiskDir(clipPath);
i = wFileType;
if(wFileType == MSPFILE)
wFileType = BITMAPFILE;
SendMessage(pbrushWnd[TOOLid], WM_SELECTTOOL, PICKtool, 0L);
if (!(result = MCDoFileDialog(LOADBOX, hWnd)))
goto EPFErr;
switch(RealFileType(namePtr)) {
case BITMAPFILE:
result = LoadBitmapFile(hWnd, namePtr, NULL);
break;
case PCXFILE:
result = LoadImg(hWnd, namePtr);
break;
case MSPFILE:
result = IDSNoMSPPaste;
break;
default: /* invalid format (user already notified) */
goto EPFErr;
break;
}
if(result)
SimpleMessage((WORD)result, namePtr, (WORD)(MB_OK | MB_ICONEXCLAMATION));
else {
UpdateWindow(hWnd);
SendMessage(bZoomedOut ? zoomOutWnd : pbrushWnd[PAINTid],
WM_PASTEFROM, 0, 0L);
imageFlag = TRUE;
}
EPFErr:
wFileType = (WORD)i;
break;
case STYLEplain:
CheckMenuItem(hMenu, STYLEplain, MF_CHECKED);
#ifdef JAPAN // added by Hiraisi 08 Apr. 1992 : jinwoo 11/9/92
if( bWritable ){
for (i = STYLEbold; i <= STYLEvertical; ++i)
CheckMenuItem(hMenu, i, MF_UNCHECKED);
if( bVertical ){
bVertical = FALSE;
theFont = horiFont;
if( theTool == TEXTtool )
DrawCursor = szPbCursor(TEXTtool);
}
}
else{
for (i = STYLEbold; i <= STYLEshadow; ++i)
CheckMenuItem(hMenu, (WORD)i, MF_UNCHECKED);
}
vertFont.lfWeight = nonBoldWeight;
vertFont.lfItalic = vertFont.lfUnderline = FALSE;
horiFont.lfWeight = nonBoldWeight;
horiFont.lfItalic = horiFont.lfUnderline = FALSE;
theFont.lfWeight = nonBoldWeight;
#else
for (i = STYLEbold; i <= STYLEshadow; ++i)
CheckMenuItem(hMenu, (WORD)i, MF_UNCHECKED);
theFont.lfWeight = FW_MEDIUM;
#endif
theFont.lfItalic = theFont.lfUnderline = FALSE;
outline = shadow = FALSE;
SendMessage(pbrushWnd[PAINTid], WM_CHANGEFONT, 0, 0L);
break;
case STYLEbold:
if(theFont.lfWeight != FW_BOLD) {
theFont.lfWeight = FW_BOLD;
CheckMenuItem(hMenu, STYLEbold, MF_CHECKED);
} else {
#ifdef JAPAN // added by Hiraisi 06 Jul. 1992 : jinwoo 11/9/92
theFont.lfWeight = nonBoldWeight;
#else
theFont.lfWeight = FW_MEDIUM;
#endif
CheckMenuItem(hMenu, STYLEbold, MF_UNCHECKED);
}
goto AllStyles;
case STYLEitalic:
if(!theFont.lfItalic) {
theFont.lfItalic = TRUE;
CheckMenuItem(hMenu, STYLEitalic, MF_CHECKED);
} else {
theFont.lfItalic = FALSE;
CheckMenuItem(hMenu, STYLEitalic, MF_UNCHECKED);
}
goto AllStyles;
case STYLEunderline:
if(!theFont.lfUnderline) {
theFont.lfUnderline = TRUE;
CheckMenuItem(hMenu, STYLEunderline, MF_CHECKED);
} else {
theFont.lfUnderline = FALSE;
CheckMenuItem(hMenu, STYLEunderline, MF_UNCHECKED);
}
goto AllStyles;
case STYLEoutline:
if(!outline) {
outline = TRUE;
shadow = FALSE;
CheckMenuItem(hMenu, STYLEoutline, MF_CHECKED);
CheckMenuItem(hMenu, STYLEshadow, MF_UNCHECKED);
} else {
outline = FALSE;
CheckMenuItem(hMenu, STYLEoutline, MF_UNCHECKED);
}
goto AllStyles;
case STYLEshadow:
if(!shadow) {
shadow = TRUE;
outline = FALSE;
CheckMenuItem(hMenu, STYLEshadow, MF_CHECKED);
CheckMenuItem(hMenu, STYLEoutline, MF_UNCHECKED);
} else {
shadow = FALSE;
CheckMenuItem(hMenu, STYLEshadow, MF_UNCHECKED);
}
goto AllStyles;
#ifdef JAPAN // added by Hiraisi 07 Apr. 1992 : jinwoo 11/9/92
case STYLEvertical: /* Vertical-Writing option */
if( !bVertical ) {
bVertical = TRUE;
theFont = vertFont;
CheckMenuItem(hMenu, STYLEvertical, MF_CHECKED);
} else {
bVertical = FALSE;
theFont = horiFont;
CheckMenuItem(hMenu, STYLEvertical, MF_UNCHECKED);
}
if( theTool == TEXTtool )
DrawCursor = szPbCursor(TEXTtool);
goto AllStyles;
#endif
AllStyles:
#ifdef JAPAN // added by Hiraisi 06 Jul. 1992 : jinwoo 11/9/92
if( (theFont.lfWeight==FW_MEDIUM ||
theFont.lfWeight==nonBoldWeight)
&& !theFont.lfItalic
&& !theFont.lfUnderline
&& !outline && !shadow && !bVertical)
#else
if(theFont.lfWeight==FW_MEDIUM
&& !theFont.lfItalic
&& !theFont.lfUnderline
&& !outline && !shadow)
#endif
CheckMenuItem(hMenu, STYLEplain, MF_CHECKED);
else
CheckMenuItem(hMenu, STYLEplain, MF_UNCHECKED);
#ifdef JAPAN // added by Hiraisi 17 Apr. 1992 : jinwoo 11/9/92
vertFont.lfWeight = theFont.lfWeight;
vertFont.lfItalic = theFont.lfItalic;
vertFont.lfUnderline = theFont.lfUnderline;
horiFont.lfWeight = theFont.lfWeight;
horiFont.lfItalic = theFont.lfItalic;
horiFont.lfUnderline = theFont.lfUnderline;
#endif
SendMessage(pbrushWnd[PAINTid], WM_CHANGEFONT, 0, 0L);
break;
case FONTS:
{
LOGFONT LogFont;
HDC hDC;
CHOOSEFONT cfStruct;
int Result;
#ifdef JAPAN // added by Hiraisi 20 May. 1992 : jinwoo 11/9/92
FARPROC lpfnDeleteFacename;
#endif
TerminateKill = FALSE;
hDC = GetDC(hWnd);
LogFont = theFont;
cfStruct.lStructSize = sizeof(CHOOSEFONT);
cfStruct.hwndOwner = hWnd;
cfStruct.hDC = hDC;
cfStruct.lpLogFont = &LogFont;
cfStruct.Flags = CF_SCREENFONTS | CF_EFFECTS |
#ifdef JAPAN // added by Hiraisi 20 May. 1992 : jinwoo 11/9/92
CF_ENABLEHOOK |
#endif
CF_INITTOLOGFONTSTRUCT | CF_ENABLETEMPLATE;
cfStruct.rgbColors = rgbColor[theForeg];
cfStruct.lCustData = 0L;
#ifdef JAPAN // added by Hiraisi 20 May. 1992 : jinwoo 11/9/92
lpfnDeleteFacename = MakeProcInstance( (FARPROC)DeleteFacename, hInst );
cfStruct.lpfnHook = (FARPROC)lpfnDeleteFacename;
#else
cfStruct.lpfnHook = (LPCFHOOKPROC)NULL;
#endif
cfStruct.lpTemplateName = (LPTSTR) MAKEINTRESOURCE(DLG_FONT);
cfStruct.hInstance = hInst;
cfStruct.lpszStyle = NULL;
cfStruct.nFontType = SCREEN_FONTTYPE;
cfStruct.nSizeMin = 0;
cfStruct.nSizeMax = 0;
#ifdef BLOCKONMSG
EnterMsgMode();
#endif
#ifdef JAPAN // added by Hiraisi 20 Apr. 1992 : jinwoo 11/9/92
if( bVertical )
lstrcpy( LogFont.lfFaceName, horiFont.lfFaceName );
#endif
Result = ChooseFont(&cfStruct);
#ifdef JAPAN // added by Hiraisi 20 May. 1992 : jinwoo 11/9/92
FreeProcInstance( lpfnDeleteFacename );
#endif
ReleaseDC(hWnd, hDC);
TerminateKill = TRUE;
if (Result)
{
theFont = LogFont;
for (i = STYLEplain; i <= STYLEunderline; ++i) /* FGS fix 1/21/92 */
CheckMenuItem(hMenu, i, MF_UNCHECKED);
if (theFont.lfWeight == FW_BOLD)
CheckMenuItem(hMenu, STYLEbold, MF_CHECKED);
if (theFont.lfItalic)
CheckMenuItem(hMenu, STYLEitalic, MF_CHECKED);
if (theFont.lfUnderline)
CheckMenuItem(hMenu, STYLEunderline, MF_CHECKED);
#ifdef JAPAN // added by Hiraisi 06 Jul. 1992 : jinwoo 11/9/92
if( (theFont.lfWeight==FW_MEDIUM ||
theFont.lfWeight==nonBoldWeight)
&& !theFont.lfItalic
&& !theFont.lfUnderline
&& !outline && !shadow && !bVertical )
#else
if (theFont.lfWeight==FW_MEDIUM
&& !theFont.lfItalic
&& !theFont.lfUnderline
&& !outline && !shadow)
#endif
CheckMenuItem(hMenu, STYLEplain, MF_CHECKED);
#ifdef JAPAN // added by Hiraisi 07 Apr. 1992 : jinwoo 11/9/92
hDC = GetDC(hWnd);
CheckVerticalWriting( hDC, LogFont.lfFaceName );
if( bVertical )
theFont = vertFont;
ReleaseDC(hWnd, hDC);
if( theFont.lfWeight != FW_BOLD ) // added 06 Jul. 1992
nonBoldWeight = theFont.lfWeight;
//KKBUGFIX // added by Hiraisi 15 May. 1992
/*
The reason is as follows.
A part of bk color of texts becomes color of the parent window
when font size is changed larger than before,
if color of the parent window is not white.
This occurs when CHOOSEFONT dialog box was moved.
*/
UpdateWindow(pbrushWnd[PAINTid]);
#endif
SendMessage(pbrushWnd[PAINTid], WM_CHANGEFONT, 0, 0);
}
#ifdef JAPAN //KKBUGFIX // added by Hiraisi 04 Sep. 1992 (in Japan)
/*
The reason is as follows.
We need to create our own caret again because it had already
been destroyed.
And no caret appears though we can input chars,
if we don't do this.
*/
else
SendMessage(pbrushWnd[PAINTid], WM_RESETCARET, 0, 0);
#endif
}
break;
#if defined (JAPAN) & defined (IME_HIDDEN) // added by Hiraisi
case EDITimeHidden:
{
extern BOOL bIMEhidden, bHidden;
extern TCHAR winIniImeHidden[];
TCHAR szBuf[2];
Terminatewnd();
bIMEhidden = !bIMEhidden;
if( bIMEhidden && bHidden )
CheckMenuItem(hMenu, EDITimeHidden, MF_CHECKED);
else
CheckMenuItem(hMenu, EDITimeHidden, MF_UNCHECKED);
wsprintf(szBuf, TEXT("%d"), bIMEhidden);
WriteProfileString(winIniAppName, winIniImeHidden, szBuf);
break;
}
#endif
case PICKflipH:
case PICKflipV:
case PICKinverse:
case PICKsg:
case PICKtilt:
SendMessage(pbrushWnd[PAINTid], (WORD)(WM_PICKFLIPH + item - PICKflipH), 0, 0L);
break;
case PICKclear:
CheckMenuItem(hMenu, PICKclear,
(WORD)((clearFlag ^= TRUE) ? MF_CHECKED : MF_UNCHECKED));
break;
case MISCzoomIn:
if(bZoomedOut) {
PostMessage(zoomOutWnd, WM_KEYDOWN, VK_ESCAPE, 0l);
} else {
zoomAmount = 8;
CalcView();
Terminatewnd();
UpdatImg();
inZoom = TRUE;
EnableMenuItem(hMenu, ZOOMundo, MF_ENABLED | MF_BYCOMMAND);
EnableMenuItems(hMenu, MiZoInEn1, MF_GRAYED | MF_BYCOMMAND);
EnableMenuItems(hMenu, MiZoInEn2, MF_GRAYED | MF_BYPOSITION);
DrawMenuBar(pbrushWnd[PARENTid]);
if(theTool != ROLLERtool)
SendMessage(pbrushWnd[TOOLid], WM_SELECTTOOL, BRUSHtool, 0L);
EnableWindow(pbrushWnd[TOOLid], FALSE);
DrawProc = ZoomInDP;
cursTool = ZOOMINtool;
DrawCursor = NULL;
PbSetCursor(DrawCursor = NULL);
}
break;
case MISCzoomOut:
if(inMagnify || inZoom) {
SendMessage(hWnd, WM_COMMAND, ZOOMaccept, 0L);
break;
}
Terminatewnd();
UpdatImg();
zoomOutWnd = CreateWindow(TEXT("pbZoomOut"), NULL,
WS_CHILD | WS_BORDER | WS_OVERLAPPED,
pbrushRct[PAINTid].left, pbrushRct[PAINTid].top,
pbrushRct[PAINTid].right - pbrushRct[PAINTid].left,
pbrushRct[PAINTid].bottom - pbrushRct[PAINTid].top,
pbrushWnd[PARENTid], NULL, hInst, NULL);
if(!zoomOutWnd)
break;
ShowWindow(pbrushWnd[PAINTid], SW_HIDE);
ShowWindow(zoomOutWnd, SW_SHOWNA);
UpdateWindow(zoomOutWnd);
SetFocus(zoomOutWnd);
bZoomedOut = TRUE;
EnableMenuItem(hMenu, ZOOMundo, MF_ENABLED | MF_BYCOMMAND);
EnableMenuItems(hMenu, MiZoOtEn1, MF_GRAYED | MF_BYCOMMAND);
EnableMenuItems(hMenu, MiZoInEn2, MF_GRAYED | MF_BYPOSITION);
DrawMenuBar(pbrushWnd[PARENTid]);
break;
case ZOOMaccept:
if(inMagnify || inZoom)
SendMessage(pbrushWnd[PAINTid], WM_ZOOMACCEPT, 0, 0L);
else if(bZoomedOut) {
/* accept the paste*/
SendMessage(zoomOutWnd, WM_COMMAND, ZOOMaccept, 0l);
/* clean up any DC's or other junk */
SendMessage(zoomOutWnd, WM_COMMAND, EDITundo, 0l);
}
Terminatewnd();
inMagnify = inZoom = FALSE;
/* set this if we closed the box during zoomin mode */
if(!mouseFlag)
CheckMenuItem(hMenu, MISCmousePos, MF_UNCHECKED);
break;
case MISCbrush:
MCDoDialog(BRUSHBOX, hWnd, (WNDPROC)BrushDlg);
break;
case MISCOmitPictureFormat:
{
TCHAR szBuf[4];
fOmitPictureFormat = !fOmitPictureFormat;
wsprintf(szBuf, TEXT("%d"), fOmitPictureFormat);
WriteProfileString(winIniAppName, winIniOmitPictureFormat, szBuf);
}
break;
case MISCeditColor:
Terminatewnd();
UpdatImg();
if(hDlgModeless = colorWnd =
CreateDialog(hInst, (LPTSTR) MAKEINTRESOURCE(COLORBOX),
pbrushWnd[PARENTid], (WNDPROC)lpColorDlg)) {
EnableWindow(pbrushWnd[PAINTid], FALSE);
EnableWindow(pbrushWnd[TOOLid], FALSE);
EnableWindow(pbrushWnd[SIZEid], FALSE);
EnableMenuItems(hMenu, MiEdCoEn, MF_GRAYED | MF_BYPOSITION);
DrawMenuBar(pbrushWnd[PARENTid]);
} else {
SimpleMessage(IDSNotEnufMem, NULL, MB_OK | MB_ICONHAND);
}
break;
case MISCgetColor:
lstrcpy(wildCard, TEXT("*.PAL"));
namePtr = tempName;
pathPtr = colorPath;
fileMode = LOADfile;
DlgCaptionNo = COLORLOAD;
if (!(result = MCDoFileDialog(CLRLDBOX, hWnd)))
break;
LoadColr(hWnd, tempName);
break;
case MISCsaveColor:
lstrcpy(wildCard, TEXT("*.PAL"));
tempName[0] = TEXT('\0');
namePtr = tempName;
pathPtr = colorPath;
fileMode = SAVEfile;
DlgCaptionNo = COLORSAVE;
if (!(result = MCDoFileDialog(CLRSVBOX, hWnd)))
break;
SaveColr(hWnd, tempName);
break;
case MISCmousePos:
if(mouseFlag) {
if(DestroyWindow(mouseWnd)) {
CheckMenuItem(hMenu, MISCmousePos, MF_UNCHECKED);
mouseFlag = FALSE;
}
} else {
if(mouseWnd = CreateDialog(hInst, (LPTSTR) MAKEINTRESOURCE(MOUSEBOX),
pbrushWnd[PARENTid], (WNDPROC)lpMouseDlg)) {
mouseFlag = TRUE;
CheckMenuItem(hMenu, MISCmousePos, MF_CHECKED);
SetActiveWindow(pbrushWnd[PARENTid]);
} else {
SimpleMessage(IDSNotEnufMem, NULL, MB_OK | MB_ICONHAND);
}
}
break;
case WINDOWtool:
/* Must update the image before showing the new window
*/
Terminatewnd();
UpdatImg();
if(GetMenuState(hMenu, WINDOWtool, MF_BYCOMMAND) & MF_CHECKED) {
CheckMenuItem(hMenu, WINDOWtool, MF_BYCOMMAND | MF_UNCHECKED);
ShowWindow(pbrushWnd[SIZEid], SW_HIDE);
ShowWindow(pbrushWnd[TOOLid], SW_HIDE);
} else {
CheckMenuItem(hMenu, WINDOWtool, MF_BYCOMMAND | MF_CHECKED);
ShowWindow(pbrushWnd[TOOLid], SW_SHOWNA);
ShowWindow(pbrushWnd[SIZEid], SW_SHOWNA);
}
goto AllWindows;
case WINDOWpalette:
/* Must update the image before showing the new window
*/
Terminatewnd();
UpdatImg();
if(GetMenuState(hMenu, WINDOWpalette, MF_BYCOMMAND) & MF_CHECKED) {
CheckMenuItem(hMenu, WINDOWpalette, MF_BYCOMMAND | MF_UNCHECKED);
ShowWindow(pbrushWnd[COLORid], SW_HIDE);
} else {
CheckMenuItem(hMenu, WINDOWpalette, MF_BYCOMMAND | MF_CHECKED);
ShowWindow(pbrushWnd[COLORid], SW_SHOWNA);
}
goto AllWindows;
AllWindows:
CalcWnds(NOCHANGEWINDOW, NOCHANGEWINDOW, NOCHANGEWINDOW, NOCHANGEWINDOW);
/* the SIZE message puts the windows in the right spot */
GetClientRect(pbrushWnd[PARENTid], &rWind);
SendMessage(pbrushWnd[PARENTid], WM_SIZE,
SIZENORMAL, MAKELONG(rWind.right, rWind.bottom));
InvalidateRect(pbrushWnd[PAINTid], NULL, FALSE);
BringWindowToTop(pbrushWnd[PAINTid]);
break;
case MENU_INDEX:
Help(hWnd, HELP_INDEX, 0L);
break;
case MENU_SEARCH:
Help(hWnd, HELP_PARTIALKEY, (DWORD)TEXT(""));
break;
case MENU_USINGHELP:
Help(hWnd, HELP_HELPONHELP, 0L);
break;
case MENUabout:
#ifdef WIN32
if (ShellAbout(hWnd, pgmTitle, TEXT(""), LoadIcon(hInst, pgmName)) == -1)
SimpleMessage(IDSNotEnufMem, NULL, MB_OK|MB_ICONHAND|MB_SYSTEMMODAL);
#endif
break;
#ifdef DEBUG
case DEBUG_GLOBALCOMPACT:
GlobalCompact(-1L);
break;
#endif
default:
break;
}
SetCursor(oldcsr);
}
WORD PUBLIC GetImageFileType(int Pixels) {
if (!Pixels)
Pixels = imagePixels * imagePlanes;
/* Sweet success, set the default file type */
if (Pixels > 8) return BITMAPFILE24;
else if (Pixels > 4) return BITMAPFILE8;
else if (Pixels > 1) return BITMAPFILE4;
else return BITMAPFILE;
}
BOOL GetPrintParms(
HDC hDC)
{
HDC hPrintDC, dc;
extern int hSizePrt;
extern int vSizePrt;
extern int hResPrt;
extern int vResPrt;
extern int xPelsPrt;
extern int yPelsPrt;
/* check for printer driver */
if (!hDC)
hPrintDC = GetPrtDC();
else
hPrintDC = hDC;
dc = (hPrintDC ? hPrintDC : GetDisplayDC(pbrushWnd[PARENTid]));
if(!dc)
return(FALSE);
hSizePrt = GetDeviceCaps(dc, HORZSIZE);
vSizePrt = GetDeviceCaps(dc, VERTSIZE);
hResPrt = GetDeviceCaps(dc, HORZRES);
vResPrt = GetDeviceCaps(dc, VERTRES);
xPelsPrt = GetDeviceCaps(dc, LOGPIXELSX);
yPelsPrt = GetDeviceCaps(dc, LOGPIXELSY);
if (!hDC && hPrintDC) {
DeleteDC(hPrintDC);
return TRUE;
} else if (!hPrintDC) {
ReleaseDC(pbrushWnd[PARENTid], dc);
return FALSE;
}
}
BOOL SaveFileNameOK(
TCHAR szPath[],
TCHAR szFile[])
{
/* EDH 9 Oct 91
* Check if ".\file" exists instead of "file". The Windows dir gets searched
* if the dot isn't specified (if no dir is specified).
*/
if (*szPath)
changeDiskDir(szPath);
if (IsReadOnly(szFile)) {
SimpleMessage(IDSReadOnly, szFile, MB_OK | MB_ICONEXCLAMATION);
return FALSE;
}
return TRUE;
}
BOOL FAR PASCAL ObjectUpdateDlgProc(HWND hDlg, UINT message, WPARAM wParam, LONG lParam)
{
switch (message) {
case WM_COMMAND:
switch (GET_WM_COMMAND_ID(wParam,lParam)) {
case IDCANCEL:
case IDD_CONTINUEEDIT:
EndDialog(hDlg, TRUE);
break;
case IDD_UPDATEEXIT:
EndDialog(hDlg, FALSE);
break;
default:
break;
}
break;
case WM_INITDIALOG:
{
TCHAR szMsg[200];
TCHAR szStr[100];
LoadString(hInst, IDS_OBJECTUPDATE, szStr, CharSizeOf(szStr));
wsprintf(szMsg, szStr, szClientName, pgmTitle);
SetDlgItemText(hDlg, IDD_TEXT, szMsg);
return TRUE; /* default Push button gets the focus */
}
break;
default:
break;
}
return FALSE;
}
#ifdef JAPAN // added by Hiraisi 07 Apr. 1992 : jinwoo 11/9/92
/*
* This function is called when the selected font has facename(s) with @.
*/
//int FAR PASCAL _export CheckEscapement( lf, tm, nType, lpData )
int FAR PASCAL CheckEscapement( lf, tm, nType, lpData )
LPLOGFONT lf;
LPTEXTMETRIC tm;
short nType;
LPTSTR lpData;
{
/*
* We save LOGFONT structure for vertical writing,
* if it is possible to write vertically.
*/
if( lf->lfEscapement == 2700 ||
(tm->tmPitchAndFamily & TMPF_TRUETYPE) == TMPF_TRUETYPE )
{
vertFont.lfHeight = theFont.lfHeight;
vertFont.lfWidth = theFont.lfWidth;
vertFont.lfEscapement = 2700;
vertFont.lfOrientation = 2700;
vertFont.lfWeight = theFont.lfWeight;
vertFont.lfItalic = theFont.lfItalic;
vertFont.lfUnderline = theFont.lfUnderline;
vertFont.lfStrikeOut = theFont.lfStrikeOut;
vertFont.lfCharSet = lf->lfCharSet;
vertFont.lfOutPrecision = lf->lfOutPrecision;
vertFont.lfClipPrecision = lf->lfClipPrecision;
vertFont.lfQuality = lf->lfQuality;
vertFont.lfPitchAndFamily = lf->lfPitchAndFamily;
lstrcpy( vertFont.lfFaceName, lf->lfFaceName );
return( FALSE );
}
return( TRUE );
}
void CheckVerticalWriting( hDC, lpFaceName )
HDC hDC;
LPTSTR lpFaceName;
{
FARPROC lpfnCheckEscapement;
HMENU hMenu, hTextMenu;
TCHAR cFaceName[LF_FACESIZE+1] = TEXT("@");
lstrcat( cFaceName, lpFaceName );
lpfnCheckEscapement = MakeProcInstance( (FARPROC)CheckEscapement, hInst );
if( !EnumFonts( hDC, cFaceName, lpfnCheckEscapement, 0 ) )
bWritable = TRUE;
else
bWritable = FALSE;
FreeProcInstance( lpfnCheckEscapement );
horiFont = theFont; // Save LOGFONT structure for horizontal writing.
hMenu = GetMenu( pbrushWnd[PARENTid] );
hTextMenu = GetSubMenu( hMenu, 3 );
if( bWritable ){ /* Is it possible to write vertically ? */
EnableMenuItem( hTextMenu, STYLEvertical, MF_BYCOMMAND | MF_ENABLED );
}
else{
CheckMenuItem(hMenu, STYLEvertical, MF_UNCHECKED);
EnableMenuItem( hTextMenu, STYLEvertical, MF_BYCOMMAND | MF_GRAYED );
if( bVertical ){
bVertical = FALSE;
theFont = horiFont;
if( theTool == TEXTtool )
DrawCursor = szPbCursor(TEXTtool);
}
}
}
/*
* This function deletes facename(s) with @-prefix
* from FONT combobox(cmb1) of the CHOOSEFONT dialog. 20 May. 1992
*/
//int FAR PASCAL _export DeleteFacename( hDlg, uMsg, wParam, lParam )
int FAR PASCAL DeleteFacename( hDlg, uMsg, wParam, lParam )
HWND hDlg;
UINT uMsg;
WPARAM wParam;
LPARAM lParam;
{
TCHAR str[50], sel[50];
int ix;
int cnt;
if( uMsg != WM_INITDIALOG )
return FALSE;
cnt = (int)SendDlgItemMessage( hDlg, cmb1, CB_GETCOUNT, 0, 0L );
ix = (int)SendDlgItemMessage( hDlg, cmb1, CB_GETCURSEL, 0, 0L );
SendDlgItemMessage( hDlg, cmb1, CB_GETLBTEXT, ix, (DWORD)sel );
for( ix = 0 ; ix < cnt ; ){
SendDlgItemMessage( hDlg, cmb1, CB_GETLBTEXT, ix, (DWORD)str );
if( str[0] == TEXT('@') )
cnt = (int)SendDlgItemMessage( hDlg,cmb1,CB_DELETESTRING,ix,NULL );
else
ix++;
}
ix = (int)SendDlgItemMessage( hDlg, cmb1, CB_FINDSTRING, -1, (DWORD)sel );
SendDlgItemMessage( hDlg, cmb1, CB_SETCURSEL, ix, 0L );
return TRUE;
}
#endif