48920 (Семейства шрифтов в Windows), страница 5
Описание файла
Документ из архива "Семейства шрифтов в Windows", который расположен в категории "". Всё это находится в предмете "информатика" из , которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "книги и методические указания", в предмете "информатика, программирование" в общих файлах.
Онлайн просмотр документа "48920"
Текст 5 страницы из документа "48920"
BOOL PASCAL FAR _export AbortProc( HDC hdcPRN, short nCode ) {
MSG msg;
while ( !bAbort && PeekMessage( &msg,NULL,0,0,PM_REMOVE ) ) {
TranslateMessage( &msg );
DispatchMessage( &msg );}
return !bAbort;}
static BOOL DoPrint( void ) {
static char szName[]= "Test Printing";
FARPROC lpfnAbort;
BOOL answer= FALSE;
HDC hdcPRN;
hdcPRN= GetPrinterDC(); // получение hdcPRN см. выше
lpfnAbort= MakeProcInstance( (FARPROC)AbortProc, hInstance );
Escape( hdcPRN, SETABORTPROC, 0, (LPSTR)lpfnAbort, NULL );
if ( Escape( hdcPRN, STARTDOC, sizeof(szName)-1, szName, NULL ) > 0 ) {
while ( !bAbort && /* есть что печатать */ ) {
// рисуем на странице
if ( Escape( hdcPRN, NEWFRAME, 0,NULL,NULL ) <= 0 )bAbort= TRUE;}
if ( bAbort ) {
Escape( hdcPRN, ABORTDOC, 0,NULL,NULL );
} else {
Escape( hdcPRN, ENDDOC, 0,NULL,NULL );
answer= TRUE;}}
FreeProcInstance( (FARPROC)lpfnAbort );
DestroyDC( hdcPRN );
return answer;}
В этом примере надо обратить внимание на переменную bAbort. Она может быть установлена в значение TRUE для завершения печати. В данном примере досрочное завершение не предусмотрено, хотя его легко можно сделать, устанавливая эту переменную, например, в ответ на выбор пункта меню, на нажатие кнопки диалога или даже по таймеру.
Если мы будем использовать пополосную печать, то нам надо вместо операции NEWFRAME выполнять серию операций NEXTBAND до тех пор, пока полоса для печати не окажется пустой (что соответствует полностью напечатанной странице); при этом внутренний цикл для печати страниц придется несколько изменить:
...RECT rc;
...while ( !bAbort && /* есть что печатать */ ) {
while ( Escape(hdcPRN, NEXTBAND, 0, NULL, (LPSTR)&rc) > 0 ) {
if ( IsRectEmpty( &rc ) ) goto ok_page;
// заполняем полосу или всю страницу, иногда вызывая AbortProc:
lpfnAbortProc( hdcPRN, 0 );
// Внимание! используется указатель на функцию, а не она сама!}
bAbort= TRUE;
ok_page:;}...