2008-11-16 4 views
5

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

  • создать сообщение пользовательских окон

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

  • использования, как это LPARAM длина полукокса * Я хочу, чтобы показать на экране

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

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

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

Thanks

+0

MessageBox не работает для вас в этой ситуации? Вы используете MFC? – Klathzazt 2008-11-16 09:37:58

+0

Это не вариант. Там будет много «строк» ​​ – Geo 2008-11-16 09:45:22

ответ

5

Это, безусловно, возможно сделать то, что вы описали. Вам не нужно ничего делать, чтобы создать настраиваемое сообщение для связи внутри вашего приложения: просто убедитесь, что код, который отправляет сообщение и код, который получает сообщение, согласен с тем, что на самом деле есть номер сообщения, и используйте сообщение номер, который не перекрывается ни с одним из номеров, которые использует 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() потока?

Смежные вопросы