C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 Урок 40. Немодальное диалоговое окно / Уроки MFC / Visual C++

Visual C++. MFC
Урок 40. Немодальное диалоговое окно

Немодальное диалоговое окно, как известно, позволяет переключаться на основное окно приложения. Классический пример такого окна - это окно для поиска текста в Word'е. Когда это окно находится на экране, вы все равно имеете возможность продолжать набирать текст. На этом занятии мы и посмотрим, как делать окна акого типа.

Создайте новый проект с помощью AppWizard'а. Тип проекта выбираем Dialog Based, имя пусть для определенности будет NModal. Все параметры у Wizard'а можно оставить без изменения. Для того, чтобы не плодить лишний код, можете убрать галочки для поддержки ActiveX'ов и для окна About.

После того, как заготовка для нашего приложения будет создана, добавьте новый ресурс для диалогового окна (Ctrl+R). В нем ничего добавлять не требуется, только в свойствах (property) для этого диалога поставьте галочку для свойство Visible (на вкладке More Styles):

Свойство Visible

Создаем на его основе новый класс CDlg2 (для сего щелкаем на диалоге правой кнопкой мыши и затем выбираем ClassWizard).

Теперь добавляем в первый класс нашего приложения (т. е. в класс, порожденный AppWizard'ом) переменную типа указатель на CDlg2:

class ... {
...
CDlg2 *m_pDlg2;
...

Разумеется, так как мы тут используем переменную типа CDlg2, то нам надо добавить соответствующий заголовочный файл:

...
#include "Dlg2.h"
...
CDlg2 *m_pDlg2;

Этот указатель надо обнулить в конструкторе класса первого диалогового окна (у меня это класс CNModalDlg):

CNModalDlg::CNModalDlg(CWnd* pParent /*=NULL*/)
    : CDialog(CNModalDlg::IDD, pParent)
{
...
    m_pDlg2=NULL;
}

После этого добавьте на первое диалоговое окно кнопку. Как раз при нажатии на нее и появится наше второе немодальное диалоговое окно. В ее обработчик внесите следующий код:

void CNModalDlg::OnButton1() 
{
    // TODO: Add your control notification handler code here
    if(!m_pDlg2){ //если диалог не создан
        m_pDlg2=new CDlg2; //то создаем его
        m_pDlg2->Create(IDD_DIALOG1);
    }
    else{ //если создан
        m_pDlg2->SetActiveWindow(); //то делаем его активным
    }
}

Запускаем программу. При нажатии на добавленную нами кнопку покажеться второе диалоговое окно, причем мы сможем переключаться между ними!