Dialogrutan Skriv ut
I dialogrutan Skriv ut kan användaren välja alternativ för ett visst utskriftsjobb. Användaren kan till exempel ange vilken skrivare som ska användas, sidintervallet som ska skrivas ut och antalet kopior.
Du kan använda funktionen PrintDlgEx för att visa en utskriftsegenskapsark, som har en allmänt-sida som innehåller kontroller som liknar dialogrutan Print. Egenskapsbladet kan också ha ytterligare programspecifika och drivrutinsspecifika egenskapssidor på sidan Allmänt.
Du skapar och visar en dialogrutan Skriv ut genom att initiera en PRINTDLG- struktur och skicka strukturen till funktionen PrintDlg.
Följande illustration visar en typisk dialogruta för utskrift .
Om användaren klickar på knappen OK returnerar PrintDlgTRUE och använder PRINTDLG- struktur för att returnera information om användarens val. Till exempel returnerar hDevMode och hDevNames medlemmar vanligtvis globala minnesreferenser för DEVNAMES strukturer. Du kan använda informationen i dessa strukturer för att skapa en enhetskontext eller en informationskontext för den valda skrivaren.
Om användaren avbryter dialogrutan Skriv ut eller om ett fel inträffar returnerar PrintDlgFALSE. Du kan fastställa orsaken till ett fel med hjälp av funktionen CommDlgExtendedError för att hämta det utökade felvärdet.
Dialogrutan Skriv ut innehåller en utskriftsintervall grupp med alternativknappar som anger om användaren vill skriva ut alla sidor, ett intervall med sidor eller endast den markerade texten. Innan du anropar PrintDlgkan du ange någon av flaggorna PD_ALLPAGES, PD_SELECTIONeller PD_PAGENUMS för att ange vilken knapp som väljs. När PrintDlg returnerar TRUEanger funktionen en av dessa flaggor för att ange användarens val. Om PD_PAGENUMS är inställt, innehåller medlemmarna nFromPage och nToPage i PRINTDLG--strukturen de start- och slutsidor som användaren har angett. För att inaktivera alternativknappen Pages och de tillhörande redigeringskontrollerna Från och Till, ställ in flaggan PD_NOPAGENUMS. För att inaktivera radioknappen med etiketten urval, anger du flaggan PD_NOSELECTION.
Dialogrutan innehåller en redigeringskontroll där användaren kan skriva ut antalet kopior. Om hDevMode medlem i PRINTDLG- struktur inte ärNULL-anger dmCopies medlem i strukturen det ursprungliga värdet för den här redigeringskontrollen. Om hDevMode är NULL-anger nCopies medlem i PRINTDLG- struktur det ursprungliga värdet. När PrintDlg returnerar anger nCopies vanligtvis antalet kopior som användaren har angett. Men om du anger flaggan PD_USEDEVMODECOPIESANDCOLLATE när du skapar dialogrutan, och nCopies alltid är satt till 1 när den returneras, anger medlemsvariabeln dmCopies i DEVMODE antalet kopior som ska skrivas ut.
Kryssrutan Sortera anger om användaren vill sortera sidorna om flera kopior skrivs ut. Flaggan PD_COLLATE anges om kryssrutan Sortera är markerad. Om din applikation inte stöder flera kopior eller simulerad sammanställning, anger du flaggan PD_USEDEVMODECOPIESANDCOLLATE i Flags fältet i PRINTDLG strukturen. Detta inaktiverar kryssrutan Sortera och kontrollen Antal kopior om inte skrivardrivrutinen stöder flera kopior och sortering.
Kryssrutan Skriv ut till fil anger om användaren vill skicka utdata till en fil i stället för till en skrivare. Du kan ange flaggan PD_PRINTTOFILE så att kryssrutan först är markerad. Om du vill dölja kryssrutan anger du flaggan PD_HIDEPRINTTOFILE. Avaktivera den genom att ange flaggan PD_DISABLEPRINTTOFILE. Om användaren väljer alternativet Skriv ut till fil, anger PrintDlg flaggan PD_PRINTTOFILE och returnerar "FILE:" vid förskjutningen som anges av wOutputOffset medlemmen i DEVNAMES strukturen. När du anropar funktionen för att starta utskriftsåtgärden anger du strängen "FILE:" i lpszOutput medlem i strukturen. Om du anger den här strängen får undersystemet för utskrift att fråga användaren om namnet på utdatafilen.
Som standard visar dialogrutan Print initialt information om den aktuella standardskrivaren. Om du vill visa information för en annan installerad skrivare initierar du en DEVNAMES--struktur och tilldelar det globala minneshandtaget till hDevMode och hDevNames medlemmar. Enhetsnamnet som du anger i dmDeviceName medlem i DEVMODE- struktur och i wDriverOffset medlem i DEVNAMES- struktur måste identifiera en skrivarenhet som också visas i avsnittet [Enheter] i Win.ini-filen. Om enheten inte visas returnerar PrintDlg ett fel.
Du kan dirigera PrintDlg att skapa en enhetskontext eller informationskontext för skrivaren genom att ange flaggan PD_RETURNDC eller PD_RETURNIC i Flags medlemsvariabel i PRINTDLG-strukturen. Funktionen returnerar ett handtag till enhetskontexten eller informationskontexten i hDC- medlem. Om du använder flaggan PD_RETURNDC kan du använda enhetskontexten för att generera utdata för skrivaren.
Om du vill hämta information om standardskrivaren utan att visa dialogrutan Skriv ut anger du flaggan PD_RETURNDEFAULT. I det här fallet returnerar PrintDlg omedelbart efter att ha ställt in hDevMode och hDevNames medlemmar till handtag för strukturer som innehåller informationen.
Som standard visar PrintDlg meddelanderutor när fel inträffar. Funktionen visar till exempel ett felmeddelande om inga skrivare har installerats. Om du vill förhindra att funktionen visar dessa varningsmeddelanden anger du flaggan PD_NOWARNING.
Följande avsnitt beskrivs i det här avsnittet.
- Anpassa dialogrutan Utskrift
- Dialogrutan utskriftsinställningar
Anpassa dialogrutan Skriv ut
Du kan ange en anpassad mall för dialogrutan Skriv ut, till exempel om du vill inkludera ytterligare kontroller som är unika för ditt program. Funktionen PrintDlg använder din anpassade mall i stället för standardmallen.
Så här anger du en anpassad mall för dialogrutan Print:
- Skapa den anpassade mallen genom att ändra standardmallen som anges i filen Prnsetup.dlg. De kontrollidentifierare som används i standardmallen Skriv ut definieras i filen Dlgs.h.
- Använd PRINTDLG- struktur för att aktivera mallen på följande sätt:
Om din anpassade mall är en resurs i ett program eller ett dynamiskt länkbibliotek sätter du flaggan PD_ENABLEPRINTTEMPLATE i Flags fältet. Använd hInstance och lpPrintTemplateName medlemmar i strukturen för att identifiera modulen och resursnamnet.
-Eller-
Om den anpassade mallen redan finns i minnet anger du flaggan PD_ENABLEPRINTTEMPLATEHANDLE. Använd hPrintTemplate medlem för att identifiera det minnesobjekt som innehåller mallen.
Du kan ange en PrintHookProc hook-procedur för dialogrutan Print. Hook-proceduren kan bearbeta meddelanden som skickas till dialogrutan. Den kan också skicka meddelanden till dialogrutan. Om du använder en anpassad mall för att definiera ytterligare kontroller måste du ange en krokprocedur för att bearbeta indata för dina kontroller.
Så här aktiverar du en hook-procedur för dialogrutan Print:
- Ange flaggan PD_ENABLEPRINTHOOK i Flags medlem i PRINTDLG- struktur.
- Ange adressen för hookproceduren i lpfnPrintHook medlem.
När dialogruteproceduren har bearbetat sitt WM_INITDIALOG meddelande, skickar den ett WM_INITDIALOG meddelande till krokproceduren. Parametern lParam i det här meddelandet är en pekare till PRINTDLG- struktur som används för att initiera dialogrutan.
Dialogrutan Utskriftskonfiguration
Du kan skapa och visa en dialogrutan Utskriftskonfiguration genom att ange flaggan PD_PRINTSETUP i ett anrop till funktionen PrintDlg. Dialogrutan utskriftskonfiguration har dock ersatts av dialogrutan Utskriftsformat och bör inte användas i nya program.
Följande flaggor gäller endast för dialogrutan Utskriftskonfiguration:
- PD_ENABLESETUPHOOK
- PD_ENABLESETUPTEMPLATE
- PD_ENABLESETUPTEMPLATEHANDLE