Podstrony
- Strona startowa
- Paul Williams Mahayana Buddhism The Doctrinal Foundations, 2008
- Wharton William Dom na Sekwanie (SCAN dal 976)
- (eBook) James, William The Principles of Psychology Vol. II
- Williams Tad Smoczy tron (SCAN dal 952)
- Dav
- Morris Desmond Zachowania intymne (SCAN dal 10
- Anne McCaffrey Jezdzcy Smokow Renegaci z Pern
- Clarke Arthur C 2001 Odyseja Kosmiczna
- Dick Philip K Klany Ksiezyca Alfy
- Brown Dan Cyfrowa Twierdza
- zanotowane.pl
- doc.pisz.pl
- pdf.pisz.pl
- epicusfuror.xlx.pl
[ Pobierz całość w formacie PDF ]
.DziÄ™ki informacjom przedstawionym w tym rozdziale bÄ™dziesz w stanie zmodyfikować sposób drukowania tak, aby dokÅ‚adnie odpowiadaÅ‚ Twoim wymaganiom.Praktyczny przewodnik DrukowanieZarzÄ…dzanie oknem dialogowym DrukujSkalowanie wydrukuDrukowanie innych elementówDrukowanie nagłówków i stopekModyfikowanie paska narzÄ™dzi okna podglÄ…du wydrukuModyfikowanie dziaÅ‚ania podglÄ…du wydrukuW przypadku wielu aplikacji jedynÄ… rzeczÄ…, jakÄ… bÄ™dziesz musiaÅ‚ zrobić, aby opcje drukoÂwania zaczęły dziaÅ‚ać poprawnie, bÄ™dzie użycie innego trybu mapowania niż MM_TEXT.Kreator App Wizard doÅ‚Ä…cza do tworzonych aplikacji prostÄ… obsÅ‚ugÄ™ drukowania i wybór jakiegoÅ› “normalnego" trybu mapowania powinien spowodować, że wydruki sporzÄ…dzane przez program bÄ™dÄ… automatycznie i poprawnie skalowane.ZarzÄ…dzanie oknem dialogowym DrukujPierwszÄ… metodÄ… wywoÅ‚ywanÄ… po rozpoczÄ™ciu procesu drukowania jest metoda OnPreparePrinting zdefiniowana w klasie widoku.Jej dziaÅ‚anie ogranicza siÄ™ do wywoÅ‚ania kolejnej metody - DoPreparePrinting.Do metody OnPreparePrinting przekazywany jest obiekt klasy CPrintlnfo, dziÄ™ki któremu bÄ™dziesz w stanie przejąć kontrolÄ™ nad inÂformacjami wyÅ›wietlanymi w oknie dialogowym Drukuj (czyli, jednoczeÅ›nie, także nad samym procesem drukowania).Dwiema najbardziej interesujÄ…cymi skÅ‚adowymi dostÄ™pnymi w klasie CPrintlnfo sÄ…: m_pPD (w której przechowywany jest wskaźnik do okna dialogowego CPrintDialog wyÅ›wietlanego przez MFC) oraz SetMaxPages, która to metoda pozwala Ci na okreÅ›lenie iloÅ›ci stron wydruku.JeÅ›li w ogóle nie bÄ™dziesz chciaÅ‚ wyÅ›wietlać okna dialogowego Drukuj, to przed wyÂwoÅ‚aniem metody DoPreparePrinting przypisz skÅ‚adowej m_bDirect (klasy CPrintlnfo)wartość TRUE.W takim wypadku wykonane zostanie zadanie drukowania, podczas którego, bez żadnych interwencji ze strony użytkownika, wydrukowane zostanÄ… wszystkie strony.Podczas drukowania wykorzystana zostanie domyÅ›lna drukarka.Skalowanie wydrukuJeÅ›li w programie wykorzystujesz tryb mapowania MM_TEXT lub któryÅ› inny jednorodny (isotropic) tryb, to sporzÄ…dzony wydruk bÄ™dzie siÄ™ zazwyczaj różniÅ‚ od wyglÄ…du ekranu.Po zastanowieniu przyznasz, że nie jest to pozbawione sensu.Rozdzielczość monitora wynosi bowiem okoÅ‚o 72 punktów na cal.Dlatego też, jeÅ›li narysujesz liniÄ™ skÅ‚adajÄ…cÄ… siÄ™ z 75 punktów, to bÄ™dzie ona miaÅ‚a dÅ‚ugość okoÅ‚o jednego cala (okoÅ‚o - gdyż rozÂdzielczoÅ›ci ekranów nie sÄ… dokÅ‚adne).Jednakże na drukarce o rozdzielczoÅ›ci 300 punktów na cal (dpi), ta sama linia bÄ™dzie miaÅ‚a dÅ‚ugość dokÅ‚adnie 1/4 cala; na drukarce o rozdzielczoÅ›ci 600 dpi - ta sama linia bÄ™dzie już miaÅ‚a tylko 1/8 cala dÅ‚ugoÅ›ci.Istnieje kilka sposobów przezwyciężenia tego problemu.Najprostszym z nich jest użycie trybu mapowania niezależnego od wykorzystywanego sprzÄ™tu.Zamiast tego można użyć takich trybów mapowania jak: MM_LOENGLISH lub MM_HIMETRIC (patrz TaÂbela 3.3).Chociaż nie zawsze jest to możliwe do wykonania, to jednak czasami bÄ™dziesz musiaÅ‚ przeskalować wydruk, używajÄ…c przy tym jednego z bardziej popularnych trybów mapowania, PomysÅ‚ tego rozwiÄ…zania polega na tym, żeby używajÄ…c trybu MM_ISOTROPIC tak ustawić parametry kontekstu drukarki, aby narysowanie na drukarce linii prostej skÅ‚adajÄ…cej siÄ™ z 75 punków spowodowaÅ‚o wydrukowanie linii o dÅ‚ugoÅ›ci nieco powyżej jednego caÂla.Sposób przeskalowania kontekstu drukarki, tak aby byÅ‚ on zgodny z parametrami ekranu, przedstawiony zostaÅ‚ na Listingu 3.1.(metoda OnPrint).OczywiÅ›cie, może siÄ™ zdarzyć, że bÄ™dziesz chciaÅ‚ postÄ…pić w nieco inny sposób.Na przykÅ‚ad mógÅ‚byÅ› chcieć, aby element na wydruku byÅ‚ dokÅ‚adnie dwa razy wiÄ™kszy od tego samego elementu na ekranie.Możesz to osiÄ…gnąć bez jakichkolwiek wiÄ™kszych problemów poprzez odpowiedni współczynników skalowania.Drukowanie innych elementówGeneralnie rzecz biorÄ…c, MFC zakÅ‚ada, że bÄ™dziesz chciaÅ‚ drukować te same elementy, które sÄ… widoczne na ekranie.Zazwyczaj jest to caÅ‚kiem sÅ‚uszne zaÅ‚ożenie; mogÄ… siÄ™ jednak zdarzyć takie przypadki, kiedy na wydruku bÄ™dziesz chciaÅ‚ umieÅ›cić zupeÅ‚nie co innego.Załóżmy, że częściÄ… Twojego widoku jest formularz sÅ‚użący do wprowadzania danych.Formularz ten prezentuje pojedynczy rekord z bazy danych.Podczas drukowaÂnia danych takiej aplikacji nie bÄ™dziesz chciaÅ‚ wydrukować tylko jednego - aktualnego rekordu; zapewne bÄ™dziesz chciaÅ‚ sporzÄ…dzić tabelaryczny wydruk wszystkich rekordów zapisanych w bazie.Taka modyfikacja sposobu drukowania jest wyjÄ…tkowo prosta.Wystarczy przesÅ‚onić standardowÄ… definicjÄ™ metody OnPrint.DomyÅ›lna definicja tej metody powoduje wyÂwoÅ‚anie metody OnDraw, jednakże możesz utworzyć swojÄ… wÅ‚asnÄ… wersjÄ™ tej metody, która umożliwi Ci wydrukowanie dowolnych informacji pod dowolnÄ… postaciÄ….RozwiÄ…zaÂnie to jest szczególnie istotne w przypadku tworzenia programów, w których widok jest klasÄ… potomnÄ… klasy CFormView.Wynika to z faktu, iż widoki takie nie majÄ… możliwoÅ›ci wydrukowania swojej zawartoÅ›ci.Drukowanie nagłówków i stopekKolejnym powodem, dla którego mógÅ‚byÅ› chcieć przesÅ‚onić standardowÄ… definicjÄ™ metody OnPrint, jest konieczność lub chęć umieszczenia na wydruku dodatkowych elementów.DoskonaÅ‚ym przykÅ‚adem takiego wykorzystania metody OnPrint jest drukowanie naÂgłówków i stopek, które nie sÄ… widoczne na ekranie.PrzykÅ‚ad takiego zastosowania metody OnPrint możesz znaleźć na Listingu 3.1.Bardzo istotnÄ… rzeczÄ…, o której nie można zapomnieć podczas drukowania nagłówków i stopek, jest konieczność okreÅ›lenia odpowiedniej wielkoÅ›ci regionu przycinania (w celu ochronienia stopki) oraz współrzÄ™dnych poczÄ…tku ukÅ‚adu współrzÄ™dnych (w celu ochronienia nagłówÂka).JeÅ›li uważasz, że powyższe rozwiÄ…zanie wymaga zbyt wiele pracy, to zawsze bÄ™dziesz mógÅ‚ umieÅ›cić kod tworzÄ…cy nagłówki i stopki wydruku wewnÄ…trz metody OnDraw.Modyfikowanie paska narzÄ™dzi okna podglÄ…du wydrukuJeÅ›li bÄ™dziesz chciaÅ‚ zmodyfikować postać standardowego paska narzÄ™dzi wyÅ›wietlanego w oknie podglÄ…du wydruku, to bÄ™dziesz musiaÅ‚ przesÅ‚onić standardowÄ… definicjÄ™ metoÂdy OnFilePrintPreview.Poniżej przedstawione zostaÅ‚y czynnoÅ›ci, który bÄ™dziesz muÂsiaÅ‚ wykonać:1.UmieÅ›cić makro ON_COMMAND zawierajÄ…ce metodÄ™ OnFilePrintPreviewwewnÄ…trz części mapy komunikatów zarzÄ…dzanej przez kreatora Class Wizard.2.Z wywoÅ‚ania metody OnFilePrintPreview usunąć modyfikator zawierajÄ…cy nazwÄ™ klasy bazowej (CView).3.Dodać wÅ‚asnÄ… definicjÄ™ metody OnFilePrintPreview (do pliku nagłówkowego - H i źródÅ‚owego - CPP).4.WewnÄ…trz metody OnFilePrintPreview stworzyć na stercie (za pomocÄ… operatora New) nowy obiekt klasy CPrintPreviewState.5.WywoÅ‚ać metodÄ™ DoPrintPreview, przekazujÄ…c jako argumenty jej wywoÅ‚ania nastÄ™pujÄ…ce dane: identyfikator zasobu okreÅ›lajÄ…cego postać paska narzÄ™dzi, wskaźnik RUNTIME_CLASS(CPrintView) oraz obiekt, który stworzyÅ‚eÅ› w poprzednim kroku.6.JeÅ›li metoda DoPrintPreview zwróci wartość FALSE, to powinieneÅ› wyÅ›wietlić komunikat o bÅ‚Ä™dzie i usunąć obiekt stworzony w kroku 4.7.Upewnić siÄ™, że do pliku źródÅ‚owego Twojego nowego widoku doÅ‚Ä…czyÅ‚eÅ› plik nagłówkowy AFXPRIV.H.8.Stworzyć zasób okreÅ›lajÄ…cy postać paska narzÄ™dzi i nadać mu ten sam identyÂfikator, którego użyÅ‚eÅ› w kroku 5.(okreÅ›lanie postaci paska narzÄ™dzi możesz rozpocząć od skopiowania oryginalnego paska, który możesz znaleźć w pliku AFXPRINT
[ Pobierz całość w formacie PDF ]