[นี่คือเอกสารเบื้องต้นและเรื่องการเปลี่ยนแปลง]
หัวข้อนี้อธิบายตัวอย่างโค้ดที่แสดงแผ่นคุณสมบัติพิมพ์เพื่อให้ผู้ใช้สามารถเลือกตัวเลือกสำหรับการพิมพ์เอกสาร ตัวอย่างรหัสแรกจัดสรร และเริ่มต้นโครงสร้างแบบ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 ใน
}