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++ — ©...
  Update World C++: Сборник GPL QT исходников
  Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Венерические заболевания прямой кишки www.mediccity.ru. ; константин церазов

 Урок API 3 - Оконная процедура / Уроки / Win32 API

Visual C++. API-функции
Урок 3. Оконная процедура

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

LONG WINAPI WndProc(HWND hwnd, UINT Message, WPARAM wparam, LPARAM lparam)
{
    switch (Message){
    case WM_DESTROY: 
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hwnd, Message, wparam, lparam);
    }
    return 0;
}

Основное назначение оконной процедуры (которая а самом деле не процедура, а функция) - это обработка сообщений Windows. Каждое приложение получает кучу сообщений. Их источник может быть разным. Например, сообщения от пользователя. Двинул пользователь мышку в окне - окно получает сообщение WM_MOUSEMOVE. Нажал левую клавишу - посылается сообщение WM_LBUTTONDOWN. Ещё сообщения могут посылаться самой Windows (например, WM_TIMER от таймера). Так вот именно в нашей оконной процедуре и происходит обработка этих сообщений. Это означает, что для каждого сообщения мы должны написать свой обработчик. А если не напишем, то наше приложение не будет обращать внимание на то или иное сообщение.

Спрашивается, а как наша программа узнает, что сообщения обрабатываются именно в нашей функции WndProc? Это задаётся в функции WinMain, в строке

    ...
    w.lpfnWndProc = WndProc;
    ...

У нашей оконной процедуры четыре параметра. Первый из них (hwnd типа HWND) - задает окно, которое будет обрабатывать сообщение. Второй (UINT Message) - это передаваемое сообщение. Два последних (WPARAM wparam, LPARAM lparam) задают дополнительные параметры для передаваемого сообщения. Они для каждого сообщения свои.

Оконная процедура отправляет сообщение в switch, который в нашем примере имеет только один case:

    switch (Message){
    case WM_DESTROY:
    ...

Т. е. пока наша программа обращает внимание только на сообщение WM_DESTROY. Если мы хотим, чтобы наша программа реагировала ещё на что-нибудь, то пришем еще один case. Но об этом - в следующем уроке.