【问题标题】:WTL: To process certain commands in certain command handlersWTL:在某些命令处理程序中处理某些命令
【发布时间】:2012-03-08 16:43:49
【问题描述】:

我是 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

【问题讨论】:

    标签: windows visual-c++ wtl


    【解决方案1】:

    来自COMMAND_HANDLER

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

    WTL 调用处理程序,只要它们都没有表示它们处理了消息。 如果处理程序没有将 bHandled 显式设置为 FALSE,WTL 将不会将消息传递给下一个处理程序。

    【讨论】:

    • 据我所知,bHandled 默认设置为true。所以,我唯一需要做的就是在OnMenuClickOnMenuClick 中将它设置为ID_START_TASK 命令,对吗?
    • 是的。养成将其设置为 FALSE 的习惯并仅在必须确保没有其他处理程序处理它时才将其设置为 TRUE 可能是一个好主意。
    猜你喜欢
    • 2021-09-09
    • 1970-01-01
    • 2014-02-09
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 2021-08-01
    • 1970-01-01
    • 2022-11-18
    相关资源
    最近更新 更多