การประมวลผลข้อความ WM_CONTEXTMENU

ข้อความWM_CONTEXTMENUจะถูกสร้างขึ้นเมื่อกระบวนงานหน้าต่างของโปรแกรมประยุกต์ส่งผ่านข้อความWM_RBUTTONUPหรือWM_NCRBUTTONUPไปยังฟังก์ชันDefWindowProc โปรแกรมประยุกต์ที่สามารถประมวลผลข้อความนี้จะแสดงเมนูทางลัดที่เหมาะสมกับเฉพาะบางส่วนของหน้าจอ ถ้าโปรแกรมประยุกต์ไม่ได้แสดงเมนูทางลัด มันควรส่งข้อความไปยังDefWindowProcสำหรับการเริ่มต้นจัดการ.

ต่อไปนี้คือ ตัวอย่างของ WM_CONTEXTMENU ข้อความประมวลมันอาจปรากฏขึ้นในขั้นตอนของหน้าต่างของโปรแกรมประยุกต์ ในใบ สั่งต่ำ และสูงลำดับints ของพารามิเตอร์lParamระบุพิกัดที่หน้าจอของเมาส์เมื่อปุ่มเมาส์ด้านขวาคือวันที่ออก (โปรดสังเกตว่า พิกัดเหล่านี้สามารถนำค่าลบในระบบกับจอภาพหลายจอ) การกำหนดโปรแกรมประยุกต์ OnContextMenu ฟังก์ชันกลับ TRUE ถ้ามันแสดงเมนูบริบท หรือค่า FALSE ถ้ายังไม่เปิด.

กรณี WM_CONTEXTMENU: if (OnContextMenu (hwnd, GET_X_LPARAM(lParam)
              GET_Y_LPARAM(lParam))) กลับ DefWindowProc (hwnd, uMsg, wParam, lParam); 
    แบ่ง 

 

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

BOOL WINAPI OnContextMenu(HWND hwnd, int x, int y) {RECT rc                    / / ไคลเอนต์พื้นที่ของหน้าต่างจุด pt = {x, y };        / / ตำแหน่งที่ตั้งของเมาส์คลิก / / รับ bounding สี่เหลี่ยมของพื้นที่ที่ไคลเอ็นต์ 
 
    GetClientRect (hwnd แอมป์ rc); 
 
    / / แปลงตำแหน่งเมาส์เป็นพิกัดของไคลเอ็นต์ 
 
    ScreenToClient (hwnd, & pt); 
 
    / / ถ้าตำแหน่งที่อยู่ในพื้นที่ไคลเอ็นต์ แสดงการ / / เมนูทางลัด 
 
    ถ้า (PtInRect (& rc, pt)) {ClientToScreen (hwnd, & pt); 
        DisplayContextMenu (hwnd, pt); 
        ส่งกลับ TRUE 
    } / / ส่งกลับ FALSE ถ้าจะแสดงเมนูไม่ 
 
    ส่งกลับค่า FALSE 
} 

 

Index