mirror of https://github.com/tongzx/nt5src
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.
170 lines
4.5 KiB
170 lines
4.5 KiB
/****************************************************************************/
|
|
/* */
|
|
/* 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;
|
|
}
|