Среда, 08.01.2025, 21:08
Главная Регистрация RSS поиск
Приветствую Вас, Гость
Меню сайта
Категории раздела
HTML [44]
Visual C++ и MFC [21]
c++ [78]
php [19]
Javascript [15]
C# [51]
загрузки [0]
XNA [10]
создание игр с помощью xna
Наш опрос
Каким языком программирования вы увлекаетесь
Всего ответов: 2420
Статистика

Онлайн всего: 3
Гостей: 3
Пользователей: 0
Реклама
Главная » Статьи » Visual C++ и MFC

Класс приложения CWinApp
Класс приложения CWinApplink rel="stylesheet" type="text/css" href="../common/style.css">

Класс приложения CWinApp

Итак, на первом занятии мы уже с Вами рассматривали вопрос связанный с WinMain(). Давайте вспомним о задачах, которые решает эта функция. Для этого рассмотрим упрощенную структуру данной функции:

Все представленные на рисунке функции определены в классе CWinApp - базовом классе, от которого мы наследуем Windows-приложение. Без использования этого класса нельзя создать приложение на базе библиотеки MFC, поэтому мы рассмотрим основные функции, которые нам необходимо переопределить при создании конкретного приложения. Начнем, что естественно, с конструктора:

CWinApp::CWinApp (LPCTSTR lpszAppName=NULL);

Как видно из прототипа, конструктор принимает параметр lpszAppName - указатель на текстовую строку, которая содержит имя приложения, используемое системой Windows. Если аргумент отсутсвует (т.е lpszAppName равняется NULL), для формирования имени приложения конструктор использует строку из файла ресурсов с идентификатором AFX_IDS_APP_TITLE. Таким образом, при необходимости, возможно изменить имя главного окна приложения через данный идентификатор. Если указанный идентификатор не будет найден, имя главного окна приложения совпадет с именем исполняемого файла. В любой момент мы можем узнать значения этого параметра через поле класса m_pszAppName;

С понятием виртуальных функций Вы уже знакомы (помните, механизм раннего и позднего связывания?..). В класса CWinApp есть целый ряд виртуальных функций. Мы рассмотрим следующие:

virtual BOOL CWinApp::InitInstance();

Функция отвечает за инициализацию каждого нового экземпляра приложения. Если Вы внимательно разбирали код, сгенерированный MFC AppWizard, тогда Вы обязательно знакомы с этой функцией. Вот ее код в "первозданном" виде:

BOOL CConvertApp::InitInstance()
{
 // Standard initialization
 // If you are not using these features and wish to reduce the size
 // of your final executable, you should remove from the following
 // the specific initialization routines you do not need.

#ifdef _AFXDLL
 Enable3dControls(); // Call this when using MFC in a shared DLL
#else
 Enable3dControlsStatic(); // Call this when linking to MFC statically
#endif

 CConvertDlg dlg;
 m_pMainWnd = &dlg;
 int nResponse = dlg.DoModal();
 if (nResponse == IDOK)
 {
 // TODO: Place code here to handle when the dialog is
 // dismissed with OK
 }
 else if (nResponse == IDCANCEL)
 {
 // TODO: Place code here to handle when the dialog is
 // dismissed with Cancel
 }

 // Since the dialog has been closed, return FALSE so that we exit the
 // application, rather than start the application's message pump.
 return FALSE;
}

Обычно в данной функции конструируется объект "главное окно" приложения, загружаются настройки программы из реестра Windows. Также, в данной функции предоставляется удобный случай для обработки командной строки текущего экземпляра приложения. После создания главного окна, переменной m_pMainWnd, из класса CWinThread, присваивается указатель на текущее окно (m_pMainWnd = &dlg;). Если Вы хотите получить хоть какую-либо пользу от Вашего приложения, Вам необходимо обязательно перегрузить данную функцию.

Уверены, Вы помните, что при программировании под Windows мы часто имеем дело с сообщениями. Так вот, функция

virtual int CWinApp::Run();

запускает цикл обработки сообщений, в котором выбираются и распределяются сообщения Windows. Другими словами, из очереди сообщений выбираются сообщения, адресованные нашей программе, анализируются и обрабатываются соответствующими обработчиками.

Еще одна функция, о которой мы не могли не вспомнить, это:

virtual BOOL CWinApp::ExitInstance();

которая вызывается только из функции Run для завершения работы текущего экземпляра приложения. Если Вы хотите внести, к примеру, свои коррективы в процесс обработки завершения приложения, тогда перегрузите эту функцию.

Мы с Вами рассмотрели лишь часть виртуальных функций класса CWinApp. Реально, их, естественно, гораздо большее количество. О многих из них мы будем говорить с Вами в процессе изучения увлекательного мира MFC.

В завершении, рассмотрим следующую функцию:

void CWinApp::SetDialogBkColor (COLORREF clrCtlBk = RGB(192, 192, 192), COLORREF clrCtlText = RGB(0, 0, 0) );

Вызвав данную функцию внутри функции InitInstance(), Вы можете изменить цвет фона диалогового окна (параметр clrCtlBk) и цвет элементов управления (параметр clrCtlText). Для задания цвета, используется макрос RGB, который возвращает значение типа COLORREF. Если Вы хотите задать цвет с помощью данного макроса, укажите числа для соответсвующих каналов красного, зеленого и синего. К примеру: RGB(0,0,0) -задает черный цвет, RGB(255,0,0) - красный, а RGB(255,255,255) - белый. Понятно, что функция SetDialogBkColor не может изменить цвет какого-то конкретного элемента управления. Красить так красить!..

Категория: Visual C++ и MFC | Добавил: slava (26.09.2009)
Просмотров: 2521 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]