วิธีจับที่จับกับหน้าต่าง

สารบัญ:

วิธีจับที่จับกับหน้าต่าง
วิธีจับที่จับกับหน้าต่าง

วีดีโอ: วิธีจับที่จับกับหน้าต่าง

วีดีโอ: วิธีจับที่จับกับหน้าต่าง
วีดีโอ: การจับเซี้ยม ช่องหน้าต่างบานอลูมิเนียมสำเร็จรูป 2024, พฤศจิกายน
Anonim

แนวคิดของส่วนต่อประสานผู้ใช้ใน Windows ขึ้นอยู่กับแนวคิดของหน้าต่าง บทสนทนา ปุ่ม แผงควบคุม รายการ เป็นหน้าต่างทั้งหมด ดังนั้นเพื่อดำเนินการใดๆ กับองค์ประกอบใดๆ ของอินเทอร์เฟซของแอปพลิเคชันของคุณเองหรือของผู้อื่น คุณต้องมีตัวจัดการหน้าต่าง

วิธีจับที่จับกับหน้าต่าง
วิธีจับที่จับกับหน้าต่าง

จำเป็น

  • - แพ็คเกจ SDK แพลตฟอร์ม;
  • - คอมไพเลอร์

คำแนะนำ

ขั้นตอนที่ 1

รับที่จับไปที่หน้าต่างโดยสร้างมันขึ้นมา เรียกใช้ฟังก์ชัน CreateWindow หรือ CreateWindowEx API หรือเรียกใช้เมธอด wrapper ที่เหมาะสม (บนอ็อบเจ็กต์ที่จำเป็น) ของคลาสของเฟรมเวิร์กหรือไลบรารีที่ใช้ซึ่งสรุปฟังก์ชันการทำงานของการทำงานกับหน้าต่างหรือตัวควบคุม ฟังก์ชัน CreateWindow และ CreateWindowEx จะส่งคืนฟังก์ชัน CreateWindow และ CreateWindowEx โดยตรง จัดการหน้าต่างในการสร้างที่ประสบความสำเร็จ หากเรียกไม่สำเร็จ จะคืนค่า NULL สามารถขอรหัสเหตุผลข้อผิดพลาดได้โดยใช้ฟังก์ชัน GetLastError API ต้นแบบและคำอธิบายโดยละเอียดของพารามิเตอร์ของฟังก์ชัน CreateWindow และ CreateWindowEx สามารถรับได้จากลิงก์ https://msdn.microsoft.com/en-us/library/windows/desktop/ms632679%28v=vs.85%29.aspx และ https:// msdn.microsoft.com / en-us / library / windows / desktop / ms632680% 28v = vs.85% 29.aspx เมื่อใช้คลาสของเฟรมเวิร์กที่แตกต่างกัน การสร้างออบเจ็กต์หน้าต่างระบบปฏิบัติการสามารถเกิดขึ้นได้อย่างชัดเจน (โดยการเรียกเมธอด) หรือโดยปริยาย (การนำกลยุทธ์ RAII ไปใช้) ดังนั้นจึงเป็นการดีกว่าที่จะรับตัวจัดการหน้าต่างบนวัตถุที่เตรียมใช้งานพร้อมแล้ว คุณสามารถเรียนรู้เกี่ยวกับวิธีการของคลาสที่ส่งคืนหมายเลขอ้างอิงหน้าต่างที่ห่อหุ้มโดยวัตถุในเอกสารประกอบของกรอบงานที่เกี่ยวข้อง ตัวอย่างเช่น ใน MFC วิธีการที่คล้ายกันคือ GetSafeHwnd ของคลาส CWnd

ขั้นตอนที่ 2

รับที่จับไปที่หน้าต่างโดยการค้นหา ใช้ฟังก์ชัน FindWindow และ FindWindowEx API หรือคลาสอ็อบเจ็กต์ wrappers ที่เหมาะสมสำหรับเฟรมเวิร์กที่คุณกำลังใช้ FindWindow ส่งคืนหมายเลขอ้างอิงไปยังหน้าต่างระดับบนสุดหากพบ หรือ NULL เมื่อล้มเหลว การค้นหาจะดำเนินการตามชื่อคลาสและชื่อหน้าต่าง คำอธิบายของพารามิเตอร์และลักษณะของฟังก์ชันสามารถดูได้ที่ลิงค์ https://msdn.microsoft.com/en-us/library/windows/desktop/ms633499%28v=vs.85%29.aspx ความหมายของ ฟังก์ชัน FindWindowEx คล้ายกับ FindWindow โดยมีความแตกต่างเพียงอย่างเดียวคือค้นหาหน้าต่างย่อย เอกสารประกอบสำหรับ FindWindowEx มีอยู่ที่

ขั้นตอนที่ 3

ค้นหาที่จับไปที่หน้าต่างขณะแสดงรายการชุดของพวกเขา ใช้ฟังก์ชัน API EnumWindows, EnumChildWindows, EnumThreadWindows หรือเมธอดของคลาสอ็อบเจ็กต์ของเฟรมเวิร์กที่คุณใช้ ฟังก์ชัน EnumWindows และ EnumChildWindows จะระบุหน้าต่างระดับบนสุดและหน้าต่างย่อยตามลำดับ ฟังก์ชัน EnumThreadWindows ระบุหน้าต่างที่ไม่ใช่ลูกทั้งหมดของเธรดที่ระบุ แต่ละฟังก์ชันเหล่านี้จะต้องส่งผ่านพอยน์เตอร์ไปยังโพรซีเดอร์เรียกกลับ ซึ่งจะถูกส่งผ่านแฮนเดิลของวินโดว์ที่พบเป็นพารามิเตอร์ระหว่างการทำงาน การรวมฟังก์ชันการแจงนับ การรับ และการวิเคราะห์คุณสมบัติของหน้าต่างในขั้นตอนการโทรกลับ คุณจะพบแฮนเดิลของ หน้าต่างที่จำเป็น เอกสารประกอบสำหรับฟังก์ชันที่อธิบายไว้มีให้ที่ลิงก์: - EnumWindows: https://msdn.microsoft.com/en-us/library/windows/desktop/ms633497%28v=vs.85%29.aspx; - EnumChildWindows: https:// msdn.microsoft.com/en-us/library/windows/desktop/ms633494%28v=vs.85%29.aspx; - EnumThreadWindows: https://msdn.microsoft.com/en-us/library /windows/desktop /ms633495%28v=vs.85%29.aspx.

ขั้นตอนที่ 4

รับหมายเลขอ้างอิงไปยังหน้าต่างที่พิกัดที่รู้จัก ฟังก์ชัน WindowFromPoint, ChildWindowFromPoint, ChildWindowFromPointEx ส่งคืนหมายเลขอ้างอิงไปยังหน้าต่างที่มีจุดที่ระบุ ฟังก์ชัน WindowFromPoint ใช้งานง่ายที่สุด แต่ไม่ส่งคืนจุดจับสำหรับหน้าต่างที่ซ่อนอยู่หรือปิดใช้งาน คุณสามารถค้นหาเอกสารเกี่ยวกับการใช้งานได้ที่ https://msdn.microsoft.com/en-us/library/windows/desktop/ms633558%28v=vs.85%29.aspx ฟังก์ชัน ChildWindowFromPoint และ ChildWindowFromPointEx ค้นหาจุดจับสำหรับเด็ก หน้าต่างของหน้าต่างหลักที่กำหนดซึ่งเป็นของจุดที่กำหนด ในกรณีนี้ สามารถควบคุมพฤติกรรมของ ChildWindowFromPointEx ได้อย่างยืดหยุ่นโดยใช้พารามิเตอร์เพิ่มเติม เอกสารประกอบสำหรับฟังก์ชันเหล่านี้มีให้โดยลิงก์: - ChildWindowFromPoint: https://msdn.microsoft.com/en-us/library/windows/desktop/ms632676%28v=vs.85%29.aspx; - ChildWindowFromPointEx: https:// msdn.microsoft.com/en-us/library/windows/desktop/ms632677%28v=vs.85%29.aspx.