WTL:在某些命令处理程序中处理某些命令

发布于 2025-01-06 16:48:55 字数 562 浏览 0 评论 0原文

我是WTL的新人。

我正在从事的项目的类之一是 WTL GUI 类。它的消息映射包含一条记录:

COMMAND_CODE_HANDLER(0, OnMenuClick)

OnMenuClick 处理菜单单击后发送的所有WM_COMMAND。有没有办法为某些特定消息设置另一个命令处理程序,而 OnMenuClick 处理所有其他消息?

我尝试了这个:

COMMAND_ID_HANDLER(ID_START_TASK, OnStartTask);
COMMAND_CODE_HANDLER(0, OnMenuClick)

它有效,OnStartTask处理ID_START_TASK命令,但它取决于声明顺序。如果我更改字符串声明顺序,OnMenuClick 会处理 ID_START_TASK 命令。

我使用VS 2008 + WTL 8.0

I'm a new in WTL.

One of the classes of a project I'm working on is WTL GUI class. Its message map contains a record:

COMMAND_CODE_HANDLER(0, OnMenuClick)

OnMenuClick handles all WM_COMMAND's are sent after menu click. Is there way to set another command handlers for some certain messages, while OnMenuClick processes all other ones?

I tried this:

COMMAND_ID_HANDLER(ID_START_TASK, OnStartTask);
COMMAND_CODE_HANDLER(0, OnMenuClick)

It works, OnStartTask processes ID_START_TASK commands, but it depends on declaration order. If i change the strings declaration order, OnMenuClick processes ID_START_TASK commands.

I use VS 2008 + WTL 8.0

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

南城旧梦 2025-01-13 16:48:55

来自COMMAND_HANDLER

在调用 CommandHandler 之前,消息映射将 bHandled 设置为 TRUE。
如果 CommandHandler 没有完全处理该消息,则应该设置
b处理为FALSE,表示消息需要进一步处理。

只要处理程序没有发出已处理消息的信号,WTL 就会调用处理程序。
如果处理程序没有显式地将 bHandled 设置为 FALSE,WTL 将不会将消息传递给下一个处理程序。

From COMMAND_HANDLER:

The message map sets bHandled to TRUE before CommandHandler is called.
If CommandHandler does not fully handle the message, it should set
bHandled to FALSE to indicate the message needs further processing.

WTL calls handlers as long as none of them signalled that they handled the message.
If the handler doesn't explicitly set bHandled to FALSE, WTL will not pass the message to the next handler.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文