2020-09-30 17:12:29 +02:00

569 lines
20 KiB
C

/****************************************************************************
*
* OIUICOM.C -- OPEN/image 4.0 common dialog box program
*
* Copyright 1995 Wang Laboraratories, Inc. All rights reserved.
*
* Author: Jennifer Wu
*
* Creation Date: April 5, 1995
*
*****************************************************************************/
#include "oiui.h"
#include "oiprt.h"
#include "oihelp.h"
#include "ui.h"
char HelpFileName[] = "wangocx.hlp";
DWORD aIDs[] ={IDC_OPTIONS,HELPID_OIPRINT_OPTION,
IDC_PRINTANO,HELPID_OIPRINT_ANNO,
IDC_PRINTFORMAT,HELPID_OIPRINT_FORMAT,
ID_LineWidthLbl,HELPID_OI_LINEWIDTHLBL,
ID_LineWidthBox,HELPID_OI_LINEWIDTHBOX,
IDC_UPDOWNSPIN,HELPID_OI_UPDOWNSPIN,
ID_UPDOWN,HELPID_OI_UPDOWNSPIN,
ID_ColorLbl,HELPID_OI_COLORLBL,
IDC_USER1,HELPID_OI_USER1,
IDC_COLOR_TRANS,HELPID_OI_COLOR_TRANS,
ID_PaletteCmd,HELPID_OI_PALETTECMD,
ID_DelCmd,HELPID_OI_DELCMD,
ID_EditCmd,HELPID_OI_EDITCMD,
ID_FontCmd,HELPID_OI_FONTCMD,
ID_BrowseCmd,HELPID_OI_BROWSECMD,
ID_DateImg,HELPID_OI_DATECMD,
ID_TimeImg,HELPID_OI_TIMECMD,
ID_RefNameLbl, HELPID_OI_REFNAMELBL,
ID_RefNameListLbl, HELPID_OI_REFNAMELISTLBL,
ID_RefNameList, HELPID_OI_REFNAMELIST,
ID_RefNameTxt, HELPID_OI_REFNAMELBL,
ID_Create_Text_Stamp, HELPID_OI_CREATE_TEXT_STAMP,
ID_Create_Image_Stamp,HELPID_OI_CREATE_IMAGE_STAMP,
ID_StmpCntntsTxt,HELPID_OI_STAMP_CNTNTS_TEXT,
ID_StmpCntntsLbl, HELPID_OI_STAMP_CNTNTS_LBL,
0,0
};
// Don't need for the first release
BOOL WINAPI OiUIFileSaveAsDlgProc (HWND hDlg, UINT iMessage,
WPARAM wParam, LPARAM lParam)
{
return FALSE;
}
BOOL WINAPI OiUIFileOpenDlgProc (HWND hDlg, UINT iMessage,
WPARAM wParam, LPARAM lParam)
{
return FALSE;
}
/*************************************************************************
*
* FUNCTION: PrintOptionsDlgProc(HWND, UINT, WPARAM, LPARAM)
*
* PURPOSE: Processes messages for Print Option dialog box
*
* COMMENTS: Set init value for the PrintAnno and PrintFormate
* according to the input structure lpFilePrintParm.
* In oiprt.h define PO_PIX2PIX = 0, PO_IN2IN = 1,
* PO_FULLPAGE = 2.
*
* RETURN VALUES:
* TRUE - Continue.
* FALSE - Return to the dialog box.
*
**************************************************************************/
#define BUFFERSIZE 50
BOOL WINAPI PrintOptionsDlgProc(
HWND hDlg, /* window handle of the dialog box */
UINT message, /* type of message */
WPARAM wParam, /* message-specific information */
LPARAM lParam)
{
int index,iReturn;
static char szBuff[BUFFERSIZE],szBuff1[BUFFERSIZE];
static char szBuff2[BUFFERSIZE],szBuff3[BUFFERSIZE];
static LPOI_FILEPRINTPARM lpFilePrintParm;
switch (message)
{
case WM_INITDIALOG: /* message: initialize dialog box */
lpFilePrintParm = (LPOI_FILEPRINTPARM)lParam;
LoadString(hInst, PRINT_PIXEL2PIXEL, szBuff1, sizeof(szBuff));
index = (int)SendDlgItemMessage(hDlg, IDC_PRINTFORMAT, CB_ADDSTRING,
0,(LONG)(LPSTR)szBuff1);
LoadString(hInst, PRINT_INCH2INCH, szBuff2, sizeof(szBuff));
index = (int)SendDlgItemMessage(hDlg, IDC_PRINTFORMAT, CB_ADDSTRING,
0,(LONG)(LPSTR)szBuff2);
LoadString(hInst, PRINT_FITTOPAGE, szBuff3, sizeof(szBuff));
index = (int)SendDlgItemMessage(hDlg, IDC_PRINTFORMAT, CB_ADDSTRING,
0,(LONG)(LPSTR)szBuff3);
// Init setting for Print format, because the list box is sorted
if (lpFilePrintParm->dPrintFormat == PO_PIX2PIX)
lstrcpy(szBuff, szBuff1);
else if (lpFilePrintParm->dPrintFormat == PO_IN2IN)
lstrcpy(szBuff, szBuff2);
else lstrcpy(szBuff, szBuff3);
index = SendDlgItemMessage(hDlg, IDC_PRINTFORMAT, CB_SELECTSTRING,
(WPARAM)0,(LPARAM)(LPSTR)&szBuff);
if (index != CB_ERR)
SendDlgItemMessage(hDlg, IDC_PRINTFORMAT, CB_SETCURSEL,
(WPARAM)index,0L);
// Init setting for Print ano
if(lpFilePrintParm->bPrintAnno)
CheckDlgButton(hDlg,IDC_PRINTANO,1);
return (TRUE);
case WM_HELP:
if (((LPHELPINFO)lParam)->iContextType == HELPINFO_WINDOW)
{
WinHelp(((LPHELPINFO)lParam)->hItemHandle,HelpFileName,HELP_WM_HELP,
(DWORD)(LPVOID)aIDs);
}
break;
case WM_CONTEXTMENU:
WinHelp((HWND)wParam,HelpFileName,HELP_CONTEXTMENU,
(DWORD)(LPVOID)aIDs);
break;
case WM_COMMAND: /* message: received a command */
if (LOWORD(wParam) == IDOK) /* "OK" box selected? */
{
index = (int)SendDlgItemMessage(hDlg, IDC_PRINTFORMAT,
CB_GETCURSEL, 0, 0L);
if (index != CB_ERR)
{
iReturn = SendDlgItemMessage(hDlg, IDC_PRINTFORMAT,
CB_GETLBTEXT, index, (LPARAM)&szBuff);
if (iReturn != CB_ERR)
{
if (lstrcmp(szBuff, szBuff1) == 0)
lpFilePrintParm->dPrintFormat = PO_PIX2PIX;
else if (lstrcmp(szBuff, szBuff2) == 0)
lpFilePrintParm->dPrintFormat = PO_IN2IN;
else
lpFilePrintParm->dPrintFormat = PO_FULLPAGE;
}
// Set print anno info
if ((iReturn = IsDlgButtonChecked(hDlg,IDC_PRINTANO)) == 0) // not check
lpFilePrintParm->bPrintAnno = 0;
else if (iReturn == CB_ERR)
lpFilePrintParm->bPrintAnno = 0;
else
lpFilePrintParm->bPrintAnno = 1;
}
if (iReturn == CB_ERR)
EndDialog(hDlg, FALSE);
else
EndDialog(hDlg, TRUE); /* Exits the dialog box */
return (FALSE);
}
if(LOWORD(wParam) == IDCANCEL)
{ /* System menu close command? */
EndDialog(hDlg, FALSE); /* Exits the dialog box */
return (TRUE);
}
break;
}
return (FALSE); /* Didn't process a message */
// avoid compiler warnings at W3
lParam;
}
/****************************************************************************
*
* FUNCTION: OiUIFilePrintDlgProc(HWND, UINT, UINT, LONG)
*
* PURPOSE: Processes messages for PrintDlg common dialog box
*
* COMMENTS:
*
* This hook procedure simply allows the user to set the option of
* the printer, the page number, copy number, print anno and print
* format.
* RETURN VALUES:
* TRUE - Continue.
* FALSE - Return to the dialog box.
*
****************************************************************************/
BOOL CALLBACK OiUIFilePrintDlgProc (
HWND hDlg, /* window handle of the dialog box */
UINT message, /* type of message */
WPARAM wParam, /* message-specific information */
LPARAM lParam)
{
FARPROC lpProcOptions;
HWND hIcon3, a1,a2;
static LPOI_FILEPRINTPARM lpFilePrintParm;
static PRINTDLG * lppd;
static BOOL bOKFlag;
BOOL bTrans;
switch (message)
{
case WM_INITDIALOG:
hIcon3 = GetDlgItem(hDlg,ico3);
SetWindowPos(hIcon3,(HWND)0,0,0,100,40,SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOZORDER);
lppd = (PRINTDLG *)lParam;
lpFilePrintParm = (LPOI_FILEPRINTPARM)lppd->lCustData;
SetDlgItemInt(hDlg, 1154,lpFilePrintParm->nCopies, FALSE);
bOKFlag = 0;
//ShowWindow(GetDlgItem(hDlg,chx2),SW_HIDE); // hide the collate control
return(TRUE);
case WM_DESTROY:
if (bOKFlag ==1)
{
a1 = GetFocus();
a2 = GetDlgItem(hDlg,ID_OK);
// WinNT 4.0 beta #1234 has a bug where it will change lppd->nCopies to 1 somewhere
// between here and when it returns from the function PrintDlg(). To work around it,
// the number of copies is put in lpFilePrintParm->nCopies here and then copied into
// lppd->nCopies after returning from PrintDlg().
lpFilePrintParm->nCopies = GetDlgItemInt(hDlg, 1154, &bTrans, 1);
// Win95 has a bug, so set the page flag here
if (IsDlgButtonChecked(hDlg,1056) == 1) // all page checked
lppd->Flags |= (PD_NOPAGENUMS | PD_NOSELECTION) ;
if (IsDlgButtonChecked(hDlg,1058) == 1) // pages checked
{
lppd->Flags |= (PD_PAGENUMS | PD_NOSELECTION);
lppd->Flags &= ~PD_SELECTION;
}
if (IsDlgButtonChecked(hDlg,1057) == 1) // selection checked
{
lppd->Flags |= (PD_SELECTION | PD_NOPAGENUMS);
lppd->Flags &= ~PD_PAGENUMS;
}
}
break;
case WM_COMMAND:
if (LOWORD(wParam) == IDC_OPTIONS)
{
lpProcOptions = MakeProcInstance((FARPROC)PrintOptionsDlgProc, hInst);
DialogBoxParam(hInst, /* current instance */
"IDD_PRINTOPTS",
hDlg, /* parent handle */
(DLGPROC)lpProcOptions,
(LPARAM)lpFilePrintParm); /* File print parm block */
FreeProcInstance(lpProcOptions);
break;
}
if (LOWORD(wParam) == ID_OK)
bOKFlag = 1;
break;
case WM_HELP:
if ((((LPHELPINFO)lParam)->iContextType == HELPINFO_WINDOW) &&
(((LPHELPINFO)lParam)->iCtrlId == IDC_OPTIONS))
{
WinHelp(((LPHELPINFO)lParam)->hItemHandle,HelpFileName,HELP_WM_HELP,
(DWORD)(LPVOID)aIDs);
}
break;
case WM_CONTEXTMENU:
if (GetDlgCtrlID((HWND)wParam) == IDC_OPTIONS)
WinHelp((HWND)wParam,HelpFileName,HELP_CONTEXTMENU,
(DWORD)(LPVOID)aIDs);
break;
default:
break;
}
return (FALSE);
// avoid compiler warnings at W3
lParam;
}
/*****************************************************************************
* ROUTINE: OiUIFileGetNameCommDlg
*
* DESCRIPTION: This function creates various system-defined dialog boxes for
* end-users to select file name(s) or setup print parameters
*
* INPUTS:
* lpParm : Input, pointer to a
* OIFILEPARM structure for file or
* OIFILESAVEASPARM structure for file save as or
* OIFILEPRINTPARM structure for file print.
* dwMode : Input, specifies the controls of the dialog box.
* Returns: Return zero if successful; an error value if unsuccessful.
*
* DATE: 9 April 1995
*
* AUTHOR: Jennifer Wu
*
*****************************************************************************/
UINT WINAPI OiUIFileGetNameCommDlg (void * lpParm,DWORD dwMode)
{
int iReturn, wRetCode;
char szFilterSpec [256],szBuff[256];//Std filters
UINT count=0,count1=0;
char chReplace; // Replacement char for nulls in filter string
LPOI_FILEOPENPARM lpFileOpenParm;
LPOI_FILESAVEASPARM lpFileSaveasParm;
OPENFILENAME * lpofn;
LPOI_FILEPRINTPARM lpFilePrintParm;
PRINTDLG * lppd;
if ((dwMode != OI_UIFILEOPENGETNAME) && (dwMode != OI_UIFILESAVEASGETNAME)
&& (dwMode != OI_UIFILEPRINT))
return (FUNCTIONINVPARM); // invalid input
if (lpParm == NULL)
return (FUNCTIONINVPARM);
if (dwMode == OI_UIFILEPRINT)
{
lpFilePrintParm = (LPOI_FILEPRINTPARM)lpParm;
if ((lpFilePrintParm->lStructSize == 0) ||
(lpFilePrintParm->lStructSize != sizeof(OI_FILEPRINTPARM)))
return (FUNCTIONINVPARM);
// Check for invalid parameter
if ((lpFilePrintParm->bPrintAnno > 1) ||
(lpFilePrintParm->bPrintAnno < 0))
return (FUNCTIONINVPARM);
if ((lpFilePrintParm->dPrintFormat > PO_FULLPAGE) ||
(lpFilePrintParm->dPrintFormat < PO_PIX2PIX))
return (FUNCTIONINVPARM);
lpFilePrintParm->nCopies = lpFilePrintParm->pd.nCopies;
lppd = (PRINTDLG *)&lpFilePrintParm->pd;
if ((lppd->lStructSize == 0)
|| (lppd->lStructSize != sizeof(PRINTDLG)))
return (FUNCTIONINVPARM);
// Check for the setup flag which we don't want
if (lppd->Flags & PD_PRINTSETUP)
lppd->Flags &= ~PD_PRINTSETUP;
lppd->Flags |= PD_ENABLEPRINTHOOK | PD_ENABLEPRINTTEMPLATE
|PD_USEDEVMODECOPIESANDCOLLATE;
lppd->hInstance = hInst;
lppd->lpfnPrintHook = (LPPRINTHOOKPROC)MakeProcInstance(OiUIFilePrintDlgProc, NULL);
lppd->lpPrintTemplateName = (LPSTR)MAKEINTRESOURCE(PRINT95DLG);
lppd->lCustData = (LPARAM)lpParm;
if ((iReturn = PrintDlg(lppd)) == 0)
iReturn = CommDlgExtendedError();
// Work around for WinNT 4.0 beta #1234 bug where lppd->nCopies is always set to 1.
lppd->nCopies = lpFilePrintParm->nCopies;
switch (iReturn)
{
case 1:
wRetCode = SUCCESS;
break;
case -1:
wRetCode = CANTINVOKEDIALOGBOX;
break;
case 0:
wRetCode = CANCELPRESSED;
break;
case PDERR_RETDEFFAILURE:
case PDERR_NODEFAULTPRN:
case PDERR_DEFAULTDIFFERENT:
wRetCode = OIPRT_NODEFAULTPRINTER;
break;
case PDERR_LOADDRVFAILURE:
case PDERR_NODEVICES:
wRetCode = OIPRT_PRTDRVRFAILURE;
break;
case PDERR_SETUPFAILURE:
wRetCode = FUNCTIONINVPARM;
break;
default:
wRetCode = iReturn;
break;
}
return (wRetCode);
}
if (dwMode == OI_UIFILEOPENGETNAME)
{
lpFileOpenParm = (LPOI_FILEOPENPARM)lpParm;
if ((lpFileOpenParm->lStructSize == 0) ||
(lpFileOpenParm->lStructSize != sizeof(OI_FILEOPENPARM)))
return (FUNCTIONINVPARM);
if (lpFileOpenParm->dwOIFlags != 0)
return (FUNCTIONINVPARM);
// Open option for future release
if (lpFileOpenParm->lpFileOpenOptionParm != 0)
return (FUNCTIONINVPARM);
lpofn = (OPENFILENAME *)&lpFileOpenParm->ofn;
// Overwrite couple flags if user set it
lpofn->Flags |= OFN_FILEMUSTEXIST;
lpofn->Flags |= OFN_PATHMUSTEXIST;
lpofn->Flags |= OFN_SHAREAWARE;
if (lpofn->Flags & OFN_ALLOWMULTISELECT)
lpofn->Flags &= ~OFN_ALLOWMULTISELECT;
if (lpofn->Flags & OFN_CREATEPROMPT)
lpofn->Flags &= ~OFN_CREATEPROMPT;
}
if (dwMode == OI_UIFILESAVEASGETNAME)
{
lpFileSaveasParm = (LPOI_FILESAVEASPARM)lpParm;
if ((lpFileSaveasParm->lStructSize == 0) ||
(lpFileSaveasParm->lStructSize != sizeof(OI_FILESAVEASPARM)))
return (FUNCTIONINVPARM);
if (lpFileSaveasParm->dwOIFlags != 0)
return (FUNCTIONINVPARM);
lpofn = (OPENFILENAME *)&lpFileSaveasParm->ofn;
lpofn->Flags |= OFN_NOTESTFILECREATE;
//lpofn->Flags |= OFN_OVERWRITEPROMPT;
lpofn->Flags |= OFN_HIDEREADONLY;
if (lpofn->Flags & OFN_ALLOWMULTISELECT)
lpofn->Flags &= ~OFN_ALLOWMULTISELECT;
if (lpofn->Flags & OFN_READONLY)
lpofn->Flags &= ~OFN_READONLY;
}
//Validate the the input parameter
if ((lpofn->lStructSize == 0)||
(lpofn->lStructSize != sizeof(OPENFILENAME)))
return (FUNCTIONINVPARM);
// Help button up and without owner, nobody will display the help text
if (((lpofn->Flags & OFN_SHOWHELP) != 0) && (lpofn->hwndOwner == 0))
return (FUNCTIONINVPARM); // invalid input
if ((lpofn->lpstrFile == NULL) || (lpofn->nMaxFile == 0))
return (FUNCTIONINVPARM);
// fill up default if user didn't supply
if ((lpofn->lpstrFilter == NULL) ||
(lpofn->lpstrFilter[0] == '\0'))
{
// For a complete description of the following filter string gyrations
// See the MS Windows 3.1 Programmer's Reference Volume 1, page 144 (TIM)
if (dwMode == OI_UIFILEOPENGETNAME)
{// the filter is too long for th RC file
count = LoadString(hInst, IMAGEFILE_FILTERS, szFilterSpec,
sizeof(szFilterSpec));
count1 = LoadString(hInst, IMAGEFILE_FILTERS1, szBuff,
sizeof(szBuff));
count += count1;
lstrcat(szFilterSpec, szBuff);
if (lpofn->nFilterIndex == 0)
lpofn->nFilterIndex = 1;
}
else if (dwMode == OI_UIFILESAVEASGETNAME)
{
count = LoadString(hInst, SAVEFILE_FILTERS, szFilterSpec,
sizeof(szFilterSpec));
if (lpofn->nFilterIndex == 0)
lpofn->nFilterIndex = 1;
}
if (count != 0)
{
chReplace = szFilterSpec[count-1];// retrieve wildcard
for (count = 0; szFilterSpec[count] != '\0'; count++)
{
if (szFilterSpec[count] == chReplace)
szFilterSpec[count] = '\0';
}
}
lpofn->lpstrFilter =szFilterSpec;
}
if (dwMode == OI_UIFILEOPENGETNAME)
iReturn = GetOpenFileName(lpofn);
if (dwMode == OI_UIFILESAVEASGETNAME)
iReturn = GetSaveFileName(lpofn);
if (iReturn == 0)
{
iReturn = (int)CommDlgExtendedError();
if (iReturn == CDERR_STRUCTSIZE)
iReturn = FUNCTIONINVPARM;
}
switch (iReturn)
{
case 1:
wRetCode = SUCCESS;
break;
case -1:
wRetCode = CANTINVOKEDIALOGBOX;
break;
case 0:
wRetCode = CANCELPRESSED;
break;
case CDERR_INITIALIZATION:
case CDERR_MEMALLOCFAILURE:
case CDERR_MEMLOCKFAILURE:
wRetCode = NOMEMORY;
break;
default:
wRetCode = iReturn;
break;
}
return(wRetCode);
}
//void MatchCtrltoHelpId(DWORD dwControlId, LPDWORD lpHelpId)
//{
// switch(dwControlId) //*** check the range
// {
// case IDC_OPTIONS : *lpHelpId = HELPID_OIPRINT_OPTION;
// break;
// case ID_LineWidthLbl: *lpHelpId = HELPID_OI_LINEWIDTHLBL;
// break;
// case ID_LineWidthBox: *lpHelpId = HELPID_OI_LINEWIDTHBOX;
// break;
// case IDC_UPDOWNSPIN : *lpHelpId = HELPID_OI_UPDOWNSPIN;
// break;
// case ID_ColorLbl: *lpHelpId = HELPID_OI_COLORLBL;
// break;
// case IDC_USER1: *lpHelpId = HELPID_OI_USER1;
// break;
// case IDC_COLOR_TRANS: *lpHelpId = HELPID_OI_COLOR_TRANS;
// break;
// case ID_PaletteCmd: *lpHelpId = HELPID_OI_PALETTECMD;
// break;
// case ID_DelCmd: *lpHelpId = HELPID_OI_DELCMD;
// break;
// case ID_FontCmd: *lpHelpId = HELPID_OI_FONTCMD;
// break;
// case ID_BrowseCmd: *lpHelpId = HELPID_OI_BROWSECMD;
// break;
// case ID_DateImg: *lpHelpId = HELPID_OI_DATECMD;
// break;
// case ID_TimeImg: *lpHelpId = HELPID_OI_TIMECMD;
// break;
// case ID_RefNameLbl: *lpHelpId = HELPID_OI_REFNAMELBL;
// break;
// case ID_RefNameList: *lpHelpId = HELPID_OI_REFNAMELIST;
// break;
// case ID_Create_Text_Stamp: *lpHelpId = HELPID_OI_CREATE_TEXT_STAMP;
// break;
// case ID_Create_Image_Stamp : *lpHelpId = HELPID_OI_CREATE_IMAGE_STAMP;
// break;
// case ID_StmpCntntsTxt : *lpHelpId = HELPID_OI_STAMP_CNTNTS_TEXT;
// break;
// case ID_StmpCntntsLbl : *lpHelpId = HELPID_OI_STAMP_CNTNTS_LBL;
// break;
// default: *lpHelpId = 0;
// break;
// }
// return;
//}