MFC入门基础(十一)控件编程示例

参考博客:VS2010/MFC编程入门之二十三(常用控件:按钮控件的编程实例)-软件开发-鸡啄米

以下内容主要来自于上述大神博客,稍作修改

1、首先还是新建一个mfc的应用程序(基于对话框的)

MFC入门基础(十一)控件编程示例_第1张图片

 MFC入门基础(十一)控件编程示例_第2张图片

2、删除掉对话框中原有的一些默认控件,然后再拖动两个 Group Box上来,更改Caption分别网站类型、网站,同时在类型中加入三个Radio Button,分别更改Caption为门户、论坛、博客,如下:ID分别设为IDC_PORTAL_RADIO、IDC_FORUM_RADIO和IDC_BLOG_RADIO。

MFC入门基础(十一)控件编程示例_第3张图片

 3、再拖动6个Check Box,Caption分别为:littlehero_121、“新浪”、“天涯论坛”、“韩寒博客”、“网易”和“凤凰网论坛”,然后为每个复选框添加CButton类型的变量m_check1、m_check2、m_check3、m_check4、m_check5和m_check6

MFC入门基础(十一)控件编程示例_第4张图片

 6、在拖动静态文本框和一个编辑框,静态文本框的Caption设为“选择的网页:编辑框的ID设为IDC_WEBSITE_SEL_EDIT,属性Read Only改为True,使此编辑框为只读状态,不允许用户编辑

(吐槽一下,可能是我还不知道怎么用,这个界面怎么对齐,qt里面的对齐还是挺好用的)

MFC入门基础(十一)控件编程示例_第5张图片

7、为“门户”、“论坛”和“博客”三个单选按钮分别添加点击消息的消息处理函数CExample23Dlg::OnBnClickedPortalRadio()、CExample23Dlg::OnBnClickedForumRadio()和CExample23Dlg::OnBnClickedBlogRadio()。  在某个单选按钮被点击之后,我们可以先将复选框都禁用且置为非选中状态,而后将选择的类型对应的复选框激活。为了代码复用,我们将置所有复选框为禁用且非选中状态的操作写到一个函数里,此函数为CExample23Dlg::InitAllCheckBoxStatus(),然后就可以在三个单选按钮的消息处理函数中调用InitAllCheckBoxStatus(),实现复选框状态的初始化

 具体实现函数如下:

void Ctest04Dlg::OnBnClickedPortalRadio()
{
	// TODO: 在此添加控件通知处理程序代码
	// 如果选择了“门户”单选按钮,则激活复选框“新浪”和“网易”,其他复选框禁用并非选中   
	InitAllCheckBoxStatus();   
	m_check2.EnableWindow(TRUE);   
	m_check5.EnableWindow(TRUE);
}


void Ctest04Dlg::OnBnClickedForumRadio()
{
	// TODO: 在此添加控件通知处理程序代码
	// 如果选择了“论坛”单选按钮,则激活复选框“天涯论坛”和“凤凰网论坛”,其他复选框禁用并非选中   
	InitAllCheckBoxStatus();   
	m_check3.EnableWindow(TRUE);   
	m_check6.EnableWindow(TRUE);  
}


void Ctest04Dlg::OnBnClickedBlogRadio()
{
	// TODO: 在此添加控件通知处理程序代码
	// 如果选择了“博客”单选按钮,则激活复选框“littlehero_121”和“韩寒博客”,其他复选框禁用并非选中   
	InitAllCheckBoxStatus();   
	m_check1.EnableWindow(TRUE);   
	m_check4.EnableWindow(TRUE);   
}

void Ctest04Dlg::InitAllCheckBoxStatus()
{
	// 全部禁用   
	m_check1.EnableWindow(FALSE);   
	m_check2.EnableWindow(FALSE);   
	m_check3.EnableWindow(FALSE);   
	m_check4.EnableWindow(FALSE);   
	m_check5.EnableWindow(FALSE);   
	m_check6.EnableWindow(FALSE);   

	// 全部非选中   
	m_check1.SetCheck(0);   
	m_check2.SetCheck(0);   
	m_check3.SetCheck(0);   
	m_check4.SetCheck(0);   
	m_check5.SetCheck(0);   
	m_check6.SetCheck(0);   

}

 8. 程序运行后,我们希望网站类型默认选择为“门户”,则修改对话框初始化函数CExample23Dlg::OnInitDialog()为:

BOOL Ctest04Dlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// 将“关于...”菜单项添加到系统菜单中。

	// IDM_ABOUTBOX 必须在系统命令范围内。
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		BOOL bNameValid;
		CString strAboutMenu;
		bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
		ASSERT(bNameValid);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
	//  执行此操作
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标

	// TODO: 在此添加额外的初始化代码
	// 默认选中“门户”单选按钮   
	CheckDlgButton(IDC_PORTAL_RADIO, 1);   
	OnBnClickedPortalRadio();   

	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

9、为确定和退出按钮添加事件,实现如下:

//确定
void Ctest04Dlg::OnBnClickedButton1()
{
	// TODO: 在此添加控件通知处理程序代码
	CString strWebsiteSel;         // 选择的网站   

	// 若选中“littlehero_121”则将其加入结果字符串   
	if (1 == m_check1.GetCheck())   
	{   
		strWebsiteSel += _T("littlehero_121 ");   
	}   
	// 若选中“新浪”则将其加入结果字符串   
	if (1 == m_check2.GetCheck())   
	{   
		strWebsiteSel += _T("新浪 ");   
	}   
	// 若选中“天涯论坛”则将其加入结果字符串   
	if (1 == m_check3.GetCheck())   
	{   
		strWebsiteSel += _T("天涯论坛 ");   
	}   
	// 若选中“韩寒博客”则将其加入结果字符串   
	if (1 == m_check4.GetCheck())   
	{   
		strWebsiteSel += _T("韩寒博客 ");   
	}   
	// 若选中“网易”则将其加入结果字符串   
	if (1 == m_check5.GetCheck())   
	{   
		strWebsiteSel += _T("网易 ");   
	}   
	// 若选中“凤凰网论坛”则将其加入结果字符串   
	if (1 == m_check6.GetCheck())   
	{   
		strWebsiteSel += _T("凤凰网论坛 ");   
	}   

	// 将结果字符串显示于“选择的网站”后的编辑框中   
	SetDlgItemText(IDC_WEBSITE_SEL_EDIT, strWebsiteSel); 
}
//退出
void Ctest04Dlg::OnBnClickedButton2()
{
	// TODO: 在此添加控件通知处理程序代码
	exit(0);
}

10、最终实现效果,如下:

MFC入门基础(十一)控件编程示例_第6张图片

 MFC入门基础(十一)控件编程示例_第7张图片

你可能感兴趣的:(MFC初学,mfc,c++)