Урок API 3 - Оконная процедура / Уроки / Win32 API
Visual C++. API-функции Урок 3. Оконная процедура
Вторая часть в любой программе под Windows - это оконная процедура. В нашем примере она маленькая (так как наша программа ничего не делает), но вообще-то именно эта часть в некотором смысле и являетя самой главной и интересной в приложении. Давайте разберем ее текст.
Основное назначение оконной процедуры (которая а самом деле не процедура, а функция) - это обработка сообщений 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. Но об этом - в следующем уроке.