Winapi WTL:按钮的消息循环

Winapi WTL:按钮的消息循环,winapi,atl,wtl,Winapi,Atl,Wtl,我有一些关于这段代码的课程,让我们称之为工具栏按钮 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.

我有一些关于这段代码的课程,让我们称之为工具栏按钮

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。。但我有一段代码,我正在重构,看到button类(正确的说,button有4个接口和15个类),它们的语法满足了我的需要,但它们也包含过时的代码和我想消除的代码,目前我无法对其进行切片,它应该以不同的方式工作

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

我建议您检查一下您的选项到底是什么。

请指定使用此自定义工具栏按钮要实现的具体目标好吗?