MFC – радио кнопки Radio Batton

Рубрика: MFC, Дата: 13 December, 2014, Автор:

Здорова ребятки!

Сегодня разберем такой элемент управления как радиокнопки, это элемент выбора используется в диалоговых окнах для выбора какого нить значения и передачи его в программу, то есть для настройки программы. Я не буду сильно объяснять что да как, потому что сам не знаю, а просто создадим программку в которой будет пункт Menu а в нем подпункт Dialog… по клике на котором будет всплывать диалоговое окно выбора в котором будут эти радио-кнопки выбра.

Приступим к созданию приложения, создайте простейшее приложение МФС с поддержкой документ/вид. Теперь идем в Окно ресурсов, кликаем правой клавишей мышки над папкой Dialog и выбираем добавить диалог

mfc add dialogПоявится новый диалог с идентификатором IDD_DIALOG1 , добавьте в него элементы управления в такой последовательности, сначала Group Boxs, а затем добавьте 8 Radio Button , назовите их 1,2,3,4,5,6,7,8

mfc radio buttonВ свойствах каждая кнопка имеет свой идентификатор от IDC_RADIO1 до IDC_RADIO8

Переходим к добавлению класса для диалогового окна, для этого кликнем правой клавишей мышки по диалогу и выберем пункт добавить класс появится окно мастера добавления классов, выставите такие настройки как на рисунке ниже

mfc radiobuttondialogнажмите кнопку готово и у вас появится два класса

RadioButtonDialog.h »

#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”]

// 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

mfc OnInitDialogи добавьте в нее код инициализации

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.

mfc bn_klickedТак создайте 8 обработчиков, дальше и добавьте в них код

код обработчиков BN_CLICKED »


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 и туда добавим новый пункт меню и подпункт.

mfc menuи добавим к этому пункту меню обработчик кликнул по нему правой клавишей мышки и выбрав пункт добавить обработчик событий…

mfc add handlerПоявится мастер обработчика событий, выберите в нем такие настройки как на рисунке ниже, мы добавляем этот обработчик к классу вида

mfc wizordКликните по кнопке Добавить/Править все у нас появился обработчик OnMenuDialog, добавим в него код для отображения диалога

void Ctest4View::OnMenuDialog()
{
	CRadioButtonDialog aDlg;

	//Установить переменную m_data в диалоговом окне 
	//в значение хранимое в виде
	aDlg.m_data=n;

	//Отобразить диалоговое окно в модальном режиме
	//и при нажатии на кнопке ОК получить новое значение n
	if(aDlg.DoModal()==IDOK)
	{
		n=aDlg.m_data;
	}
}

Так же не забудьте подключить файл нашего класса диалога в файле вида и добавьте в класс вида закрытую переменную и инициализируйте ее единицей в конструкторе

Теперь осталось нам в функции OnDraw класса вида отобразить переменную n, естественно не забудьте ее добавить в класс вида и тип у нее int.

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 в программе.

mfc applicationна этом все, если вам что не понятно пишите в комментариях, отвечу!

 

[youtube]https://www.youtube.com/watch?v=Pl6zwIaikeM[/youtube]

 

Комментарии:


Оставить комментарий

Your email address will not be published. Required fields are marked *