Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 июля!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Возможности языков семейства Си по истине безграничны, однако, в этой свободе кроются и недостатки: всегда нужно программисту держать ухо востро и контроллировать "переполнение буфера", чтобы потом программа не вылетала в "синий экран" на массе разнообразных версий Windows и железа у пользователей. Те же крэкеры и реверсеры специально ищут в коде программ на Си уязвимости, куда можно подсадить любой вирусный код, об этом более подробно автор рассказывал в своём видеокурсе здесь. Я там многое узнал и теперь мой код стал значительно более безопасный.

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(); //то делаем его активным
 
     }
 
 }

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



<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS