Головна | Про нас | Зворотній зв'язок
Процедура створення немодального діалогової панелі дещо відрізняється від процедури створення модальної діалогової панелі. Як і у випадку з модальної діалогової панеллю, в першу чергу необхідно створити шаблон діалогової панелі і додати його в файл ресурсів програми.
Потім потрібно створити клас, керуючий діалогової панеллю, - клас діалогової панелі. Цей клас успадковується безпосередньо від базового класу CDialog. Для створення немодального діалогової панелі необхідно оголосити об'єкт класу діалогової панелі. У прикладі клас немодального діалогу визначається як змінна класу CMainFrame nodialog (див. Файл MainFrm.h):
class CMainFrame. public CFrameWnd
protected: // create from serialization only
// ClassWizard generated virtual function overrides
virtual BOOL PreCreateWindow (CREATESTRUCT cs);
virtual void AssertValid () const;
virtual void Dump (CDumpContext dc) const;
// Generated message map functions
afx_msg void OnModal ();
afx_msg void OnNomodal ();
afx_msg void OnNoshowdialog ();
Для ініціалізації панелі немодального діалогу треба викликати метод Create класу CDialog.
Метод Create можна викликати безпосередньо з конструктора класу діалогової панелі, або вже після створення об'єкта. Якщо Create викликається з конструктора класу діалогової панелі, треба визначити конструктор, оголосивши його як public. У прикладі метод Create викликається в конструкторі класу CMainFrame:
У класі CDialog визначені два прототипи методу Create. Один дозволяє вказати діалогову панель через її текстове ім'я, а інший - через числовий ідентифікатор.
BOOL Create (LPCTSTR lpszTemplateName, CWnd * pParentWnd = NULL);
BOOL Create (UINT nIDTemplate, CWnd * pParentWnd = NULL);
Параметр lpszTemplateName містить покажчик на рядок з ім'ям шаблону, параметр nIDTemplate визначає номер ідентифікатора ресурсу. Параметр pParentWnd вказує на батьківське вікно, якому належить діалог. Якщо pParentWnd дорівнює NULL, то власник - основне вікно програми.
Метод Create повертає нульове значення, якщо створення діалогової панелі завершилося успішно, і нуль в іншому випадку.
Якщо діалогова панель має стиль WS_VISIBLE, то вона відразу з'являється на екрані. В іншому випадку для її відображення треба викликати метод ShowWindow, а для прибирання панелі з екрану можна викликати метод DestroyWindow (цей метод визначений в класі CWnd, і його можна викликати для об'єктів класу діалогової панелі). У прикладі ці дейтвія виконуються в обробниках команд меню:
Для видалення об'єкта немодального діалогової панелі можна перевизначити віртуальний метод PostNcDestroy (цей метод спочатку визначений в базовому класі CWnd). У ньому можна викликати оператор delete, передавши йому в якості параметра покажчик на даний об'єкт this. Видаляти потрібно ті об'єкти, які створювалися за допомогою оператора new (в прикладі це дейтвія виконати не можна, до речі, чому?).
У прикладі (файл dlg2.zip) розширено меню за рахунок додавання двох пунктів - "Немодальний діалог" і "Прибрати модальний діалог", додані відповідні обробники подій.
Деякі функції для роботи з діалоговими панелями.
CWnd * CWnd :: GetDlgItem (int nID) const;
void CWnd :: GetDlgItem (int nID, HWND * phWnd) const;
void CDialog :: GotoDlgCtrl (CWnd * pWndCtrl);
Перекладає фокус на інший елемент в діалозі.
void CDialog :: NextDlgCtrl () const;
void CDialog :: PrevDlgCtrl () const;
Для того, щоб дізнатися, яка кнопка діє "за замовчуванням", а також змінити її програмно, можна скористатися функціями:
void CDialog :: SetDefID (UINT nID);
Функція GetDefID повертає в молодшому слові ідентифікатор кнопки за замовчуванням. Старше слово при цьому містить значення DC_HASDEFID.
Створити додаток Modal, яке виводить головне вікно, що містить меню з пунктами "Діалог", "About" і "Вихід". При виборі пункту "Діалог" з'являється модальна діалогова панель, яка дозволяє показати різні елементи Windows (кнопки з текстом і малюнками, статичні елементи (текст і іконки), елемент редагування, списки, check- кнопки і radio-кнопки). Показати управління цими елементами.
Всі програми повинні мати нестандартні іконки.
Додати в меню пункт для виведення немодального діалогового вікна. придумати зовнішній вигляд і використовуються елементи в діалозі.
Змінити діалог About.