การใช้แผ่นคุณสมบัติของแบบพิมพ์

[นี่คือเอกสารเบื้องต้นและเรื่องการเปลี่ยนแปลง]

หัวข้อนี้อธิบายตัวอย่างโค้ดที่แสดงแผ่นคุณสมบัติพิมพ์เพื่อให้ผู้ใช้สามารถเลือกตัวเลือกสำหรับการพิมพ์เอกสาร ตัวอย่างรหัสแรกจัดสรร และเริ่มต้นโครงสร้างแบบPRINTDLGEXแล้วเรียกใช้ฟังก์ชันPrintDlgExเพื่อแสดงแผ่นคุณสมบัติ.

โค้ดตัวอย่างการตั้งค่าสถานะ PD_RETURNDC ในสถานะสมาชิกของโครงสร้างPRINTDLG นี้ทำให้ฟังก์ชันPrintDlgExจะส่งกลับหมายเลขอ้างอิงบริบทที่ทำให้อุปกรณ์สำหรับเครื่องพิมพ์ที่เลือกในสมาชิกhDC คุณสามารถใช้หมายเลขอ้างอิงในฟังก์ชันเช่น DrawTextที่แสดงผลลัพธ์ที่ส่งไปยังเครื่องพิมพ์.

ในการป้อนข้อมูล ตัวอย่างรหัสกำหนดสมาชิกhDevModeและhDevNamesเป็น NULL ถ้าฟังก์ชันจะส่งกลับ S_OK สมาชิกเหล่านี้กลับจับไป DEVMODEและDEVNAMESโครงสร้างที่ประกอบด้วยผู้ใช้ของการป้อนข้อมูลและข้อมูลเกี่ยวกับเครื่องพิมพ์ คุณสามารถใช้ข้อมูลนี้เพื่อจัดเตรียมผลลัพธ์ถูกส่งไปยังเครื่องพิมพ์ที่เลือก.

หลังจากที่การดำเนินการพิมพ์เสร็จเรียบร้อย ตัวอย่างรหัสทำให้บัฟเฟอร์ข้อมูล DEVMODEและDEVNAMESและสาย DeleteDCฟังก์ชันการลบบริบทอุปกรณ์.

Hresult ใน DisplayPrintPropertySheet (
    HWND hWnd / / เป็นหน้าต่างที่เจ้าแผ่นคุณสมบัติ
)
{
Hresult ใน hresult ใน
LPPRINTDLGEX pPDX = NULL
LPPRINTPAGERANGE pPageRanges = NULL

/ / จัดสรรโครงสร้าง PRINTDLGEX

pPDX = GlobalAlloc (LPPRINTDLGEX) (GPTR, sizeof(PRINTDLGEX))
ถ้า (! pPDX)
    กลับ E_OUTOFMEMORY

/ / จัดสรรอาร์เรย์ของโครงสร้างของ PRINTPAGERANGE

pPageRanges = GlobalAlloc (LPPRINTPAGERANGE) (GPTR, 10 * sizeof(PRINTPAGERANGE))
ถ้า (! pPageRanges)
    กลับ E_OUTOFMEMORY

/ / เตรียมใช้งานโครงสร้าง PRINTDLGEX

pPDX-gt; lStructSize = sizeof(PRINTDLGEX)
pPDX - > hwndOwner = hWnd
pPDX - > hDevMode = NULL
pPDX - > hDevNames = NULL
pPDX - > hDC = NULL
pPDX - > Flags = PD_RETURNDC | PD_COLLATE
pPDX - > Flags2 = 0
pPDX - > ExclusionFlags = 0
pPDX - > nPageRanges = 0
pPDX - > nMaxPageRanges = 10
pPDX - > lpPageRanges = pPageRanges
pPDX - > nMinPage = 1
pPDX - > nMaxPage = 1000
pPDX - > nCopies = 1
pPDX - > hInstance = 0
pPDX - > lpPrintTemplateName = NULL
pPDX - > lpCallback = NULL
pPDX - > nPropertyPages = 0
pPDX - > lphPropertyPages = NULL
pPDX - > nStartPage = START_PAGE_GENERAL
pPDX - > dwResultAction = 0

/ / เรียกใช้แผ่นคุณสมบัติเครื่องพิมพ์

hresult ใน = PrintDlgEx(pPDX)

ถ้า ((hresult ใน== S_OK) & &
           pPDX - > dwResultAction == PD_RESULT_PRINT) {

/ / ผู้ใช้คลิกปุ่มพิมพ์ ดังนั้น
    / / ใช้ DC และข้อมูลอื่น ๆ ในการส่งคืน / / PRINTDLGEX โครงสร้างในการพิมพ์เอกสาร

}

ถ้า (pPDX - > hDC ! = NULL) DeleteDC (pPDX - > hDC);
ถ้า (pPDX - > hDevMode ! = NULL) GlobalFree (pPDX - > hDevMode); 
ถ้า (pPDX - > hDevNames ! = NULL) GlobalFree (pPDX - > hDevNames); 

กลับ hresult ใน
} 

Index