【问题标题】:WTL: Message loop for buttonWTL:按钮的消息循环
【发布时间】:2011-12-04 18:03:06
【问题描述】:

我有一些关于这段代码的类,我们称之为 ToolbarButton

TBBUTTON tbbutton;
ZeroMemory(&tbbutton, sizeof(tbbutton));  
tbbutton.idCommand = index;
tbbutton.dwData = 0;
tbbutton.fsState = TBSTATE_ENABLED | BSTYLE_BUTTON | BTNS_SHOWTEXT;
tbbutton.iBitmap = I_IMAGENONE;
tbbutton.iString = toolbar->AddStrings(text);

toolbar->InsertButton(index, &tbbutton);

其中工具栏是 CToolBarCtrl*

如何为 ToolbarButton 类创建消息循环?

类似

class ToolbarButton : public CMessageMap{
  ..
  BEGIN_MSG_MAP(ToolbarButton )
    MESSAGE_HANDLER(WM_COMMAND, OnClick)
  END_MSG_MAP()

  ..
}

OnClick 没有调用,我该怎么办?

更新:我还考虑了答案的变体-工具栏处理单击消息,通过 idCommand 查找按钮并调用已创建按钮的 OnClick。 .. 但是我有一个代码,我正在重构并看到按钮类(正确的~大约 4 个接口和按钮周围的 15 个类)执行我需要的这种语法糖,但它们也包含过时的代码和我想要的代码消除,目前我无法切片它

【问题讨论】:

    标签: winapi atl wtl


    【解决方案1】:

    它应该以某种不同的方式工作。

    • 您不是从消息映射类继承的,通常窗口类具有消息映射
    • 工具栏按钮不是窗口;工具栏是窗口控件,按钮是它的内部部分,没有单独的句柄,没有消息映射;您将按钮点击作为来自工具栏的通知处理,带有特定的按钮标识符
    • 如果您想将自定义按钮放在工具栏上,它应该是 (a) 自定义按钮,例如所有者绘制的,在工具栏控件本身支持的范围内,或者 (b) 功能齐全的窗口控件李>

    我建议您查看Using Toolbar Controls 以了解您的实际选择。

    【讨论】:

    • 您能否具体说明您将使用此自定义工具栏按钮实现什么目标?
    猜你喜欢
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    相关资源
    最近更新 更多