יישום ליצור תיבות דו-שיח מותאמות אישית על-ידי שימוש של מחלקת חלון מוגדר על-ידי יישום עבור תיבות דו-שיח במקום באמצעות המחלקה בתיבת הדו-שיח מוגדרת מראש. שיישומים בדרך כלל משתמשים בשיטה זו כאשר תיבת דו-שיח החלון הראשי שלהם, אך היא שימושית גם עבור יצירת תיבות דו-שיח מודאליות ו modeless עבור יישומים בעלי הרגיל בחלונות חופפים.
מחלקת החלון המוגדר על-ידי היישום מאפשר ליישום הגדרת שגרה חלון עבור תיבת דו-שיח והודעות התהליך לפני שליחתם להליך בתיבת הדו-שיח. הוא גם מאפשר יישום להגדיר סמל מחלקה מברשת רקע מחלקה, תפריט מחלקה עבור תיבת הדו-שיח. היישום עליך לרשום מחלקת חלון לפני שתנסה ליצור תיבת דו-שיח, עליך לספק את התבנית בתיבת הדו-שיח בערך אטום או שם המחלקה חלון.
יישומים רבים ליצור מחלקה חדשה של תיבת הדו-שיח על-ידי אחזור מידע המחלקה עבור המחלקה בתיבת הדו-שיח מוגדרת מראש, והראשון העברתן הפונקציה GetClassInfo , שהיא ממלאת מבנה WNDCLASS עם המידע. היישום משנה חברים בודדים של המבנה, כגון שם המחלקה, מברשת וסמל, ולאחר מכן רושם את המחלקה החדשה באמצעות הפונקציה RegisterClass . אם יישום ממלא את המבנה WNDCLASS בפני עצמה, אותה עליך להגדיר חבר cbWndExtra DLGWINDOWEXTRA, שהוא מספר בתים נוספים שהמערכת דורש עבור כל אחת מתיבות הדו-שיח. אם יישום משתמש גם בתים נוספים עבור כל תיבת דו-שיח, הן צריכות להיות מעבר בתים הנוסף הנדרש על-ידי המערכת.
הפרוצדורה של חלון עבור תיבת דו-שיח מותאמת אישית יש פרמטרים ודרישות זהה להליך חלון אחר. שלא כמו שגרות אחרות חלון, עם זאת, ההליך חלון עבור תיבת דו-שיח זו יש לפונקציה DefDlgProc במקום בפונקציה DefWindowProc הודעות שלא לעבד. DefDlgProc פירטת את הודעת ברירת המחדל עיבוד להליך חלון עבור תיבת הדו-שיח מוגדרת מראש, כולל קריאה הפרוצדורה תיבת הדו-שיח.
יישום גם ליצור תיבות דו-שיח מותאמות אישית על-ידי subclassing ההליך חלון של תיבת הדו-שיח מוגדרת מראש. הפונקציה SetWindowLong מאפשר יישום, בחר את הכתובת של הפרוצדורה של חלון עבור החלון הנתון. היישום עשוי לנסות גם מחלקת משנה באמצעות הפונקציה SetClassLong , אך עושה כך משפיע כל תיבות הדו-שיח במערכת, לא רק את אלה השייכים ליישום.
יישומים המשתמשים ליצור תיבות דו-שיח מותאמות אישית לעתים לספק ממשק חלופי באמצעות לוח המקשים עבור תיבות דו-שיח. עבור תיבות הדו-שיח modeless, זה ייתכן אומר היישום לא יקרא את הפונקציה IsDialogMessage ומעבד במקום זאת כל קלט מלוח המקשים בהליך חלון מותאמת אישית. במקרים כאלה, היישום להשתמש את ההודעה WM_NEXTDLGCTL כדי למזער את הקוד הדרוש כדי להעביר את המוקד קלט מפקד אחד למשנהו. הודעה זו, בעת ההעברה DefDlgProc, מעבירה את המוקד קלט לפקד שצוין ומעדכן את המראה של הפקדים, כגון הזזת הגבול לחצן ברירת המחדל או הגדרת בלחצן אפשרות אוטומטית.