home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Windoware
/
WINDOWARE_1_6.iso
/
winutil
/
adg_4_6
/
print.c
< prev
next >
Wrap
C/C++ Source or Header
|
1991-02-21
|
6KB
|
192 lines
/****************************************************************************
Module name: Print.C
Programmer : Jeffrey M. Richter.
*****************************************************************************/
#include "..\nowindws.h"
#undef NOCOLOR
#undef NOCTLMGR
#undef NOGDI
#undef NOKERNEL
#undef NOLSTRING
#undef NOMB
#undef NOMEMMGR
#undef NOMENUS
#undef NOMSG
#undef NOSHOWWINDOW
#undef NOUSER
#undef NOWINMESSAGES
#undef NOWINSTYLES
#include <windows.h>
#include <drivinit.h>
#include "print.h"
#include "printstp.h"
char _szAppName[] = "Print";
char _szText[] = "This is a text line!";
HANDLE _hInstance = NULL;
LONG FAR PASCAL WndProc (HWND hWnd, WORD wMsg, WORD wParam, LONG lParam);
BOOL FAR PASCAL AboutProc (HWND hDlg, WORD wMsg, WORD wParam, LONG lParam);
int PASCAL WinMain (HANDLE hInstance, HANDLE hPrevInstance,
LPSTR lpszCmdLine, int nCmdShow) {
HWND hWnd; MSG msg; WNDCLASS wc;
_hInstance = hInstance;
if (!hPrevInstance) {
wc.style = 0;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(hInstance, _szAppName);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = COLOR_WINDOW + 1;
wc.lpszMenuName = _szAppName;
wc.lpszClassName = _szAppName;
if (!RegisterClass(&wc)) return(0);
}
hWnd = CreateWindow(_szAppName, _szAppName,
WS_OVERLAPPED | WS_VISIBLE | WS_CAPTION |
WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_THICKFRAME,
CW_USEDEFAULT, nCmdShow, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, 0);
if (hWnd == NULL) return(0);
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return(0);
}
GLOBALHANDLE _hMemPS1 = NULL, _hMemPS2 = NULL;
LONG FAR PASCAL WndProc (HWND hWnd, WORD wMsg, WORD wParam, LONG lParam) {
BOOL fCallDefProc = FALSE;
LONG lResult = 0;
GLOBALHANDLE hMemNewPS;
HDC hDC;
LPPSSTRUCT lpPS;
FARPROC fpProc;
char szNullPort[MAXPORTLEN];
switch (wMsg) {
case WM_CREATE:
_hMemPS1 = SetupDefPrinter();
if (_hMemPS1 == NULL)
EnableMenuItem(GetMenu(hWnd), IDM_PRINT1, MF_GRAYED | MF_BYCOMMAND);
_hMemPS2 = SetupDefPrinter();
if (_hMemPS2 == NULL)
EnableMenuItem(GetMenu(hWnd), IDM_PRINT2, MF_GRAYED | MF_BYCOMMAND);
break;
case WM_DESTROY:
GlobalFree(_hMemPS1);
GlobalFree(_hMemPS2);
PostQuitMessage(0);
break;
case WM_COMMAND:
switch (wParam) {
case IDM_ABOUT:
fpProc = MakeProcInstance(AboutProc, _hInstance);
DialogBox(_hInstance, "About", hWnd, fpProc);
FreeProcInstance(fpProc);
break;
case IDM_PS1:
case IDM_PS2:
if (wParam == IDM_PS1) {
hMemNewPS = PrinterSetup(hWnd, _hMemPS1, PSMODE_ACTIVEONLY);
if (hMemNewPS == NULL) break;
GlobalFree(_hMemPS1);
_hMemPS1 = hMemNewPS;
} else {
hMemNewPS = PrinterSetup(hWnd, _hMemPS2, 0);
if (hMemNewPS == NULL) break;
GlobalFree(_hMemPS2);
_hMemPS2 = hMemNewPS;
}
lpPS = (LPPSSTRUCT) GlobalLock(hMemNewPS);
GetProfileString("windows", "NullPort", "",
szNullPort, sizeof(szNullPort));
// Gray menu item if print is on NullPort.
EnableMenuItem(GetMenu(hWnd),
(wParam == IDM_PS1) ? IDM_PRINT1 : IDM_PRINT2,
MF_BYCOMMAND | (lstrcmpi(szNullPort, lpPS->szPort) ?
MF_ENABLED : MF_GRAYED));
GlobalUnlock(hMemNewPS);
break;
case IDM_PRINT1:
case IDM_PRINT2:
hDC = CreatePrinterDC(
(wParam == IDM_PRINT1) ? _hMemPS1 : _hMemPS2);
if (hDC == NULL) {
MessageBox(hWnd, "Cannot print.", _szAppName,
MB_OK | MB_ICONEXCLAMATION);
break;
}
Escape(hDC, STARTDOC, lstrlen(_szAppName), _szAppName, 0);
TextOut(hDC, 10, 10, _szText, lstrlen(_szText));
Escape(hDC, NEWFRAME, 0, 0, 0);
Escape(hDC, ENDDOC, 0, 0, 0);
DeleteDC(hDC);
break;
}
break;
default:
fCallDefProc = TRUE;
break;
}
if (fCallDefProc)
lResult = DefWindowProc(hWnd, wMsg, wParam, lParam);
return(lResult);
}
// ***************************************************************************
// This function processes all messages sent to the About dialog box.
BOOL FAR PASCAL AboutProc (HWND hDlg, WORD wMsg, WORD wParam, LONG lParam) {
char szBuffer[100];
BOOL fProcessed = TRUE;
switch (wMsg) {
case WM_INITDIALOG:
// Set version static window to have date and time of compilation.
wsprintf(szBuffer, "%s at %s", (LPSTR) __DATE__, (LPSTR) __TIME__);
SetWindowText(GetDlgItem(hDlg, ID_VERSION), szBuffer);
break;
case WM_COMMAND:
switch (wParam) {
case IDOK: case IDCANCEL:
if (HIWORD(lParam) == BN_CLICKED)
EndDialog(hDlg, wParam);
break;
default:
break;
}
break;
default:
fProcessed = FALSE; break;
}
return(fProcessed);
}