C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 Урок 31. Кнопка со списком на панели инструментов - добавление обработчика / Уроки C++ .NET / Visual C++ .NET

Visual C++.NET
Урок 31. Кнопка со списком на панели инструментов - добавление обработчика

На этом уроке мы добавим обработчик для созданной в прошлый раз кнопки со списком. Сделаем это, например, в классе CMainFrame - для этого скачала введиде в карту сообщений данного класса следующий код:

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
  ...
  ON_COMMAND(ID_CBBUTTON, OnButtonClick)
END_MESSAGE_MAP()

После чего создайте в классе CMainFrame саму функцию OnButtonClick. В созданной заготовке можно ничего не писать:

void CMainFrame::OnButtonClick()
{
  // TODO: Add your command handler code here
}

Если вы теперь запустите программу, то кнопка со стрелочкой не будет серой.

Теперь добавьте в проект новое меню Menu с двумя подпунктами - Item1 и Item2. Идентификтор меню оставьте без изменнения - IDR_MENU1. Именно это меню и будет выскакивать, когда вы нажмете на стрелочку рядом с кнопкой на панели инструментов.

После этого добавьте в карту сообщений класса CMainFrame макрос ON_NOTIFY:

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
  ...
  ON_NOTIFY(TBN_DROPDOWN, AFX_IDW_TOOLBAR, OnDropDown)
END_MESSAGE_MAP()

Надо теперь добавить функцию OnDropDown. Для заготовки функции в контекстном меню класса CMainFrame выбираем Add->Add Function, где и задаем необходимые переметры. Тело функции будет такое:

void CMainFrame::OnDropDown(NMHDR * pNotifyStruct, LRESULT * result)
{
  CWnd *pWnd;
  UINT nID;
  // Выясняем идентификатор шелкнутой кнопки.
  switch (((NMTOOLBAR*)pNotifyStruct)->iItem)
  {
  //Если это наша кнопка.
  case ID_CBBUTTON:
    pWnd = &m_wndToolBar;
    nID  = IDR_MENU1;
    break;
  default:
    return;
  }
  // Создание меню.
  CMenu menu;
  menu.LoadMenu(nID);
  CMenu* pPopup = menu.GetSubMenu(0);
  ASSERT(pPopup);
  CRect rc;
  pWnd->SendMessage(TB_GETRECT, ((NMTOOLBAR*)pNotifyStruct)->iItem, (LPARAM)&rc);
  pWnd->ClientToScreen(&rc);
  //Показываем меню.
  pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_VERTICAL,
    rc.left, rc.bottom, this, &rc);
}

Теперь при запуске программы мы сможем нажать на нашу кнопку (при этом ничего происходить не будет) и на стрелочку рядом с кнопкой - при этом появится меню с 2-я серыми пунктами Item1 и Item2. Почти все сделали. Осталась мелочь - добавить обработчик для пунктов меню. Например, добавим обработчик для меню Item1 (его идентификатор ID_MENU_ITEM1) в классе документа.

Компилируем и запускаем программу. Наша кнопка будет выглядеть так:

Кнопка со стрелочкой.