Как я могу создать собственное сообщение Windows? - PullRequest
5 голосов
/ 16 ноября 2008

Наш проект работает на Windows CE 6.0 и написан на C ++. У нас есть некоторые проблемы с кодом, и мы не можем отладить. Мы также выяснили, что если в нашем приложении мы создаем потоки и пытаемся printf из них, вывод не появится. Единственный вывод, который появится, это выход из основного потока. Я хотел бы сделать следующее:

  • создать собственное сообщение Windows

  • использовать в качестве WPARAM адрес символа * Я хочу показать на экране

  • используйте в качестве LPARAM длину символа * Я хочу показать на экране

  • отправить сообщение

  • обработайте его, когда он придет, чтобы он напечатал символ *

Как я могу создать собственное сообщение Windows? Какие бывают типы WPARAM и LPARAM? Можно ли сделать то, что я только что написал?

Спасибо

1 Ответ

5 голосов
/ 16 ноября 2008

Конечно, можно делать то, что вы описываете. На самом деле вам не нужно ничего делать для создания настраиваемого сообщения для связи в вашем приложении: просто убедитесь, что код, который отправляет сообщение, и код, который получает сообщение, согласуются с тем, что на самом деле является номером сообщения, и используйте сообщение число, которое не совпадает ни с одним из номеров, используемых Windows. Существует функция RegisterWindowMessage (), но она необходима только для получения номера сообщения, уникального для всей операционной системы, поэтому используется для межпроцессного взаимодействия.

Самый простой способ добиться этого - просто иметь где-нибудь заголовочный файл, содержащий ваши собственные номера сообщений, начиная с WM_USER и нумерации вверх, например:

#define WM_FIRST_CUSTOM_MSG (WM_USER+0)
#define WM_SECOND_CUSTOM_MSG (WM_USER+1)

Типы WPARAM и LPARAM определяются, когда вы включаете "windows.h", поэтому могут иметь разные типы в разных системах. Для 32-разрядных операционных систем они обычно являются 32-разрядными целыми числами. Если вы просто используете сообщение в целях тестирования, этого обычно достаточно, и вы можете вставить туда все, что захотите. Однако для производственного кода вы должны быть более осторожны: WPARAM действительно для данных типа «целое число», а LPARAM для данных типа «указатель». Например, в Win64 LPARAM достаточно длинный, чтобы содержать 64-разрядный указатель, а WPARAM содержит только 32-разрядное целое число. Для передачи большего количества данных, чем просто целое число и указатель, я бы использовал lParam для передачи указателя на какую-то структуру, содержащую все мои аргументы.

Сказав все это, это звучит как сложный способ получения отладочной информации. Вы пытались использовать API-интерфейс OutputDebugString ()? Или отладка вызова потока printf ()?

...