Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите с вопросом с++

Cкрпрлесго Скрпрлесгов Ученик (31), на голосовании 4 месяца назад
Зачем нужны макросы LOWORD() и HIWORD()?
Голосование за лучший ответ
Norman Мастер (1468) 5 месяцев назад
Чтобы ты спросил, ладно,
Татьяна Просветленный (36384) 5 месяцев назад
В C++ макросы LOWORD и HIWORD используются для работы с 32-битными значениями, в которых содержатся два 16-битных значения. Эти макросы позволяют легко извлекать младшую и старшую 16-битные части из 32-битного значения.

LOWORD
Макрос LOWORD извлекает младшее 16-битное значение из 32-битного значения. Это полезно, когда вам нужно получить доступ к младшему слову (lower word) из двойного слова (double word).

Пример использования:
 #include  
#include

int main() {
DWORD value = 0x12345678;
WORD lowWord = LOWORD(value);
std::cout << "LOWORD: " << std::hex << lowWord << std::endl; // Output: 0x5678
return 0;
}
HIWORD
Макрос HIWORD извлекает старшее 16-битное значение из 32-битного значения. Это полезно, когда вам нужно получить доступ к старшему слову (higher word) из двойного слова.

Пример использования:
 #include  
#include

int main() {
DWORD value = 0x12345678;
WORD highWord = HIWORD(value);
std::cout << "HIWORD: " << std::hex << highWord << std::endl; // Output: 0x1234
return 0;
}
Применение макросов
Макросы LOWORD и HIWORD часто используются в Windows API для обработки параметров сообщений, таких как wParam и lParam, которые содержат различную информацию в своих старших и младших 16-битных частях. Например, при обработке сообщений о событиях клавиатуры или мыши, вам может понадобиться извлечь координаты курсора или идентификаторы клавиш, которые могут быть закодированы в таких 32-битных значениях.

Пример обработки сообщения:
 #include  
#include

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch (uMsg) {
case WM_MOUSEMOVE: {
int xPos = GET_X_LPARAM(lParam);
int yPos = GET_Y_LPARAM(lParam);
std::cout << "Mouse move: (" << xPos << ", " << yPos << ")" << std::endl;
return 0;
}
// другие обработчики сообщений...
}
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}

int main() {
// регистрация и создание окна, основной цикл и т.д.
return 0;
}
В этом примере используется макрос GET_X_LPARAM для извлечения координаты X из параметра lParam сообщения WM_MOUSEMOVE. Этот макрос аналогичен LOWORD и HIWORD, но специально предназначен для извлечения координат из параметра lParam.

Итак, LOWORD и HIWORD — это полезные инструменты для работы с 32-битными значениями, которые позволяют легко получать доступ к их младшим и старшим 16-битным частям.
Похожие вопросы