WTL: цикл сообщений для кнопки - PullRequest
0 голосов
/ 10 октября 2011

У меня есть некоторый класс вокруг этого кода, пусть он называется 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 классов вокруг кнопки), которые делают такой синтаксис сахар, что мне нужно, но также они содержат устаревший код и код, который я хочу устранить, и в настоящее время я не могу нарезать его

1 Ответ

1 голос
/ 10 октября 2011

Предполагается, что он будет работать несколько иначе.

  • вы не наследуете от класса карты сообщений, обычно у оконных классов есть карты сообщений
  • кнопка на панели инструментов не является окном; панель инструментов - оконный элемент управления, а кнопка - его внутренняя часть без отдельного дескриптора, без карты сообщений; вы обрабатываете нажатия кнопок как уведомления на панели инструментов с определенными идентификаторами кнопок
  • если вы хотите поместить пользовательскую кнопку на панель инструментов, это должна быть (а) настраиваемая кнопка, например, нарисованная владельцем, в пределах, поддерживаемых самим элементом управления панели инструментов, или (б) полнофункциональный оконный элемент управления

Я предлагаю вам проверить Использование элементов управления панели инструментов на предмет того, какие ваши параметры действительно есть.

...