Uwaga ta opisuje proces dostosowywania drukowania i Podgląd wydruku i opis celów procedur wywołania zwrotnego, używane w CView i wywołania zwrotnego procedur i członek funkcji CPreviewView.
Problem
MFC stanowi kompleksowe rozwiązanie dla większości drukowania i potrzeby podglądu wydruku. W większości przypadków mało dodatkowy kod jest musi mieć możliwość drukowania i podglądu widoku. Jednakże istnieją sposoby optymalizacji drukowania, który wymaga znacznego wysiłku częścią autora i niektóre aplikacje konieczność dodania elementów interfejsu użytkownika w trybie Podgląd wydruku.
Zwiększenia wydajności drukowania
Gdy aplikacja MFC drukuje, korzystając ze standardowych metod, Windows kieruje wszystkie wywołania danych wyjściowych graficzny interfejs urządzenia (GDI) na metapliki w pamięci. Wywołanie EndPage Windows odgrywa metapliku raz dla każdego fizycznego pasma, że drukarka wymaga, aby wydrukować jedną stronę. Podczas tej renderowania interfejsu GDI często kwerend przerwać procedura w celu określenia, jeśli należy kontynuować. Zwykle procedury przerwania pozwala wiadomości mają zostać przetworzone, dzięki czemu użytkownik może przerwać zadania drukowania za pomocą okna dialogowego drukowania.
Niestety ten spowalnia proces drukowania. Jeśli drukowanie w aplikacji muszą być szybciej niż może być osiągnięta za pomocą standardowych techniki, musi implementować ręcznego podziału na przedziały.
Drukowanie, podziału na przedziały
Aby ręcznie zespołu, musi re zaimplementowaniem wydruku pętli takie, że OnPrint jest wywołana wiele razy na stronie (raz na zespołu). Drukowanie pętli jest zaimplementowana w funkcji OnFilePrint w viewprnt.cpp. W sieci CView-klasy, przeciążenie tej funkcji, tak aby wpisie mapy wiadomości, do obsługi drukowania polecenia wywołania funkcji drukowania. Skopiuj rutynowych OnFilePrint i zmienić wydruku pętli w celu wprowadzenia w życie podziału na przedziały. Prawdopodobnie będziesz również ma przekazywać podziału na przedziały prostokąta do funkcji drukowania, tak, aby zoptymalizować rysunek na podstawie sekcji strony drukowane.
Po drugie należy często wywołać QueryAbort podczas rysowania zespołu. W przeciwnym razie przerwania procedury nie będzie wywoływany i użytkownik będzie mógł anulować zadanie drukowania.
Podgląd wydruku: Elektroniczne papieru z interfejsem użytkownika
W istocie, wydruku podgląd, próbuje włączyć wyświetlanie do emulacji drukarki. Domyślnie obszaru klienckiego głównego okna jest używany do wyświetlania jednej lub dwóch stron pełni w oknie. Użytkownik ma możliwość powiększyć obszar strony w celu wyświetlenia go bardziej szczegółowo. Obsługa dodatkowych użytkownika nawet można zezwolić na edytowanie dokumentu w trybie podglądu.
Dostosowywanie podglądu wydruku
Uwaga ta zajmuje się tylko jeden z aspektów modyfikowanie podglądu wydruku: Dodawanie interfejsu użytkownika do trybu podglądu. Możliwe są inne zmiany, ale zmiany te są poza zakresem niniejszej dyskusji.
Mówiąc w skrócie jest proces dodawania interfejsu użytkownika do trybu podglądu:
OnFilePrintPreview
To polecenie programu obsługi podglądu wydruku. Jego Domyślna implementacja jest:
void CView::OnFilePrintPreview()
{
nbsp; / / W klas pochodnych, stosują specjalne okno obsługi tutaj
/ / Pamiętaj, aby oknie ramki odpięcie Zamknij, jeśli TS7302.
/ / nie musi tworzyć to na ramki. Musi outlive tej funkcji
CPrintPreviewState * pState = new CPrintPreviewState;
if (!.DoPrintPreview (AFX_IDD_PREVIEW_TOOLBAR, to,
RU&NTIME_CLASS(CPreviewView), pState))
{
/ / W klas pochodnych, odwrotnej specjalne okno obsługi
/ / tutaj w przypadku awarii podglądu
TRACE0 ("Błąd: DoPrintPreview nie powiodło się");
AfxMessageBox(AFX_IDP_COMMAND_FAILURE);
Usuń pState; / / Podgląd nie udało się zainicjować, / / delete Państwo teraz
}
}
DoPrintPreview spowoduje ukrycie okienka głównym aplikacji. Kontrola paski, takie jak pasek stanu, mogą zostać zachowane określając je w pState BT;członek dwStates (jest to maska bitowa i bits dla poszczególnych kontroli paski są definiowane przez AFX_CONTROLBAR_MASK(AFX_IDW_MYBAR)). PState okno - >nIDMainPane to okno, w którym zostanie automatycznie ukryta i reshown. DoPrintPreview będzie następnie utworzyć pasek przycisku dla standardowego Interfejsu podglądu. Jeśli potrzebna jest obsługa specjalne okno, jest taki, aby ukryć lub pokazać innych okien, które powinno zostać wykonane przed DoPrintPreview nazywany.
Domyślnie po zakończeniu podglądu wydruku, zwraca paski kontroli ich oryginalne Państwom i głównym okienku, aby widoczne. W razie potrzeby specjalnego traktowania powinno zostać dokonane w przesłonięcie z EndPrintPreview. Jeśli DoPrintPreview nie powiedzie się, również dostarczyć specjalnych.
DoPrintPreview jest wywoływana z:
Uwaga Jeśli osobny widok lub widoku klasy potrzebna jest obsługa drukowania, wskaźnik ten obiekt powinien zostać przekazany jako drugi parametr.
EndPrintPreview
Jest to tak zwane aby zakończyć tryb pod&glądu wydruku. Często jest pożądane, aby przejść do strony w dokumencie, który był ostatnio wyświetlane w podglądzie wydruku. EndPrintPreview jest aplikacji szansę na to zrobić. PInfo BT;m_nCurPage jest że strony, który został ostatnio wyświetlane (skrajna, jeśli dwie strony były wyświetlane), a kursor znajduje się wskazówka co do których strony użytkownik był zainteresowany. Ponieważ struktura widoku aplikacji jest nieznana w ramach, należy podać kod, aby przejść do wybranego punktu.
Większość czynności należy wykonać przed wywołaniem metody CView::EndPrintPreview. To wywołanie cofnie efekty DoPrintPreview i usuwa pView, pDC i pInfo.
/ / Wszelkie dalsze oczyszczanie powinno odbywać się na tutaj.
CView::EndPrintPreview (podstawowy kontroler domeny, pInfo, punkt pView.)
CWinApp::OnFilePrintSetup
Musi to być mapowany dla elementu menu Ustawienia wydruku. W większości przypadków nie jest konieczne zastąpić wykonania.
Strona Nomenklatury
Kolejną kwestią jest numeracja stron i zamówienia. Dla aplikacji typu prostego edytora tekstu to prosty problem. Większość systemów Podgląd wydruku zakładać, że każdej drukowanej stronie odpowiada do jednej strony w dokumencie.
Podczas próby uogólnione rozwiązanie, istnieje kilka rzeczy, które należy wziąć pod uwagę. Wyobraź sobie CAD system. Użytkownik ma rysunku, który obejmuje kilka arkuszy E-rozmiar. E-rozmiaru (lub mniejszej, skalowane) plotera, numerowanie stron byłby w prostym przypadku. Jednak na drukarce laserowej, drukowanie 16 A-rozmiar stron na arkusz, co to Podgląd wydruku rozważyć "strony"?
W akapicie wprowadzającym Państwa, Podgląd wydruku działa podobnie jak drukarki. W związku z tym użytkownik zobaczy, co będzie pochodzić z określoną drukarką, która jest zaznaczona. To w celu ustalenia, jakie obraz jest drukowany na każdej stronie.
Ciąg opisu strony w strukturze CPrintInfo zapewnia sposób wyświetlania numeru strony do użytkownika, jeśli może być reprezentowana jako numer jeden na stronę (jak w „Strona 1"lub" Pages 1-2 "). Ciąg ten jest używany przez Domyślna implementacja CPreviewView::OnDisplayPageNumber. W razie potrzeby wyświetlania różnych jeden może zastąpić tę funkcję wirtualnych do dostarczenia, na przykład "Arkusz1, sekcjach A, B".
Uwagi techniczne przez liczbę |nbsp; Uwagi techniczne według kategorii