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.
1631 lines
47 KiB
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
|
|
|
|
|