Здравствуйте!
Запнулся на казалось бы просто вещи — обычный обработчик onclick (или что-то типа того) для кнопки на toolbar'e.
Создал я в 2008-ой Visual Studio MFC-приложение. Состоящие из одного диалогового окна. Добавил в ресурсы ToolBar (на файл ресурса правой — Add -> New -> Resourse -> далее в списке выбрал ToolBar), в описании класса CDialog среди объявления всех моих кнопок и едитов вставил:
CToolBar ToolBar;
Потом в метод BOOL CstrrepDlg::OnInitDialog() вставил код создающий и показывающий ToolBar:
ToolBar.Create(this, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_TOOLTIPS |
CBRS_FLYBY | CBRS_BORDER_BOTTOM);
ToolBar.LoadToolBar(IDR_TOOLBAR1);
CRect rcClientStart;
CRect rcClientNow;
GetClientRect(rcClientStart);
RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST,
0, reposQuery, rcClientNow);
CPoint ptOffset(rcClientNow.left - rcClientStart.left,
rcClientNow.top - rcClientStart.top);
CRect rcChild;
CWnd* pwndChild = GetWindow(GW_CHILD);
while (pwndChild)
{
pwndChild->GetWindowRect(rcChild);
ScreenToClient(rcChild);
rcChild.OffsetRect(ptOffset);
pwndChild->MoveWindow(rcChild, FALSE);
pwndChild = pwndChild->GetNextWindow();
}
CRect rcWindow;
GetWindowRect(rcWindow);
rcWindow.right += rcClientStart.Width() - rcClientNow.Width();
rcWindow.bottom += rcClientStart.Height() - rcClientNow.Height();
MoveWindow(rcWindow, FALSE);
RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);
Нарисовал в редакторе ресурсов нужные кнопки (4 штуки). Когда ползал по всем меню нашёл для каждой кнопки ID (например, ID_BUTTON32771). Но вот никаких events нет для тулбара и его кнопок, никак не могу найти и в интернете как навешать на кнопку обработчик события — на нажатие.
Прочитал на каком-то сайте:
"Там есть кнопка с изображением желтой молнии (Events). Если на нее щелкнуть, откроется список — там ID стандартных командных сообщений MFC и ID пунктов меню из ресурсов.
А вот для тулбаров — нет. Однако, если в ресурсах в меню запихать пункт с ID как в тулбаре, в том списке этот же ID появится, и можно будет из этого списка добавлять обработчик.
Наверно было рассчитано, что все кнопки, которые есть на тулбаре обязательно должны быть в меню."
Но у меня и меню нет! Как быть? Подскажите, пожалуйста, как мне выполнить что-то типа а+b на нажатие кнопки в тулбаре?!
Большое спасибо.
Не пинайте за то что вопрос совсем чайниковый...
В описание класса диалога пробовал добавлять:
afx_msg void OnBnClickedID_BUTTON32771();
И в коде писать метод:
void CstrrepDlg::OnBnClickedID_BUTTON32771()
{
//здесь некий код для проверки
}
Метод-то объявлен, всё хорошо. Однако при исполнении он так никогда и не вызовется. ID_BUTTON32771 — это ID кнопки на тулбаре.
Помогите, пожалуйста!
Здравствуйте, Green Chest, Вы писали:
GC>В описание класса диалога пробовал добавлять:
GC>GC>afx_msg void OnBnClickedID_BUTTON32771();
GC>
GC>И в коде писать метод:
GC>GC>void CstrrepDlg::OnBnClickedID_BUTTON32771()
GC>{
GC> //здесь некий код для проверки
GC>}
GC>
GC>Метод-то объявлен, всё хорошо. Однако при исполнении он так никогда и не вызовется. ID_BUTTON32771 — это ID кнопки на тулбаре.
GC>Помогите, пожалуйста!
После этого в MESSAGE_MAP диалога нужно добавить
ON_COMMAND(ID_BUTTON32771, OnBnClickedID_BUTTON32771)