Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
...
4 / 4 / 1
Регистрация: 10.11.2017
Сообщений: 151

Цикл сообщений и функция их обработки

09.03.2018, 23:45. Показов 4483. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
вечер добрый!
я почти нулевой новичок в win api, в одном из первых примеров, которые я смотрел упоминался цикл сообщений и функция их обработки:
C++
1
2
3
4
5
6
7
8
//это цикл сообщений
MSG msg ={0};// структура сообщения
int iGetOk = 0;//переменная сосотояния
while((iGetOk=GetMessage(&msg, NULL, 0, 0))/*тут мы передаём состояние сообщения нашей переменной*/!=0){
if (iGetOk == -1) return 3;//на случай ошибки возвращаем 3
TranslateMessage(&msg);    
DispatchMessage(&msg);
}
В принципе, понятно, что сообщение записывается в структуру msg. Зачем нужен TranslateMessage(&msg)?
Про DispatchMessage(&msg) было сказано, что эта функция вызывает функцию обработки сообщения, выглядящую так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, 
  WPARAM wParam, LPARAM lParam)
{
  // выборка и обработка сообщений
  switch (message)
  {
    case WM_LBUTTONUP:
      //реакция на сообщение
      break;
    case WM_DESTROY:
      //реакция на сообщение
      break;
    //все необработанные сообщения обработает система
    default:
      return DefWindowProc(hWnd, message, wParam, lParam);
  }
  return 0;
} // конец функции обработчика сообщений
на сколько я понял, switch фильтрует сообщения, туда грубо говоря можно вписать "нажата клавиша к" или "курсор в позиции 100" и соответствующие реакции на эти сообщения. Но как связывается DispatchMessage(&msg) из цикла с функцией обработки сообщений? Это происходит внутри функций или это надо где-то прописывать?
В комментариях в коде - моё понимание происходящего, если там что-то не так или есть что дополнить, то поправьте /дополните...
Спасибо!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.03.2018, 23:45
Ответы с готовыми решениями:

Макрос обработки сообщений?
Допустим у нас есть функция WndProc такого вида: LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { ...

Способы обработки сообщений windows
Подскажите пожалуйста как называются способы (механизмы) обработки сообщений кроме ловушек

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

2
2734 / 888 / 331
Регистрация: 10.02.2018
Сообщений: 2,102
10.03.2018, 01:48
Минимальный цикл обработки сообщений состоит из GetMessage и DispatchMessage. TranslateMessage требуется добавлять при работе окон с клавиатурой. В принципе, в описании функции это расписано.

По остальному я так себе это представляю. Каждое окно имеет свою оконную процедуру (WndProc). Первичное связывание окна и процедуры выполняется через имя оконного класса: RegisterClass связывает имя класса и процедуру, CreateWindow связывает имя класса и окно. Если в потоке создаётся хоть одно окно, то к потоку добавляется очередь, в которую ссыпаются разные сообщения. Такому потоку требуется добавить цикл обработки сообщений. GetMessage достаёт сообщения из очереди, а DispatchMessage их обрабатывает. В рамках одного потока может быть создано много окон. DispatchMessage определяет какое окно должно получить сообщение и вызывает соответствующую оконную функцию.
1
...
4 / 4 / 1
Регистрация: 10.11.2017
Сообщений: 151
10.03.2018, 09:09  [ТС]
Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.03.2018, 09:09
Помогаю со студенческими работами здесь

Отдельная процедура обработки сообщений от GroupBox
Создаю отдельную процедуру для обработки сообщений от элементов, которые находятся на GroupBox. сам GroupBox лежит на главной форме. Всё...

Цикл обработки сообщений
Можно ли как то отобразить основной цикл обработки сообщений в WinForms c++ если нет то как получить управление над потоком (ну я скорее...

Алгоритм обработки сообщений
Друзья, помогите, пожалуйста, составить алгоритм. ЯП не имеет значения, но я пишу на C#. Суть задачи. Есть два клиента. Оба отсылают...

Последовательность обработки сообщений
Никак не могу понять, как происходит обработка сообщений Вот такой обработчик. void __fastcall TForm1::Ed1TeyDown(TObject *Sender,...

Механизм обработки сообщений
Какие еще ОС поддерживают подобный механизм Варианты: Windows Unix MS Dos


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru