חיפוש טקסט

נושא זה מתאר דוגמה של קוד מציגה וניהול של תיבת הדו-שיח חיפוש כך המשתמש יכול לציין הפרמטרים של פעולת חיפוש. תיבת הדו-שיח שולחת הודעות שגרת החלון שלך כדי שתוכל לבצע את פעולת החיפוש.

קוד הצגה וניהול של תיבת דו-שיח להחליף דומה, פרט לכך היא משתמשת בפונקציה החלפת טקסט תחת כדי להציג את תיבת הדו-שיח. בתיבת הדו-שיח החלפה גם שולח הודעות בתגובה כשמשתמש לוחץ על הלחצנים ' החלף הכל ' להחלפת.

כדי להשתמש בתיבת הדו-שיח חיפוש או החלפה , עליך לבצע שלוש משימות נפרדות:

  1. קבל מזהה הודעה עבור ההודעה רשום FINDMSGSTRING.
  2. הצגת תיבת הדו-שיח.
  3. תהליך FINDMSGSTRING הודעות כאשר תיבת הדו-שיח פתיחה.

בעת אתחול היישום שלך, לבצע קריאה לפונקציה RegisterWindowMessage כדי לקבל מזהה הודעה עבור ההודעה רשום FINDMSGSTRING.

UINT uFindReplaceMsg;  / / הודעת מזהה עבור FINDMSGSTRING uFindReplaceMsg = RegisterWindowMessage(FINDMSGSTRING) 

כדי להציג את תיבת הדו-שיח חיפוש , תחילה לאתחל מבנה FINDREPLACE ולאחר מכן לפונקציה FindText . שים לב כי המבנה FINDREPLACE , את המאגר עבור מחרוזת החיפוש להיות משתנה גלובלי או סטטי כך הוא לא הולך מחוץ לטווח לפני סגירת תיבת הדו-שיח. עליך להגדיר את החבר hwndOwner כדי לציין את חלון שאינו מקבל את ההודעות רשומים. לאחר שיצרת בתיבת הדו-שיח, באפשרותך להעביר או לטפל בהם באמצעות נקודת האחיזה המוחזר.

FINDREPLACE fr;       / / מבנה תיבת דו-שיח נפוצות
HWND hwnd;            / / חלון בעלים
תו 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