Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Уроки по программированию. Visual C++, MFC, VB, ActiveX


Служба Рассылок Subscribe.Ru

Visual C++. MFC. Уроки по программированию с сайта http://alexeev.nm.ru

Visual C++. MFC. Урок 17. Подсоединяем мастер ClassWizard.
Visual C++. MFC. Урок 18. Еще о добавлении диалога.
Visual C++. MFC. Урок 19. Обмен данными с диалогом.

Visual C++. MFC. Урок 17. Подсоединяем мастер ClassWizard

В Visual C++ кроме мастеров для создания остова приложения есть такой замечательный мастер как ClassWizard. Он предназначен для работы с классами - для добавки в них методов и свойств, для добавления переменных к элементам диалогового окна и для других целей. ClassWizard автоматически подсоединится к вашему проекту, если вы запускаете какой-нибудь мастер для создания заготовки для вашего приложения. Мы же пишем наши первые программы с MFC без мастеров, поэтому нам надо мастер ClassWizard подсоединить. Часть классов у нас уже написана без него. Если мы хотим в дальнейшем использовать ClassWizard и для уже написанных классов, то мы должны внести в них некоторые изменения (т. е. добавить код, который внёс бы ClassWizard, если бы писал заготовку для наших классов сам). Сделаем это.

Вставьте следующий код в protected-секцию класса CMyMainWnd:

class CMyMainWnd : public CFrameWnd{
protected:
    //{{AFX_MSG(CMyMainWnd)
    //}}AFX_MSG
    ...

Затем вставьте код в public-секцию класса CMyMainWnd:

public:
    //{{AFX_VIRTUAL(CMyMainWnd)
    //}}AFX_VIRTUAL
    ...

И, наконец, в карту сообщений класса CMyMainWnd:

BEGIN_MESSAGE_MAP(CMyMainWnd, CFrameWnd)
    //{{AFX_MSG_MAP(CMyMainWnd)
    //}}AFX_MSG_MAP
    ...
END_MESSAGE_MAP()

Добавленный нами код будет компилятором игнорироваться (это же комментарий), но для ClassWizard он очень важен. Именно между добавленными нами строчками ClassWizard и будет писать что-то своё. Это - его территория.

После этого нажмите комбинацию клавиш Ctrl+W для вызова ClassWizard. Так так файла для него нет (с расширением *.clw), то он предложит вам его создать:

Создание файла для ClassWizard

Отвечайте Да. В появившемся окне сначала нажмите на Add All (для подсоединения существующих классов), и затем на OK:

Подсоединение существующих классов

Появится окно ClassWizard.

Окно ClassWizard

Обратите внимание, что в ComboBox'е Class Name будет наш класс CMyMainWnd. Это потому, что именно в него мы добавили строчки типа

//{{AFX_...(CMyMainWnd)
//}}AFX_...

Нажимаем OK для закрытия ClassWizard. Если он нам будет нужен, то вызываем его комбинацией клавиш Ctrl+W.

Обратите внимание, что в папке вашего проекта появится файл ClassWizard'а (с расширением *.clw):

Файл *.clw
Наверх

Visual C++. MFC. Урок 18. Еще о добавлении диалога

В предыдущем уроке мы уже создали диалоговое окно. При этом мы не создавали новый класс. Посмотрим теперь, как можно создать диалоговое окно с созданием нового класса.

Начнем с того, что создадим ресурс для диалогового окна. Для этого заходим в меню Insert, далее выбираем Resource. В появившемся диалоге выбираем Dialog и нажимаем на New. Все, как в уроке 16. Для того, чтобы не спутать наш диалог с предыдущим, измените его заголовок. Для этого щелкните на нем правой кнопкой мыши и выберите Properties. В появившемся окне свойств измените свойство Caption на Dialog (class):

Свойства диалога

Закройте окно свойств. Теперь используем ClassWizard для создания нового класса. Для этого вызовите для нашего нового диалогового окна контекстное меню и выберите в нем ClassWizard. В появившемся окне Adding a Class выберите Create a new class и нажмите на OK:

Диалог Adding a Class

Появится следующее диалоговое окно New Class. В нем задайте свойство Name как CDlg и убедитесь, что в ComboBox'е Dialog ID выбран идентификатор нашего нового диалого IDD_DIALOG2, после чего нажмите OK:

Диалог New Class

После этого в окне ClassWizard в списке классов появится наш новый класс:

Новый класс

Этот же класс появится и на вкладке ClassView:

Новый класс

Теперь займемся необходимыми изменениями в коде. Их несколько. Во-первых, надо изменить обработчик нашего меню. До этого в нем вызывалось первое диалоговое окно. Уберите из обработчика старый код и добавьте код для появления нашего второго диалогового окна:

void CMyMainWnd::OnMyMenuDialog(){
    CDlg dlg;
    dlg.DoModal();
}

Так как мы используем класс CDlg, то его заголовочный файл надо добавить в класс реализации нашего класса CMyMainWnd (это файл, в котором мы написали обработчик для меню):

#include 
#include "resource.h"

#include "Dlg.h"
 ...

Теперь, если вы запустите нашу программу и выберете соответствующее меню, то появится наше новое диалоговое окно:

Новый диалог
Наверх

Visual C++. MFC. Урок 19. Обмен данными с диалогом

В этом уроке мы с вами посмотрим как, используя ClassWizard, производить обмен данных между программой и диалоговым окном. Наша программа будет передавать строку из диалогового окна в свое главное окно и обратно. Передаваемая строка будет появлятся в заголовке нашего приложения.

Добавьте на наше диалоговое окно Edit:

Edit

Для того, чтобы передавать данные в диалог и обратно, нам надо завести две переменные - одну в классе диалогового окна, а другую - в оконном классе CMyMainWnd. Сначала заведем переменную в классе диалогового окна. Для этого вызываем ClassWizard, переходим в нем на вкладку Member Variables, в ComboBox'е Class name выбираем класс нашего диалогового окна CDlg, затем выделяем идентификатор IDC_EDIT1 (это идентификатор Edit'а, который мы добавили в наш диалог), и, наконец, нажимаем на кнопку Add Variable:

Окно ClassWizard

Повляется окно Add Member Variable. В нем задайте m_sMyString в качестве имени для новой переменной (и убедитесь, что для ComboBox'а Variable type стоит тип CString):

Окно Add Member Variable

Нажмите OK. Добавленная нами переменная покажется в ClassWizard:

Переменная в ClassWizard

Кроме того она покажется в классе CDlg на вкладке ClassView:

Переменная в ClassView

Теперь добавим переменную в оконный класс:

class CMyMainWnd : public CFrameWnd{
 ...
public:
    CString m_sMyString;
    ...

Теперь осталось переписать код для нашего меню. Он должен выглядеть так:

void CMyMainWnd::OnMyMenuDialog(){
    CDlg dlg;
    dlg.m_sMyString=m_sMyString; //Передаем данные в диалог
    if(dlg.DoModal()==IDCANCEL) //Если нажали на cancel,
        return;                 //то выходим
    m_sMyString=dlg.m_sMyString;//Передаем данные и диалога
    SetWindowText(m_sMyString); //Новый заголовок для окна
}

Запускаем прогамму и вызываем наше диалоговое окно. Задаем в нем новую строку:

Задаем заголовок

Нажимаем на OK. Введенная строка покажется в заголовке нашей программы:

Новый заголовок

Также обратите внимание, что при повторном вызове диалога в нем опять покажется наша строка.

Наверх

© Алексеев Игорь, 2001


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу
Рейтингуется SpyLog

В избранное