|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
Designing a Window Procedure
The following example shows the structure of a typical window procedure. The window procedure uses the message argument in a switch statement with individual messages handled by separate case statements. Notice that each case returns a specific value for each message. For messages that it does not process, the window procedure calls the DefWindowProc function.
LRESULT CALLBACK MainWndProc( HWND hwnd, // handle of window UINT uMsg, // message identifier WPARAM wParam, // first message parameter LPARAM lParam) // second message parameter { switch (uMsg) { case WM_CREATE: // Initialize the window. return 0; case WM_PAINT: // Paint the window's client area. return 0; case WM_SIZE: // Set the size and position of the window.
return 0; case WM_DESTROY: // Clean up window-specific data objects. return 0; // // Process other messages. // default: return DefWindowProc(hwnd, uMsg, wParam, lParam); } return 0; }
The WM_NCCREATE messageis sent just after your window is created, but if an application responds to this message by returning FALSE, CreateWindowEx function fails. The WM_CREATE message is sent after your window is already created. The WM_DESTROY message is sent when your window is about to be destroyed. The DestroyWindow function takes care of destroying any child windows of the window being destroyed. The WM_NCDESTROY message is sent just before a window is destroyed.
At the very least, a window procedure should process the WM_PAINT message to draw itself. Typically, it should handle mouse and keyboard messages as well. Consult the descriptions of individual messages to determine whether your window procedure should handle them. Your application can call the DefWindowProc function as part of the processing of a message. In such a case, the application can modify the message parameters before passing the message to DefWindowProc, or it can continue with the default processing after performing its own operations.
A dialog box procedure receives a WM_INITDIALOG message instead of a WM_CREATE message and does not pass unprocessed messages to the DefDlgProc function. Otherwise, a dialog box procedure is exactly the same as a window procedure.
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
Проектирование Процедуры Окна
Следующий пример показывает структуру типичной процедуры окна. Процедура окна использует аргумент сообщения в утверждении ключа с индивидуальными сообщениями прооперированными отдельными утверждениями случая. Обратите внимание как каждый случай возвращал специфическую величину для каждого сообщения. Для сообщений, которые это не обрабатывает, процедура окна вызывает функцию DefWindowProc.
LRESULT CALLBACK MainWndProc( HWND hwnd, // ручка окна UINT uMsg, // идентификатора сообщения WPARAM wParam, // первого параметра сообщения LPARAM lParam) // параметр сообщения секунды { ключ (uMsg) { случай WM_CREATE: // Инициализировать окно. возврат 0; случай WM_PAINT: // Краска область клиента окна. возврат 0; случай WM_SIZE: // Установившее размер и позицию окна.
возврат 0; случай WM_DESTROY: // Наведите порядок окно-специфические объекты данных. возврат 0; // // Процесс другие сообщения. // умолчание: возвращайте DefWindowProc(hwnd, uMsg, wParam, lParam); } возврат 0; }
WM_NCCREATE messageis Посланное просто после того, как ваше окно будет создано, но если приложение реагирует на это сообщение возвращав ЛОЖЬ, функция CreateWindowEx терпит неудачу. Сообщение WM_CREATE послано после того, как ваше окно уже будет создано. Сообщение WM_DESTROY послано когда ваше окно собирается быть уничтожено. Функция DestroyWindow заботится о разрушающем любом окне ребенка окна, уничтожанного. Сообщение WM_NCDESTROY послано точным прежде, чем окно будет уничтожено.
Самое меньшее, процедура окна должна обрабатывать сообщение WM_PAINT, чтобы делать себя. Обычно, это должно оперировать мышь и клавишные сообщения также. Обратитесь к описаниям индивидуальных сообщений, чтобы определять, что независимо ваша процедура окна должна оперировать ей. Ваше приложение может вызвать функцию DefWindowProc как часть обработки сообщения. В таком случае, приложение может модифицировать параметры сообщения перед прохождением сообщения на DefWindowProc, или это может продолжить по умолчанию обработку после выполнения собственных операций.
Диалоговый блок процедуры получает сообщение WM_INITDIALOG вместо сообщения WM_CREATE и не передает unprocessed сообщения в функцию DefDlgProc. В противном случае, диалоговый блок процедуры точно такой же как и процедура окна.
|
|
|
|
| |