Dela via


Dialogrutan Utskriftsformat

Visar en modal dialogruta som gör att användaren kan ange följande attribut för den utskrivna sidan:

  • Papperstypen (kuvert, juridik, brev och så vidare)
  • Papperskällan (manuell matning, traktormatning, arkmatare och så vidare)
  • Sidorienteringen (stående eller liggande)
  • Sidmarginalernas bredd

Du skapar och visar en dialogruta för utskriftsformat genom att initiera en PAGESETUPDLG- struktur och skicka strukturen till funktionen PageSetupDlg. De attribut som visas i dialogrutan varierar dock beroende på skrivarens funktioner. Följande bild visar en typisk dialogruta för utskriftsformat.

dialogrutan utskriftsformat

Om användaren klickar på knappen OK returnerar PageSetupDlgTRUE- efter att ha angett olika medlemmar i PAGESETUPDLG struktur för att ange användarens val. ptPaperSize och rtMargin medlemmar innehåller de värden som anges av användaren. hDevMode och hDevNames medlemmar innehåller globala minnesreferenser för DEVMODE- och DEVNAMES- strukturer. Dessa strukturer innehåller ytterligare sidinformation samt information om skrivaren. Du kan använda den här informationen för att förbereda utdata som ska skickas till den valda skrivaren.

Om användaren avbryter dialogrutan utskriftskonfiguration eller om ett fel inträffar returnerar PageSetupDlgFALSE. För att fastställa orsaken till felet anropar du funktionen CommDlgExtendedError för att hämta det utökade felvärdet.

I det här avsnittet beskrivs följande avsnitt.

Initiera dialogrutan Utskriftsformat

Som standard visar dialogrutan utskriftsformat information om den aktuella standardskrivaren. Om du vill att dialogrutan ska visa information om en specifik skrivare anger du medlemmarna i en DEVMODE- eller DEVNAMES struktur och tilldelar de globala minneshandtagen för dessa strukturer till motsvarande medlem i PAGESETUPDLG-. Om du anger namnet på en skrivare som för närvarande inte är installerad visas ett felmeddelande i dialogrutan. Om du vill förhindra att dialogrutan visar felmeddelanden använder du värdet PSD_NOWARNING. Om du vill hämta information om standardskrivaren utan att visa dialogrutan utskriftskonfiguration använder du värdet PSD_RETURNDEFAULT.

Om standardmätningssystemet är tum använder dialogrutan tusendelar av tum som standardmåttenhet. Om standardmätningssystemet är mått använder dialogrutan hundradelar millimeter som standardmåttenhet. Om du vill åsidosätta standardmåttenheten anger du flaggan PSD_INHUNDREDTHSOFMILLIMETERS eller PSD_INTHOUSANDTHSOFINCHES i Flags medlem i PAGESETUPDLG- struktur.

De initiala värdena för marginalerna är som standard en tum. Om du anger flaggan PSD_MARGINS visas de inledande marginalvärdena som anges i rtMargin medlem i dialogrutan. Standardminimumvärdena som användaren kan ange för marginalerna är de minsta marginaler som tillåts av skrivaren. Om du anger flaggan PSD_MINMARGINS framtvingar dialogrutan de minsta marginaler som anges i rtMinMargin medlem.

Om du vill förhindra att användare väljer vissa alternativ anger du valfri kombination av följande flaggor för att inaktivera motsvarande kontroller.

Flagga Betydelse
PSD_DISABLEMARGINS Inaktiverar redigeringskontrollerna där användaren anger marginalinställningarna.
PSD_DISABLEORIENTATION Inaktiverar alternativknapparna Stående och Liggande.
PSD_DISABLEPAPER Inaktiverar kontrollerna för att välja pappersstorlek och papperskälla.
PSD_DISABLEPRINTER Inaktiverar knappen skrivare.

 

Anpassa dialogrutan Utskriftsformat

Du kan ange en anpassad mall för dialogrutan utskriftsformat, till exempel om du vill inkludera ytterligare kontroller som är unika för ditt program. Funktionen PageSetupDlg använder din anpassade mall i stället för standardmallen.

Ange en anpassad mall för dialogrutan Utskriftsformat

  1. Skapa den anpassade mallen genom att ändra standardmallen som anges i filen Prnsetup.dlg. De kontrollidentifierare som används i standardmallen utskriftsformat dialogmall definieras i filen Dlgs.h.
  2. Använd PAGESETUPDLG- struktur för att aktivera mallen på följande sätt:
      • Om din anpassade mall är en resurs i ett program eller ett bibliotek med dynamisk länk anger du flaggan PSD_ENABLEPAGESETUPTEMPLATE i Flags medlem. Använd hInstance och lpPageSetupTemplateName medlemmar i strukturen för att identifiera modulen och resursnamnet.

        -Eller-

      • Om den anpassade mallen redan finns i minnet anger du flaggan PSD_ENABLEPAGESETUPTEMPLATEHANDLE. Använd hPageSetupTemplate medlem för att identifiera det minnesobjekt som innehåller mallen.

Om du vill filtrera meddelanden som skickas till dialogrutan kan du ange en PageSetupHook hook-procedur. Om du använder en anpassad mall för att definiera ytterligare kontroller måste du ange en PageSetupHook hook-procedur för att bearbeta indata för dina kontroller. Dessutom kan du ange en PagePaintHook hook-procedur för att anpassa innehållet på exempelsidan som visas i dialogrutan Utskriftsformat. Mer information om PagePaintHook hook-proceduren finns i Anpassa exempelsidan.

Aktivera en PageSetupHook-hook-procedur

  1. Ange flaggan PSD_ENABLEPAGESETUPHOOK i Flags medlem i PAGESETUPDLG- struktur.
  2. Ange adressen för hookproceduren i lpfnPageSetupHook medlem.

När du har bearbetat dess WM_INITDIALOG meddelande skickar dialogrutan ett WM_INITDIALOG meddelande till PageSetupHook hook-procedur. Parametern lParam i det här meddelandet är en pekare till PAGESETUPDLG struktur som används för att initiera dialogrutan.

Anpassa exempelsidan

Dialogrutan utskriftsformat innehåller en bild av en exempelsida som visar hur användarens val påverkar utseendet på de utskrivna utdata. Bilden består av en rektangel som representerar den markerade pappers- eller kuverttypen, med en streckad rektangel som representerar de aktuella marginalerna och partiella tecken (grekisk text) för att visa hur texten ser ut på den utskrivna sidan.

När du anropar funktionen PageSetupDlg kan du ange en PagePaintHook hook-procedur för att anpassa exempelsidans utseende.

Aktivera en PagePaintHook-krokprocedur

  1. Ange flaggan PSD_ENABLEPAGEPAINTHOOK i Flags medlem i PAGESETUPDLG- struktur.
  2. Ange adressen för hookproceduren i lpfnPagePaintHook medlem.

När dialogrutan är på väg att rita innehållet på exempelsidan tar krokproceduren emot följande meddelanden i den ordning de visas.

Meddelande Betydelse
WM_PSD_PAGESETUPDLG Dialogrutan är på väg att rita exempelsidan. Hook-proceduren kan använda det här meddelandet för att förbereda för att rita innehållet på exempelsidan.
WM_PSD_FULLPAGERECT Dialogrutan är på väg att rita exempelsidan. Det här meddelandet anger avgränsningsrektangeln för exempelsidan.
WM_PSD_MINMARGINRECT Dialogrutan är på väg att rita exempelsidan. Det här meddelandet anger marginalrektangeln.
WM_PSD_MARGINRECT Dialogrutan är på väg att rita marginalrektangeln.
WM_PSD_GREEKTEXTRECT Dialogrutan är på väg att rita den grekiska texten inuti marginalrektangeln.
WM_PSD_ENVSTAMPRECT Dialogrutan är på väg att rita i kuvertstämpelns rektangel på en kuvertexempelsida. Det här meddelandet skickas endast för kuvert.
WM_PSD_YAFULLPAGERECT Dialogrutan är på väg att rita returadressdelen på en kuvertexempelsida. Det här meddelandet skickas för kuvert och andra pappersstorlekar.

 

Om krokproceduren returnerar TRUE- för något av de tre första meddelandena i en ritningssekvens (WM_PSD_PAGESETUPDLG, WM_PSD_FULLPAGERECTeller WM_PSD_MINMARGINRECT) skickar dialogrutan inga fler meddelanden och ritar inte in exempelsidan förrän nästa gång systemet behöver rita om exempelsidan. Om krokproceduren returnerar FALSE- för alla tre meddelanden skickar dialogrutan de återstående meddelandena i ritningssekvensen.

Om krokproceduren returnerar TRUE- för något av de återstående meddelandena i en ritningssekvens ritar dialogrutan inte motsvarande del av exempelsidan. Om krokproceduren returnerar FALSE- för något av dessa meddelanden ritar dialogrutan den delen av exempelsidan.

Om du vill förhindra att dialogrutan ritar innehållet på exempelsidan kan du ange flaggan PSD_DISABLEPAGEPAINTING. Den här flaggan påverkar inte din PagePaintHook- hook-procedur, som fortfarande tar emot alla WM_PSD_* meddelanden och kan rita innehållet på exempelsidan.