windows-nt/Source/XPSP1/NT/sdktools/winobj/wfprint.c
2020-09-26 16:20:57 +08:00

171 lines
4.5 KiB
C

/****************************************************************************/
/* */
/* WFPRINT.C - */
/* */
/* Windows Print Routines */
/* */
/****************************************************************************/
#include "winfile.h"
#include "winexp.h"
/*--------------------------------------------------------------------------*/
/* */
/* PrintFile() - */
/* */
/*--------------------------------------------------------------------------*/
WORD
PrintFile(
HWND hwnd,
LPSTR szFile
)
{
WORD ret;
INT iCurCount;
INT i;
HCURSOR hCursor;
ret = 0;
hCursor = SetCursor(LoadCursor(NULL, IDC_WAIT));
iCurCount = ShowCursor(TRUE) - 1;
/* open the object +++ ShellExecute() returns an hInstance?!?!?
*/
ret = (WORD)RealShellExecute(hwnd, "print", szFile, "", NULL, NULL, NULL, NULL, SW_SHOWNORMAL, NULL);
DosResetDTAAddress(); // undo any bad things COMMDLG did
switch (ret) {
case 0:
case 8:
ret = IDS_NOMEMORYMSG;
break;
case 2:
ret = IDS_FILENOTFOUNDMSG;
break;
case 3:
case 5: // access denied
ret = IDS_BADPATHMSG;
break;
case 4:
ret = IDS_MANYOPENFILESMSG;
break;
case 10:
ret = IDS_NEWWINDOWSMSG;
break;
case 12:
ret = IDS_OS2APPMSG;
break;
case 15:
/* KERNEL has already put up a messagebox for this one. */
ret = 0;
break;
case 16:
ret = IDS_MULTIPLEDSMSG;
break;
case 18:
ret = IDS_PMODEONLYMSG;
break;
case 19:
ret = IDS_COMPRESSEDEXE;
break;
case 20:
ret = IDS_INVALIDDLL;
break;
case SE_ERR_SHARE:
ret = IDS_SHAREERROR;
break;
case SE_ERR_ASSOCINCOMPLETE:
ret = IDS_ASSOCINCOMPLETE;
break;
case SE_ERR_DDETIMEOUT:
case SE_ERR_DDEFAIL:
case SE_ERR_DDEBUSY:
ret = IDS_DDEFAIL;
break;
case SE_ERR_NOASSOC:
ret = IDS_NOASSOCMSG;
break;
default:
if (ret < 32)
goto EPExit;
ret = 0;
}
EPExit:
i = ShowCursor(FALSE);
/* Make sure that the cursor count is still balanced. */
if (i != iCurCount)
ShowCursor(TRUE);
SetCursor(hCursor);
return (ret);
}
/*--------------------------------------------------------------------------*/
/* */
/* WFPrint() - */
/* */
/*--------------------------------------------------------------------------*/
WORD
APIENTRY
WFPrint(
LPSTR pSel
)
{
CHAR szFile[MAXPATHLEN];
CHAR szTemp[20];
WORD ret;
/* Turn off the print button. */
if (hdlgProgress)
EnableWindow(GetDlgItem(hdlgProgress, IDOK), FALSE);
bUserAbort = FALSE;
if (!(pSel = GetNextFile(pSel, szFile, sizeof(szFile))))
return TRUE;
/* See if there is more than one file to print. Abort if so
*/
if (pSel = GetNextFile(pSel, szTemp, sizeof(szTemp))) {
MyMessageBox(hwndFrame, IDS_WINFILE, IDS_PRINTONLYONE, MB_OK | MB_ICONEXCLAMATION);
return (FALSE);
}
if (hdlgProgress) {
/* Display the name of the file being printed. */
LoadString(hAppInstance, IDS_PRINTINGMSG, szTitle, 32);
wsprintf(szMessage, szTitle, (LPSTR)szFile);
SetDlgItemText(hdlgProgress, IDD_STATUS, szMessage);
}
ret = PrintFile(hdlgProgress ? hdlgProgress : hwndFrame, szFile);
if (ret) {
MyMessageBox(hwndFrame, IDS_EXECERRTITLE, ret, MB_OK | MB_ICONEXCLAMATION);
return FALSE;
}
return TRUE;
}