Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.11.2023, 15:03   #31
groverx
Пользователь
 
Регистрация: 08.11.2023
Сообщений: 24
По умолчанию

Т.е. я правильно понимаю, что пока моя процедура окна обрабатывает каое-то сообщение, в это время GetMessage принимает кучу новых, и передает на DefWindowProc?
Что такое луп сообщений?
Процедура окна вызывается, если я правильно понял, по команде DispatchMessage, или не так?
groverx вне форума Ответить с цитированием
Старый 18.11.2023, 15:08   #32
groverx
Пользователь
 
Регистрация: 08.11.2023
Сообщений: 24
По умолчанию

Хорошо, а где тогда искать в сообщении время и координаты?

Последний раз редактировалось groverx; 18.11.2023 в 15:11.
groverx вне форума Ответить с цитированием
Старый 18.11.2023, 15:13   #33
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,772
По умолчанию

Цитата:
Сообщение от groverx Посмотреть сообщение
в это время GetMessage принимает кучу новых
GetMessage не принимает, а выбирает сообщения из очереди

Цитата:
Сообщение от groverx Посмотреть сообщение
и передает на DefWindowProc?
Не передает. DispatchMessage отправляет в оконную функцию, а там надо вызывать DefWindowProc.

Цитата:
Сообщение от groverx Посмотреть сообщение
Что такое луп сообщений?
Код:
    while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0)
    { 
        if (bRet == -1)
        {
            // handle the error and possibly exit
        }
        else
        {
            TranslateMessage(&msg); 
            DispatchMessage(&msg); 
        }
    }
Например.

Цитата:
Сообщение от groverx Посмотреть сообщение
Процедура окна вызывается, если я правильно понял, по команде DispatchMessage, или не так?
Не команде, а функции. В общем случае нет. Она отправляет его внутрь системы, а там уже завется функция. Вы же видели в описании функции CALLBACK?

Может стоит что-то по устройству винды и винапи почитать прежде, чем лезть?
p51x вне форума Ответить с цитированием
Старый 18.11.2023, 15:14   #34
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,772
По умолчанию

Цитата:
Хорошо, а где тогда искать в сообщении время и координаты?
Какие время и координаты?
p51x вне форума Ответить с цитированием
Старый 19.11.2023, 04:49   #35
groverx
Пользователь
 
Регистрация: 08.11.2023
Сообщений: 24
По умолчанию

MSGSTRUCT STRUC
MSHWND DD ?
MSMESSAGE DD ?
MSWPARAM DD ?
MSLPARAM DD ?
MSTIME DD ? -время
MSPT DD ? -координаты
MSGSTRUCT ENDS
groverx вне форума Ответить с цитированием
Старый 19.11.2023, 09:58   #36
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,357
По умолчанию

Если хотите чего-то добиться, настоятельно рекомендую научиться читать документацию.
https://learn.microsoft.com/en-us/wi...getmessagetime
waleri вне форума Ответить с цитированием
Старый 19.11.2023, 10:08   #37
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,772
По умолчанию

Цитата:
Сообщение от groverx Посмотреть сообщение
MSTIME DD ? -время
MSPT DD ? -координаты
Зачем они вам? Есть GetMessageTime и GetMessagePos.
p51x вне форума Ответить с цитированием
Старый 19.11.2023, 12:02   #38
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Цитата:
Сообщение от groverx Посмотреть сообщение
пока моя процедура окна обрабатывает каое-то сообщение, в это время GetMessage принимает кучу новых,
GetMessage() сбрасывает мессагу сюда:
Код:
struct MSG 
   hwnd     dd  0   ; дескриптор окна, которому адресовано сообщение
   uMsg     dd  0   ; код сообщения WM_xx
   wParam   dd  0   ; основной параметр сообщения (зависит от кода) 
   lParam   dd  0   ; доп.параметр сообщения (опционально)
   time     dd  0   ; время, когда сообщение было помещено в очередь 
   pt       POINT   ; вложенная структура, с позицией курсора мыши в момент сообщения
ends
..а через DispatchMessage() в оконную процедуру попадают только первые 4-дворда:
Код:
LRESULT CALLBACK WindowProc(
__in  HWND    hwnd,    // дескриптор окна
__in  UINT    uMsg,    // код сообщения
__in  WPARAM  wParam,  // параметр(1) сообщения
__in  LPARAM  lParam   // параметр(2) сообщения
);
Если нужны время + позиция,
внутри этой процедуры можно читать их напрямую из структуры MSG, чем собственно и занимается GetMessageTime(). У каждого треда процесса своя очередь сообщений, поэтому после инициализации окна UpdateWindow(), функции GetMessage() нечего будет выбирать из очереди, пока в окно не поступят внешние раздражители типа: нажатие кнопки, клик мышью, и прочее.
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 09.12.2023, 08:58   #39
groverx
Пользователь
 
Регистрация: 08.11.2023
Сообщений: 24
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Зачем они вам? Есть GetMessageTime и GetMessagePos.
тогдп вопрос на засыпку - нафига создавать структтуру сообщения, если один хген - её не используешь?
groverx вне форума Ответить с цитированием
Старый 09.12.2023, 09:03   #40
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,772
По умолчанию

В смысле не используешь? WindowProc забирает параметры, как минимум. А реагировать на время и позицию из нее особого смысла не имеет. Да и винда не система реального времени.
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос от новичка Валерий718 Помощь студентам 4 23.10.2013 19:28
Вопрос новичка geranton Общие вопросы Delphi 2 23.03.2012 14:00
Вопрос новичка vaultboy2010 Общие вопросы C/C++ 3 02.10.2011 01:51
Создание функции вопрос от новичка C CKent Общие вопросы C/C++ 2 07.12.2008 17:31