หัวข้อนี้อธิบายตัวอย่างโค้ดที่แสดง และจัดการกับกล่องโต้ตอบการค้นหาเพื่อให้ผู้ใช้สามารถระบุพารามิเตอร์ของการดำเนินการค้นหา กล่องโต้ตอบการส่งข้อความไปยังขั้นตอนของหน้าต่างของคุณเพื่อให้คุณสามารถทำการดำเนินการค้นหา.
รหัสสำหรับการแสดงผล และการจัดการแทนกล่องโต้ตอบคล้าย ยกเว้นว่ามันใช้ฟังก์ชันReplaceTextเพื่อแสดงกล่องโต้ตอบ กล่องโต้ตอบแทนยังส่งข้อความในการตอบสนองต่อผู้ใช้คลิกที่บนปุ่มแทนและแทนทั้งหมด.
การใช้กล่องโต้ตอบการค้นหาหรือแทนคุณต้องดำเนินการสามแยกงาน:
เมื่อคุณเริ่มต้นโปรแกรมประยุกต์ของคุณ เรียกใช้ฟังก์ชันRegisterWindowMessageเพื่อที่ได้รับตัวระบุข้อความสำหรับข้อความลงทะเบียน FINDMSGSTRING.
UINT uFindReplaceMsg / / ข้อความระบุสำหรับ FINDMSGSTRING uFindReplaceMsg = RegisterWindowMessage(FINDMSGSTRING)
เมื่อต้องการแสดงในกล่องโต้ตอบการค้นหาแรก เตรียมใช้งานโครงสร้างแบบFINDREPLACEแล้ว เรียกใช้ฟังก์ชันFindText หมายเหตุว่า โครงสร้างFINDREPLACEและบัฟเฟอร์สำหรับสายอักขระการค้นหาควรเป็นตัวแปรส่วนกลาง หรือคงเพื่อที่จะไม่ไปจากขอบเขตก่อนที่ปิดกล่องโต้ตอบ คุณต้องตั้งค่าสมาชิกhwndOwnerระบุหน้าต่างที่ได้รับข้อความลงทะเบียน หลังจากที่คุณสร้างกล่องโต้ตอบ คุณสามารถย้าย หรือใช้งานได้ โดยใช้หมายเลขอ้างอิงที่ส่งกลับ.
FINDREPLACE fr / / โครงสร้างกล่องโต้ตอบทั่วไป
HWND hwnd / / เจ้าของหน้าต่าง
CHAR szFindWhat [80]; / / บัฟเฟอร์รับสาย
HWND hdlg = NULL / / จัดการของกล่องโต้ตอบการค้นหา
/ / เตรียมใช้งาน FINDREPLACE
ZeroMemory (แอมป์ fr, sizeof(FINDREPLACE))
fr.lStructSize = sizeof(FINDREPLACE)
fr.hwndOwner = hwnd
fr.lpstrFindWhat = szFindWhat
fr.wFindWhatLen = 80
frค่าสถานะ = 0
hdlg = FindText (& fr)
เมื่อกล่องโต้ตอบเปิด วนรอบข้อความหลักของคุณต้องมีการเรียกไปยังฟังก์ชันIsDialogMessage ผ่านหมายเลขอ้างอิงหน้าต่างของกล่องโต้ตอบเป็นพารามิเตอร์ในการเรียกIsDialogMessage นี้ยืนยันว่า กล่องโต้ตอบการกระบวนแป้นพิมพ์ข้อความได้อย่างถูกต้อง.
การตรวจสอบข้อความที่ส่งจากกล่องโต้ตอบ กระบวนงานของหน้าต่างของคุณต้องตรวจสอบข้อความ FINDMSGSTRING ลงทะเบียน และประมวลผลค่าส่งผ่านไปในโครงสร้างแบบFINDREPLACEเช่นในตัวอย่างดังต่อไปนี้:
LPFINDREPLACE lpfr
ถ้า (ข้อ== uFindReplaceMsg) { / / รับชี้ไปยังโครงสร้าง FINDREPLACE จาก lParam
lpfr = lParam (LPFINDREPLACE)
/ / หากถูก ตั้งค่าสถานะ FR_DIALOGTERM, / / โมฆะหมายเลขอ้างอิงที่ระบุในกล่องโต้ตอบ
ถ้า (lpfr-gtค่าสถานะและ FR_DIALOGTERM) { hdlg = NULL
ส่งกลับค่า 0
} / / หากถูก ตั้งค่าสถานะ FR_FINDNEXT, / / เรียกใช้ชุดคำสั่งค้นหาโปรแกรมประยุกต์ที่กำหนดเอง
/ / ค้นหาสายอักขระการร้องขอ
ถ้า (lpfr - > ค่าสถานะและ FR_FINDNEXT) SearchFile (lpfr - > lpstrFindWhat
(BOOL) (lpfr - > ค่าสถานะและ FR_DOWN), (BOOL) (lpfr - > ค่าสถานะและ FR_MATCHCASE));
ส่งกลับค่า 0
}