【问题标题】:How could I create a custom windows message?如何创建自定义窗口消息?
【发布时间】:2008-11-16 09:30:44
【问题描述】:

我们的项目在 Windows CE 6.0 上运行,并且是用 C++ 编写的。我们的代码有一些问题,我们无法调试。我们还发现,如果在我们的应用程序中创建线程并尝试从中printf,输出将不会出现。将出现的唯一输出是来自主线程的输出。我想做以下事情:

  • 创建自定义窗口消息

  • 使用 WPARAM 我想在屏幕上显示的字符的地址

  • 使用 LPARAM 我想在屏幕上显示的字符*的长度

  • 发送消息

  • 当它出现时处理它,以便它打印 char*

如何创建自定义窗口消息? WPARAM 和 LPARAM 有哪些类型?有没有可能做我刚才写的?

谢谢

【问题讨论】:

  • 在这种情况下,MessageBox 不适合您?你在使用 MFC 吗?
  • 这不是一个选项。会有很多“字符串”

标签: c++ debugging windows-ce


【解决方案1】:

当然可以按照您的描述进行。您实际上不需要做任何事情来创建用于在应用程序中进行通信的自定义消息:只需确保发送消息的代码和接收消息的代码就消息编号的实际含义达成一致,然后使用消息不与 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 将指针传递给包含我所有参数的某种结构。

说了这么多,这听起来像是一种获取调试输出的复杂方法。您是否尝试过使用 OutputDebugString() API 调用?还是调试线程的 printf() 调用?

【讨论】:

猜你喜欢
  • 2011-04-21
  • 2013-02-04
  • 1970-01-01
  • 2011-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-30
相关资源
最近更新 更多