ค้นหาข้อความ

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

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

การใช้กล่องโต้ตอบการค้นหาหรือแทนคุณต้องดำเนินการสามแยกงาน:

  1. ได้รับตัวระบุข้อความสำหรับข้อความลงทะเบียนFINDMSGSTRING.
  2. แสดงกล่องโต้ตอบ.
  3. ข้อความ FINDMSGSTRING ของกระบวนการเมื่อมีกล่องโต้ตอบเปิด.

เมื่อคุณเริ่มต้นโปรแกรมประยุกต์ของคุณ เรียกใช้ฟังก์ชัน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 
 
} 

 

Index