Subclassing หน้าต่าง

ซับคลาสที่อินสแตนซ์ของหน้าต่าง เรียกใช้ฟังก์ชันSetWindowLongและระบุหมายเลขอ้างอิงไปยังหน้าต่างการซับคลาส GWL_WNDPROC ค่าสถานะและตัวชี้ไปยังขั้นตอนระดับชั้นย่อย SetWindowLongกลับตัวชี้ไปยังกระบวนงานหน้าต่างเดิม ใช้ตัวชี้การส่งข้อความไปยังกระบวนงานต้นฉบับ ขั้นตอนในหน้าต่างระดับชั้นย่อยต้องใช้ฟังก์ชันCallWindowProcในการเรียกกระบวนงานหน้าต่างเดิม.

ตัวอย่างต่อไปนี้แสดงวิธีการซับคลาส ควบคุมอินสแตนซ์ของการแก้ไขในกล่องโต้ตอบ ขั้นตอนในหน้าต่างระดับชั้นย่อยทำให้ตัวควบคุมการแก้ไขได้รับทั้งหมดแป้นป้อน รวมทั้งปุ่ม enter และแท็บ เมื่อใดก็ ตามตัวควบคุมได้รับโฟกัสสำหรับการป้อนค่า.

WNDPROC wpOrigEditProc 
 
(EditBoxProc LRESULT APIENTRY
    HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) {HWND hwndEdit 
 
    switch(uMsg) {กรณี WM_INITDIALOG: / / เรียกใช้ตัวจัดการตัวควบคุมการแก้ไข 
            hwndEdit = GetDlgItem (hwndDlg, ID_EDIT); 
 
            / / ระดับชั้นย่อยควบคุมการแก้ไข 
            wpOrigEditProc = SetWindowLong (WNDPROC) (hwndEdit, GWL_WNDPROC, EditSubclassProc (ยาว)); 
            / / / / กระบวนการเตรียมใช้งานการดำเนินการต่อไป 
            / / กลับ TRUE 
 
        กรณี WM_DESTROY: / / ระดับชั้นย่อยการออกตัวควบคุมการแก้ไข 
            SetWindowLong (hwndEdit, GWL_WNDPROC, (ยาว) wpOrigEditProc); 
            / / / / กระบวนการล้างข้อมูลการดำเนินการต่อไป 
            / / แบ่ง 
    } ส่งกลับ FALSE 
        UNREFERENCED_PARAMETER(lParam) 
} / / ระดับชั้นย่อยกระบวนงาน LRESULT APIENTRY EditSubclassProc (
    HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {ถ้า (uMsg == WM_GETDLGCODE) กลับ DLGC_WANTALLKEYS 
 
    กลับ CallWindowProc (wpOrigEditProc, hwnd, uMsg, wParam, lParam); 
} 

 

Index