Re[2]: Обработчик события на нажатие на кнопку ToolBar'а
От: Аноним  
Дата: 27.09.09 10:20
Оценка: 3 (1)
Здравствуйте, 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)
Обработчик события на нажатие на кнопку ToolBar'а
От: Green Chest Россия  
Дата: 27.09.09 07:24
Оценка:
Здравствуйте!

Запнулся на казалось бы просто вещи — обычный обработчик 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 на нажатие кнопки в тулбаре?!

Большое спасибо.
Не пинайте за то что вопрос совсем чайниковый...
mfc toolbar button обработчик события onclick
Re: Обработчик события на нажатие на кнопку ToolBar'а
От: Green Chest Россия  
Дата: 27.09.09 09:50
Оценка:
В описание класса диалога пробовал добавлять:

afx_msg void OnBnClickedID_BUTTON32771();


И в коде писать метод:

void CstrrepDlg::OnBnClickedID_BUTTON32771()
{
    //здесь некий код для проверки
}


Метод-то объявлен, всё хорошо. Однако при исполнении он так никогда и не вызовется. ID_BUTTON32771 — это ID кнопки на тулбаре.
Помогите, пожалуйста!
Re[3]: Обработчик события на нажатие на кнопку ToolBar'а
От: Green Chest Россия  
Дата: 27.09.09 10:23
Оценка:
А>После этого в MESSAGE_MAP диалога нужно добавить
А>ON_COMMAND(ID_BUTTON32771, OnBnClickedID_BUTTON32771)
Спасибо большое тебе!
Спасибо, спасибо!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.