אתחול תיבת דו-שיח

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

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

HWND hwndOwner; 
RECT rc, rcDlg, rcOwner; 
 
    מקרה WM_INITDIALOG: / / לקבל הבעלים מלבנים תיבת הדו-שיח מתקדם וחלון. 
 
        אם ((hwndOwner = GetParent(hwndDlg)) = = NULL) {
            hwndOwner = GetDesktopWindow(); 
        }

GetWindowRect (hwndOwner, כח; rcOwner); 
        GetWindowRect (hwndDlg, & rcDlg); 
        CopyRect (rc, & rcOwner); 
 
         / / היסט הבעלים, מלבנים בתיבת הדו-שיח כך / / ערכים מימין ובתחתית מייצגים את הרוחב ו / / גובה ולאחר מכן היסט הבעלים שוב כדי לבטל / / מקום תופס את תיבת הדו-שיח. 
 
        OffsetRect (& rcDlg,-rcDlg.left, - rcDlg.top); 
        OffsetRect (& rc,-rc.left, - rc.top); 
        OffsetRect (& rc,-rcDlg.right, - rcDlg.bottom); 
 
         / / המיקום החדש הוא הסכום של חצי יתרת / / רווח ואת הבעלים המקורי של מיקום. 
 
        SetWindowPos (hwndDlg, HWND_TOP, rcOwner.left + (rc.right/2), rcOwner.top + (rc.bottom / 2), 0, 0, / / מתעלם ארגומנטים גודל SWP_NOSIZE); 
 
        אם (GetDlgCtrlID((HWND) wParam)! = ID_ITEMNAME) {SetFocus (GetDlgItem (hwndDlg, ID_ITEMNAME)); 
            להחזיר שקר; 
        } מחזירה אמת 

 

בפסקאות הקודמות, ההליך משתמשת בפונקציה GetParent כדי לאחזר את נקודת האחיזה של חלון הבעלים של תיבת הדו-שיח. הפונקציה מחזירה לבעלים מטפל בחלון עבור תיבות דו-שיח, מטפל בחלון האב עבור חלונות צאצאים. מאחר יישום יכול ליצור תיבת דו-שיח הכוללת אין הבעלים, ההליך בודק את נקודת האחיזה המוחזר, משתמשת בפונקציה GetDesktopWindow כדי לאחזר את נקודת האחיזה של החלונות של שולחן העבודה, במידת הצורך. לאחר חישוב המיקום החדש, ההליך משתמשת בפונקציה SetWindowPos כדי להזיז את תיבת הדו-שיח, המציין את הערך HWND_TOP כדי לוודא תיבת הדו-שיח תישאר בראש חלון בעלים.

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

Index