Додаток з немодального діалогової панеллю

Додаток з немодального діалогової панеллю

Головна | Про нас | Зворотній зв'язок

Процедура створення немодального діалогової панелі дещо відрізняється від процедури створення модальної діалогової панелі. Як і у випадку з модальної діалогової панеллю, в першу чергу необхідно створити шаблон діалогової панелі і додати його в файл ресурсів програми.

Потім потрібно створити клас, керуючий діалогової панеллю, - клас діалогової панелі. Цей клас успадковується безпосередньо від базового класу 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.

Схожі статті