נושא זה מתאר דוגמה של קוד מציגה וניהול של תיבת הדו-שיח חיפוש כך המשתמש יכול לציין הפרמטרים של פעולת חיפוש. תיבת הדו-שיח שולחת הודעות שגרת החלון שלך כדי שתוכל לבצע את פעולת החיפוש.
קוד הצגה וניהול של תיבת דו-שיח להחליף דומה, פרט לכך היא משתמשת בפונקציה החלפת טקסט תחת כדי להציג את תיבת הדו-שיח. בתיבת הדו-שיח החלפה גם שולח הודעות בתגובה כשמשתמש לוחץ על הלחצנים ' החלף הכל ' להחלפת.
כדי להשתמש בתיבת הדו-שיח חיפוש או החלפה , עליך לבצע שלוש משימות נפרדות:
בעת אתחול היישום שלך, לבצע קריאה לפונקציה 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;
}