首页 > 编程语言 > 详细

Windows 程序设计(4)MFC-02 Button

时间:2020-06-12 23:43:53      阅读:73      评论:0      收藏:0      [点我收藏+]

1. Button 按钮控件

1.1、按钮控件的基本使用

新建对话框工程,拖拽按钮控件,添加点击事件响应函数!

a、双击模版进行添加;

b、事件方式进行添加;

button的常见事件类型
技术分享图片

void CMFCTestDlg::OnBnClickedButton1()
{
	// TODO: 在此添加控件通知处理程序代码
	MessageBox(_T("1111"));
}
void CMFCTestDlg::OnBnClickedButton2()
{
	// TODO: 在此添加控件通知处理程序代码
	MessageBox(_T("1111"));
}

两种方式本质是一样的

按钮的消息类型

1.2、删除按钮的点击响应函数

一共要删除3个地方:

a、h头文件中的函数声明

public:
	afx_msg void OnBnClickedButton2();

b、cpp文件中的函数定义;

void CMFCTestDlg::OnBnClickedButton2()
{
	MessageBox(_T("1111"));
}

c、cpp文件中的ON_BN_CLICKED宏绑定代码。

ON_BN_CLICKED(IDC_BUTTON2, &CMFCTestDlg::OnBnClickedButton2)

1.3、按钮控件属性

属性 含义
Default Button True,按下回车键,相应该按钮的处理函数
Visable False ,在资源对话框存在,但是不能显示
Caption 标题
Flat 平滑
Disabled false 启用 true 禁用
ID 按钮的ID,可以通过ID得到该按钮

1.4、控件的启用与禁用

void CMFCTestDlg::OnBnClickedButton3()
{
	// 启用和禁用登录按钮
	//1.获取按钮句柄
	HWND hBtn = ::GetDlgItem(m_hWnd, IDC_BUTTON2);
	//2.获取当前按钮的指针
	CWnd*login = GetDlgItem(IDC_BUTTON2);

	if (hBtn == NULL)
	{
		return;
	}

	// 2.判断该按钮是否启用
	if (GetDlgItem(IDC_BUTTON2)->IsWindowEnabled()) 
	{
		::EnableWindow(hBtn, FALSE);
	}
	else
	{
		 login->EnableWindow(TRUE);
	}
	//GetDlgItem 是MFC中的函数
	//::GetDlgItem SDK 全局的API
}

1.5、绑定控件类型变量

刚刚我们想对按钮控件启用或者禁用之前必须先获得按钮控件的窗口句柄,也就是说如果以后要对这个按钮控件进行任何操作,都得先获取他的窗口句柄,之后才能操作,也就是都得调用这句话:HWND hBtn = ::GetDlgItem(m_hWnd, IDC_BTN_1); 比较麻烦

简单的方式:就是绑定控件类型变量

MFCTestDlg.h
public:
	CButton m_loginBtn;
------------------------------------------------------------------------------------------ void CMFCTestDlg::OnBnClickedButton3()
{
	// 判断该按钮是否启用
	if (m_loginBtn.IsWindowEnabled()) 
	{
		//禁用
		m_loginBtn.EnableWindow(FALSE);
	}
	else
	{
		//启用
		m_loginBtn.EnableWindow(TRUE);
	}
}

1.6、控件的美化

微软也提供给我们控件的美化接口,那就是自绘,就是自己完全重新绘制控件的样子。其实控件的重绘是件非常麻烦的事情,类似按钮的倒还好,如果是类似列表控件那就更麻烦了。

我们可以在 codeproject 上面找开源的控件类,一般这些开源的控件类都是基于MFC中已有的各种控件的类,比如按钮的就是 CButton 的派生类,美化后的按钮效果如图:

下载源码:

1》.h文件和.cpp文件,导入工程 CCoolButton

2》右键添加 现有项

3》stdafx.h 可以手动添加,也可以在某个文件,修改预编译头

4》CButton m_loginBtn ==》改为CCoolButton m_loginBtn

2. 单选框与复选框控件

2.1、单选框控件的基本使用:

技术分享图片
a、要求一组内的单选框按钮控件ID必须由小到大排列,中间不能夹杂其他组的单选框按钮;
b、若有多组,则组内第一个单选框按钮的Group属性为True,其他为False;
c、选中组内某个单选框按钮:CheckRadioButton(IDC_RADIO1, IDC_RADIO3, IDC_RADIO2);
d、获得当前当前选中的单选框按钮控件:int nCheckId = GetCheckedRadioButton(IDC_RADIO1, IDC_RADIO3);
技术分享图片

1. 选中按钮

     //选中方式一
	CButton*radio1 = (CButton*)GetDlgItem(IDC_RADIO1);
	radio1->SetCheck(BST_CHECKED);

	//选中方式二,选中某一组内某个按钮
	CheckRadioButton(IDC_RADIO1, IDC_RADIO3, IDC_RADIO2);

2. 获得当前当前选中的单选框按钮控件

int nCheckId = GetCheckedRadioButton(IDC_RADIO1, IDC_RADIO3);
CString t;
t.Format(_T("%d"), nCheckId);
MessageBox(t); //整数转换为LPCTSTR

备注:Resouce.h定义的宏可以随便该,只有不重复就行

#define IDM_ABOUTBOX                    0x0010
#define IDD_ABOUTBOX                    100
#define IDS_ABOUTBOX                    101
#define IDD_MFCTEST_DIALOG              102
#define IDR_MAINFRAME                   128
#define IDC_BUTTON1                     1000
#define IDC_BUTTON2                     1001
#define IDC_BUTTON3                     1002
#define IDC_RADIO1                      1003
#define IDC_RADIO2                      1004
#define IDC_RADIO3                      1005
#define IDC_RADIO4                      1006
#define IDC_RADIO5                      1007

2.2、复选框控件的基本使用

技术分享图片

a、勾选复选框控件:

::SendMessage(::GetDlgItem(m_hWnd, IDC_CHECK1), BM_SETCHECK, BST_CHECKED, 0);
GetDlgItem(IDC_CHECK1)->SendMessage(BM_SETCHECK, BST_CHECKED, 0);
m_Check.SetCheck(BST_CHECKED);

三种方法任意一种都可以!

备注:取消勾选的话只需要把 BST_CHECKED 改成 BST_UNCHECKED 就可以了!

b、获取复选框的勾选状态:

UINT nCheckState = ::SendMessage(::GetDlgItem(m_hWnd, IDC_CHECK1), BM_GETCHECK, 0, 0);
nCheckState = GetDlgItem(IDC_CHECK1)->SendMessage(BM_GETCHECK, 0, 0);
nCheckState = m_Check.GetCheck();

三种方法任意一种都可以!

如果返回值 nCheckState 的值为 BST_CHECKED,那么就是勾选状态。如果值为 BST_UNCHECKED,那么就是非勾选状态。

Windows 程序设计(4)MFC-02 Button

原文:https://www.cnblogs.com/chance0x1/p/13110857.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!