Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Уроки по Visual C++ (MFC, платформа .NET)


Информационный Канал Subscribe.Ru

Уроки по Visual C++.NET. Рассылки сайта progs.biz
Рассылка № 79
 
Начало > Visual C++.NET > MFC > Урок 31

С. Гайдуков. OpenGL. Профессиональное программирование трехмерной графики на C++.
С. Гайдуков. OpenGL. Профессиональное программирование трехмерной графики на C++
Заказать на Озоне

Подробнее


Полные версии уроков (с картинками): урок 31.

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) в классе документа.

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

Рассылки сайта progs.biz
Visual C++, MFC
C# и .NET
VB.NET
Win API
C/C++
Delphi
Java
HTML, PHP, mySQL, WEB-дизайн
Flash MX new!
C++ Builder
Ассемблер
SQL Server
DirectX
Обзор книг
Обзор программ
Новости сайта progs.biz


PARKING.RU. Качественный ВИРТУАЛЬНЫЙ ХОСТИНГ на платформе Windows(r): поддержка NET, многофункциональная панель управления, аренда бизнес-приложений, сертифицированные специалисты. Управляемый ВЫДЕЛЕННЫЙ ХОСТИНГ на платформе Windows(r): производительные серверы, профессиональная поддержка, аренда ПО Microsoft(r), безопасность, гарантии. http://www.parking.ru


Копирование любых материалов сайта без разрешения авторов и владельцев сайта запрещено.
© 2002-2004 сайт progs.biz
© 2002-2004 Алексеев Игорь

http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.lessonsfromai
Отписаться

В избранное