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

ВИДЕОКУРС ВЗЛОМ
выпущен 8 мая!


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

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



Слушай, дружище, зачем так мучиться с этим языком С++, ты ведь не Билл Гейтс. Возьми тот же Python и программируй, он кроссплатформенный, под Windows тоже работает. Я сам давно заметил: то что на Си пишешь в страницу кода, на питоне решается в одну-две строки. При том, питон намного проще, я его сам недавно изучил по видеокурсу вот этому. Кстати, автор отлично там объясняет. Буквально день-два и уже будешь писать на нём, чего не скажешь про сложный С++.

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. Но об этом - в следующем уроке.



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

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




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



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


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