หัวข้อนี้อธิบายตัวอย่างรหัสที่แสดงกล่องโต้ตอบตั้งค่าหน้ากระดาษเพื่อให้ผู้ใช้สามารถเลือกใช้แอตทริบิวต์ของหน้าที่พิมพ์ เช่นกระดาษชนิด แหล่งกระดาษ แนวหน้า และระยะขอบของหน้า ตัวอย่างรหัสแรก เริ่มต้นโครงสร้างแบบPAGESETUPDLGและเรียกใช้ฟังก์ชันPageSetupDlgเพื่อแสดงกล่องโต้ตอบแล้ว.
ตัวอย่างนี้ตั้งค่าสถานะ PSD_MARGINS ในสถานะสมาชิก และสมาชิกrtMarginใช้เพื่อระบุค่าเริ่มต้นระยะขอบ มันตั้งค่าสถานะ PSD_INTHOUSANDTHSOFINCHES เพื่อให้แน่ใจว่า กล่องโต้ตอบแสดงขนาดของระยะขอบใน thousandths ของนิ้ว.
ในการป้อนข้อมูล ตัวอย่างรหัสกำหนดสมาชิกhDevModeและhDevNamesเป็น NULL ถ้าฟังก์ชันจะส่งกลับค่า TRUE ฟังก์ชันใช้สมาชิกเหล่านี้เพื่อส่งกลับหมายเลขอ้างอิง DEVMODEและDEVNAMESโครงสร้างที่ประกอบด้วยผู้ใช้ของการป้อนข้อมูลและข้อมูลเกี่ยวกับเครื่องพิมพ์ คุณสามารถใช้ข้อมูลนี้เพื่อจัดเตรียมผลลัพธ์ถูกส่งไปยังเครื่องพิมพ์ที่เลือก.
ตัวอย่างยังช่วยให้ขั้นตอนของ hook PagePaintHookเพื่อปรับแต่งรูปวาดของเนื้อหาของหน้าตัวอย่าง.
PAGESETUPDLG psd / / โครงสร้างกล่องโต้ตอบทั่วไป
HWND hwnd / / เจ้าของหน้าต่าง
/ / เตรียมใช้งาน PAGESETUPDLG
ZeroMemory (แอมป์ psd, sizeof(PAGESETUPDLG))
psd.lStructSize = sizeof(PAGESETUPDLG)
psd.hwndOwner = hwnd
psd.hDevMode = NULL / / อย่าลืมฟรี หรือเก็บ hDevMode
psd.hDevNames = NULL / / อย่าลืมฟรี หรือจัดเก็บ
hDevNames
psdค่าสถานะ = PSD_INTHOUSANDTHSOFINCHES | PSD_MARGINS |
PSD_ENABLEPAGEPAINTHOOK
psd.rtMargin.top = 1000
psd.rtMargin.left = 1250
psd.rtMargin.right = 1250
psd.rtMargin.bottom = 1000
psd.lpfnPagePaintHook = PaintHook
ถ้า (PageSetupDlg(&psd) == TRUE) {
/ / ตรวจสอบกระดาษขนาดและระยะขอบค่าต่อไปนี้
}
ตัวอย่างต่อไปนี้แสดงขั้นตอนของ hook PagePaintHookเป็นตัวอย่างที่วาดสี่เหลี่ยมขอบในพื้นที่หน้าตัวอย่าง:
ติดต่อกลับ BOOL PaintHook (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) {LPRECT lprc
COLORREF crMargRect
HDC hdc, hdcOld
สวิตช์ (uMsg) { / / รูปวาดสี่เหลี่ยมขอบ
กรณี WM_PSD_MARGINRECT: hdc = wParam (HDC)
lprc = lParam (LPRECT)
/ / รับระบบเน้นสี
crMargRect = GetSysColor(COLOR_HIGHLIGHT)
/ / สร้างปากกาแบบประ-จุดมีสีเน้นระบบ และ / / เลือกลงใน DC ของหน้าตัวอย่าง
hdcOld = SelectObject (hdc, CreatePen (PS_DASHDOT, .5, crMargRect));
/ / วาดสี่เหลี่ยมขอบ
สี่เหลี่ยมผืนผ้า (hdc, lprc-gt ซ้าย lprc - > ด้านบน lprc - > ขวา lprc - > ล่าง);
/ / Restore ปากกาก่อนหน้าเพื่อ DC
SelectObject (hdc, hdcOld);
ส่งกลับ TRUE
เริ่มต้น: ส่งกลับ FALSE
} กลับ TRUE
}