Лекция Архитектура 32-разрядных ос windows 7




Скачать 2.1 Mb.
Название Лекция Архитектура 32-разрядных ос windows 7
страница 7/35
Дата публикации 20.05.2014
Размер 2.1 Mb.
Тип Лекция
literature-edu.ru > Информатика > Лекция
1   2   3   4   5   6   7   8   9   10   ...   35

3. Приложение с циклом обработки сообщений и оконной процедурой


Новая версия hello.cpp (программа 2.3) регистрирует собственный оконный класс. Это делается частично для косметических улучшений (чтобы отказаться от неестественного применения класса BUTTON для вывода сообщения), но главным образом для того, чтобы установить собственную оконную процедуру.


Рис. 2.3. Версия приложения "Hello, World!" с собственным оконным классом.
#include
void DrawHello( HWND hwnd )

{

  PAINTSTRUCT paintStruct;

  HDC hDC = BeginPaint( hwnd, &paintStruct );
  if ( hDC != NULL )

    {

    RECT clientRect;

    GetClientRect( hwnd, &clientRect );

    DPtoLP( hDC, (LPPOINT)&clientRect, 2 );

    DrawText( hDC, "Hello, World!", -1, &clientRect,

DT_CENTER | DT_VCENTER | DT_SINGLELINE );

    EndPaint( hwnd, &paintStruct );

    }

}
LRESULT CALLBACK WndProc( HWND hwnd, UINT uMsg,

WPARAM wParam, LPARAM lParam )

{

  switch(uMsg)

    {

    case WM_PAINT : DrawHello( hwnd ); break;

    case WM_DESTROY : PostQuitMessage( 0 ); break;

    default : return DefWindowProc( hwnd, uMsg, wParam, lParam );

    }

  return 0;

}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,

LPSTR d3, int nCmdShow )

{

  if ( hPrevInstance == NULL )

    {

    WNDCLASS wndClass;

    memset( &wndClass, 0, sizeof(wndClass) );

    wndClass.style = CS_HREDRAW | CS_VREDRAW;

    wndClass.lpfnWndProc = WndProc;

    wndClass.hInstance = hInstance;

    wndClass.hCursor = LoadCursor( NULL, IDC_ARROW );

    wndClass.hbrBackground = (HBRUSH)( COLOR_WINDOW + 1 );

    wndClass.lpszClassName = "HELLO";

    if ( !RegisterClass( &wndClass ) )

      return FALSE;

    }
  HWND hwnd;

  hwnd = CreateWindow( "HELLO", "HELLO", WS_OVERLAPPEDWINDOW,

CW_USEDEFAULT, 0, CW_USEDEFAULT, 0,

NULL, NULL, hInstance, NULL );

  ShowWindow( hwnd, nCmdShow );

  UpdateWindow( hwnd );
  MSG msg;

  while( GetMessage( &msg, NULL, 0, 0 ) )

    DispatchMessage( &msg );
  return msg.wParam;

}

Программа 2.3. Приложение "Hello, World!" с собственным оконным классом.
Новая версия приложения содержит примерно 60 строк исходного текста. Но оно выглядит как "полноценное" Windows-приложение (рис. 2.3), у которого есть системное меню, окно которого можно перемещать, изменять размер, сворачивать и разворачивать, оно умеет перерисовывать себя, реагировать на команду меню Закрыть и на комбинацию клавиш Alt+F4.

Как и раньше, выполнение программы начинается с функции WinMain. Сначала приложение проверяет, есть ли уже запущенный экземпляр данного приложения. Если есть, то оконный класс повторно регистрировать не надо. Иначе выполняется регистрация оконного класса, свойства и поведение которого описываются с помощью структуры WNDCLASS. В переменную lpfnWndProc этой структуры помещается адрес оконной процедуры. В нашем примере это будет функция WndProc.

Далее, вызывается функция CreateWindow для создания окна. После вывода окна на экран WinMain входит в цикл обработки сообщений. Этот цикл завершится, когда GetMessage вернет FALSE в результате получения сообщения WM_QUIT.

Функция WndProc демонстрирует назначение и структуру оконной процедуры, которая не была видна в предыдущих версиях "Hello, World!". Типичная оконная процедура на языке Си состоит из большого оператора switch. В зависимости от полученного сообщения, из этого оператора вызываются различные функции для обработки конкретных сообщений. В нашем примере обрабатываются только два сообщения: WM_PAINT и WM_DESTROY.

Сообщение WM_PAINT требует от приложения частично или полностью перерисовать содержимое окна. Большинство приложений перерисовывают только те области окна, которые нуждаются в перерисовке. В нашем случае, для простоты, на каждое сообщение WM_PAINT всегда выполняется вывод всей строки "Hello, World!".

Сообщение WM_DESTROY поступает в результате действий пользователя, которые приводят к уничтожению окна приложения. В качестве реакции наше приложение вызывает функцию PostQuitMessage. Т.о. гарантируется, что функция GetMessage в WinMain получит сообщение WM_QUIT и главный цикл обработки сообщений завершится.

Сообщения, которые не обрабатываются нашей оконной процедурой, с помощью функции DefWindowProc передаются в оконную процедуру по умолчанию. Эта функция реализует поведение окна приложения и многих компонент его неклиентской области (например, строки заголовка).

1   2   3   4   5   6   7   8   9   10   ...   35

Похожие:

Лекция Архитектура 32-разрядных ос windows 7 icon Программа по курсу: архитектура ядра ос windows
История семейства Windows nt. Цели и принципы семейства Windows nt. Основные концепции: Native и Win32 api, режимы ядра и пользователя,...
Лекция Архитектура 32-разрядных ос windows 7 icon Лекция I и проблема языка и сознания лекция II 31 слово и его семантическое...
Монография представляет собой изложение курса лекций, про* читанных автором на факультете психологии Московского государственного...
Лекция Архитектура 32-разрядных ос windows 7 icon И вычислительной техники системное программное обеспечение. Операционная система Windows Минск
Дается общая характеристика операционной системы Windows, рассматривается пользовательский интерфейс. Дается понятие файловой системы,...
Лекция Архитектура 32-разрядных ос windows 7 icon ОС, она немедленно завершает работу и самопроизвольно перезагружается....
Когда windows xp сталкивается с серьёзной проблемой, ставящей под вопрос дальнейшее правильное функционирование операционной системы...
Лекция Архитектура 32-разрядных ос windows 7 icon Контрольные вопросы по материалам разделов Раздел Круглые столы Архитектура летопись мира
«Архитектура». Оно предназначено для студентов средних специальных учебных заведений архитектурного профиля, а также может использоваться...
Лекция Архитектура 32-разрядных ос windows 7 icon Лекция №1. Введение. Элементы дифференциальной геометрии. 2
Лекция №5. Множества Жюлиа, множество Мандельброта и их компьютерное представление. 18
Лекция Архитектура 32-разрядных ос windows 7 icon Лекция в Дорнахе 22 мая 1920 года
Канта и протестантизма. Эта лекция вызвала негодование среди членов Лиги, культивировавших и признававших под названием монизма вообще...
Лекция Архитектура 32-разрядных ос windows 7 icon Курс лекций Лекция Введение в философскую суицидологию. Лекция Общая...
Открыть, в чём состоит суть суицида, наука не в состоянии (по собственной ограниченной природе) и потому должна обращаться за объяснениями...
Лекция Архитектура 32-разрядных ос windows 7 icon Лекция № Происхождение языка Лекция № Природа, сущность и функции языка
Термины лингвистика и языкознание (термин языковедение архаичен) употребляются как синонимы. Любая наука имеет объект и предмет,...
Лекция Архитектура 32-разрядных ос windows 7 icon «природа жертва войны» (название лекции) Просветительская лекция. Лекция информация
Тема моей лекции «Природа – жертва войны», а основной целью – на основе фактов воздействия войны на природу, взятых из произведений...
Литература


При копировании материала укажите ссылку © 2015
контакты
literature-edu.ru
Поиск на сайте

Главная страница  Литература  Доклады  Рефераты  Курсовая работа  Лекции