Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 июня!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Давно заметил, что всё-таки языки С/C++ это не самый лучший вариант программирования под Windows. Сейчас появилась масса более современных и удобных языков, например тот же Python - кроссплатформенный язык, очень легок в изучение. Я его изучил буквально за несколько дней по этому курсу - ссылка. Автор постарался, там видеоуроки на удивление легкие и понятные.

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

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

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

<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS