Здорова ребятки!
Сегодня разберем такой элемент управления как радиокнопки, это элемент выбора используется в диалоговых окнах для выбора какого нить значения и передачи его в программу, то есть для настройки программы. Я не буду сильно объяснять что да как, потому что сам не знаю, а просто создадим программку в которой будет пункт Menu а в нем подпункт Dialog… по клике на котором будет всплывать диалоговое окно выбора в котором будут эти радио-кнопки выбра.
Приступим к созданию приложения, создайте простейшее приложение МФС с поддержкой документ/вид. Теперь идем в Окно ресурсов, кликаем правой клавишей мышки над папкой Dialog и выбираем добавить диалог
Появится новый диалог с идентификатором IDD_DIALOG1 , добавьте в него элементы управления в такой последовательности, сначала Group Boxs, а затем добавьте 8 Radio Button , назовите их 1,2,3,4,5,6,7,8
В свойствах каждая кнопка имеет свой идентификатор от IDC_RADIO1 до IDC_RADIO8
Переходим к добавлению класса для диалогового окна, для этого кликнем правой клавишей мышки по диалогу и выберем пункт добавить класс появится окно мастера добавления классов, выставите такие настройки как на рисунке ниже
нажмите кнопку готово и у вас появится два класса
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#pragma once // диалоговое окно CRadioButtonDialog class CRadioButtonDialog : public CDialog { DECLARE_DYNAMIC(CRadioButtonDialog) public: CRadioButtonDialog(CWnd* pParent = NULL); // стандартный конструктор virtual ~CRadioButtonDialog(); // Данные диалогового окна enum { IDD = IDD_DIALOG1 }; protected: virtual void DoDataExchange(CDataExchange* pDX); // поддержка DDX/DDV DECLARE_MESSAGE_MAP() }; |
hide=»RadioButtonDialog.cpp» show=»RadioButtonDialog.cpp»]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
// RadioButtonDialog.cpp: файл реализации // #include "stdafx.h" #include "test4.h" #include "RadioButtonDialog.h" #include "afxdialogex.h" // диалоговое окно CRadioButtonDialog IMPLEMENT_DYNAMIC(CRadioButtonDialog, CDialog) CRadioButtonDialog::CRadioButtonDialog(CWnd* pParent /*=NULL*/) : CDialog(CRadioButtonDialog::IDD, pParent) { } CRadioButtonDialog::~CRadioButtonDialog() { } void CRadioButtonDialog::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CRadioButtonDialog, CDialog) END_MESSAGE_MAP() // обработчики сообщений CRadioButtonDialog |
Добавим в наш класс CRadioButtonDialog переменную типа int m_data эта переменная будет открытая, не Control
Для инициализации диалога мы должны переопределить функцию OnInitDialog класса CRadioButtonDialog
и добавьте в нее код инициализации
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
BOOL CRadioButtonDialog::OnInitDialog() { CDialog::OnInitDialog(); //поменить переключатель соответствующий текущему значению m_data switch(m_data) { case 1: CheckDlgButton(IDC_RADIO1,1); break; case 2: CheckDlgButton(IDC_RADIO2,1); break; case 3: CheckDlgButton(IDC_RADIO3,1); break; case 4: CheckDlgButton(IDC_RADIO4,1); break; case 5: CheckDlgButton(IDC_RADIO5,1); break; case 6: CheckDlgButton(IDC_RADIO6,1); break; case 7: CheckDlgButton(IDC_RADIO7,1); break; case 8: CheckDlgButton(IDC_RADIO8,1); break; } return TRUE; // return TRUE unless you set the focus to a control // Исключение: страница свойств OCX должна возвращать значение FALSE } |
После отображения диалогового окна при каждом щелчке на одном из переключателей создается приложение и передается приложению. Чтобы работать с этими сообщениями добавим обработчики в класс CRadioButtonDialog, для этого щелкните правой кнопкой мышки на каждом из переключателей и выберите в контекстном меню «добавить обработчик событий», чтобы создать обработчик сообщения для BN_CLICKED.
Так создайте 8 обработчиков, дальше и добавьте в них код
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
void CRadioButtonDialog::OnBnClickedRadio1() { m_data=1; } void CRadioButtonDialog::OnBnClickedRadio2() { m_data=2; } void CRadioButtonDialog::OnBnClickedRadio3() { m_data=3; } void CRadioButtonDialog::OnBnClickedRadio4() { m_data=4; } void CRadioButtonDialog::OnBnClickedRadio5() { m_data=5; } void CRadioButtonDialog::OnBnClickedRadio6() { m_data=6; } void CRadioButtonDialog::OnBnClickedRadio7() { m_data=7; } void CRadioButtonDialog::OnBnClickedRadio8() { m_data=8; } |
Добавим пункт Menu и подпункт Dialog в нашу программу для этого зайдем в окно ресурсов выберем папку Menu и в ней меню с идентификатором IDR_test4TYPE и туда добавим новый пункт меню и подпункт.
и добавим к этому пункту меню обработчик кликнул по нему правой клавишей мышки и выбрав пункт добавить обработчик событий…
Появится мастер обработчика событий, выберите в нем такие настройки как на рисунке ниже, мы добавляем этот обработчик к классу вида
Кликните по кнопке Добавить/Править все у нас появился обработчик OnMenuDialog, добавим в него код для отображения диалога
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
void Ctest4View::OnMenuDialog() { CRadioButtonDialog aDlg; //Установить переменную m_data в диалоговом окне //в значение хранимое в виде aDlg.m_data=n; //Отобразить диалоговое окно в модальном режиме //и при нажатии на кнопке ОК получить новое значение n if(aDlg.DoModal()==IDOK) { n=aDlg.m_data; } } |
Так же не забудьте подключить файл нашего класса диалога в файле вида и добавьте в класс вида закрытую переменную и инициализируйте ее единицей в конструкторе
Теперь осталось нам в функции OnDraw класса вида отобразить переменную n, естественно не забудьте ее добавить в класс вида и тип у нее int.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
void Ctest4View::OnDraw(CDC* pDC) { Ctest4Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; //рисуем текст CString str; str.Format(_T("Nomer - %d"),n); CSize textExetent=pDC->GetTextExtent(str); CRect rect(CPoint(100,100),textExetent);//описывающий прямоугольник pDC->DrawText(str,rect,DT_CENTER|DT_VCENTER| DT_SINGLELINE|DT_NOCLIP); } |
все компилируем и запускаем программу и при выборе пункта меню у нас появляется разные выводы переменно n в программе.
на этом все, если вам что не понятно пишите в комментариях, отвечу!
[youtube]https://www.youtube.com/watch?v=Pl6zwIaikeM[/youtube]