WTL:按钮的消息循环

时间:2011-10-10 18:39:51

标签: winapi atl wtl

我有一些关于这段代码的课程,我们称之为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 of established按钮。 ..但我有一个代码,我正在重构,看到按钮类(正确〜约4个接口和15个类左右的按钮),我需要的语法糖,但它们包含我想要的过时的代码和代码消除,目前我无法切片

1 个答案:

答案 0 :(得分:1)

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

  • 您不会从消息映射类继承,通常窗口类具有消息映射
  • 工具栏按钮不是窗口;工具栏是窗口控件,按钮是其内部部分,没有单独的句柄,没有消息映射;您可以通过具有特定按钮标识符的工具栏处理按钮单击作为通知
  • 如果你想在工具栏上放一个自定义按钮,它应该是(a)自定义按钮,例如所有者绘制的,最多可由工具栏控件本身支持,或者(b)一个功能齐全的窗口控件

我建议你检查Using Toolbar Controls你的选项到底是什么。