MFC 列表,日历,及动画控件

本文详细介绍如何使用MFC创建基于对话框的应用程序,包括列表控件的设置、日历控件的添加及动画控件的集成。通过具体实例演示各项功能的实现步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

新建基于对话框的应用程序。

1.列表控件

新建一个列表控件,属性改为报表(report),在列表控件下建两个静态文本框,用来显示选中的项。为列表控件添加一个变量m_list;

在头文件中添加一个pubilic图像列表控件

	// 图像控件
	CImageList m_imageList;


在初始化区域中编写代码

	// TODO:  在此添加额外的初始化代码

	srand(time(NULL));
	CString title[3] = { L"性别", L"年龄", L"名字" };
	// 插入标题
	for (int i = 0; i < 3; i++){
		m_list.InsertColumn(i, title[i], LVCFMT_CENTER);
	}
	// 设置标题宽度
	m_list.SetColumnWidth(0, 70);
	m_list.SetColumnWidth(1, 50);
	m_list.SetColumnWidth(2, 80);
	// 设置列表风格
	m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
	// 设置颜色
	m_list.SetBkColor(RGB(255, 179, 179));
	m_list.SetTextBkColor(RGB(255, 125, 180));
	m_list.SetTextColor(RGB(255, 21, 21));
	// 插入图片
	CBitmap bm;
	m_imageList.Create(24, 24, ILC_COLOR32, 3, 3);
	bm.LoadBitmapW(IDB_BITMAP1);              // 载入图片
	m_imageList.Add(&bm, RGB(0, 255, 0));     // 添加图片

	bm.DeleteObject();                   // 释放资源

	bm.LoadBitmapW(IDB_BITMAP2);              // 载入图片
	m_imageList.Add(&bm, RGB(0, 255, 0));     // 添加图片

	m_list.SetImageList(&m_imageList, LVSIL_SMALL);
	// 插入输出数据
	CString firName[15] = { L"谢", L"宋", L"唐", L"许", L"韩", L"冯", L"邓", L"曹", L"彭", L"曾", L"肖", L"田", L"董", L"袁", L"潘" };
	CString senName[15] = { L"林", L"", L"言", L"", L"", L"", L"于", L"", L"", L"时", L"", L"", L"酒", L"江", L"被" };
	CString thrName[15] = { L"赵", L"钱", L"顺", L"李", L"周", L"董", L"路", L"万", L"凡", L"峰", L"平", L"江", L"志", L"仇", L"山" };
	for (int i = 0; i < 5; i++){
		CString age;
		int sex = rand() % 2;
		age.Format(L"%d", rand() % 20 + 20);
		m_list.InsertItem(0, sex ? L"男": L"女",!sex);  // 在这里插入图片sex 0,1
		m_list.SetItemText(0, 1, age);
		m_list.SetItemText(0, 2, firName[rand() % 15] + senName[rand() % 15] + thrName[rand() % 15]);
	}


运行结果为:


双击图形列表控件编程:

将下面右边的静态文本框ID设为IDC_STATIC_SHOW

void CListCalendarAnimateDlg::OnLvnItemchangedList1(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
	// TODO:  在此添加控件通知处理程序代码
	// 遍历
	for (int i = 0; i < m_list.GetItemCount(); i++){
		if (m_list.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED){ // 如果选中
			CString sex = m_list.GetItemText(i, 0);
			CString age = m_list.GetItemText(i, 1);
			CString name = m_list.GetItemText(i, 2);
			CString str = L"性别:" + sex + L"    年龄:" + age + L"    姓名:" + name;
			SetDlgItemText(IDC_STATIC_SHOW, str);
		}
	}

	*pResult = 0;
}
运行结果



添加控件,如图所示:


姓名编辑框ID设为IDC_EDIT_NAME

,年龄编辑框设为IDC_EDIT_AGE.

性别单选按钮,先选中'男',"女",设置Group为True.

给姓名编辑框添加变量m_name,

年龄编辑框添加变量m_age,

性别单选按钮添加变量value型的int型的m_sex.

设置女单选框的Group属性值为FALSE.

双击添加数据按钮编程:

void CListCalendarAnimateDlg::OnBnClickedButtonAdddata()
{
	// TODO:  在此添加控件通知处理程序代码

	UpdateData(TRUE);                // 将控件中的值传给成员变量
	if (m_name.IsEmpty()){           // 如果姓名编辑框为空
		AfxMessageBox(L"姓名不能为空", MB_ICONERROR);
		GetDlgItem(IDC_EDIT_NAME)->SetFocus();  // 设置焦点到编辑框
		return;
	}
	if (m_age.IsEmpty()){            // 如果年龄编辑框为空
		AfxMessageBox(L"请输入年龄.", MB_ICONERROR);
		GetDlgItem(IDC_EDIT_AGE)->SetFocus();   // 设置焦点到年龄编辑框
		return;
	}
	
	int num = m_list.GetItemCount();                        // 获取现在选项个数
	m_list.InsertItem(num, !m_sex ? L"男" : L"女", m_sex);  // 插入性别和位图
	m_list.SetItemText(num, 1, m_age);                      // 插入年龄
	m_list.SetItemText(num, 2, m_name);                     // 插入姓名

	m_age = m_name = L"";                        // 将姓名,年龄设为空
	UpdateData(FALSE);                           // 将成员变量的值传给控件
}
此时便可以添加数据了

添加一个控制风格的单选按钮

如图所示:


设置风格,报表的ID分别为IDC_RADIO_LIST,IDC_RADIO_REPORT

设置好group属性后,给给列表radio添加一个变量m_style

在初始化区域:

	// 显示风格初始化
	m_style.SetCheck(TRUE);
	m_list.ModifyStyle(LVS_ICON | LVSIL_SMALL | LVS_REPORT | LVS_OWNERDRAWFIXED, LVS_LIST, TRUE);
分别双击列表radio和报表radio编程:

void CListCalendarAnimateDlg::OnBnClickedRadioList()
{
	// TODO:  在此添加控件通知处理程序代码
	m_list.ModifyStyle(LVS_ICON | LVSIL_SMALL | LVS_REPORT | LVS_OWNERDRAWFIXED, LVS_LIST, TRUE);
}


void CListCalendarAnimateDlg::OnBnClickedRadioReport()
{
	// TODO:  在此添加控件通知处理程序代码
	m_list.ModifyStyle(LVS_ICON | LVS_LIST | LVSIL_SMALL, LVS_REPORT, TRUE);
}
运行结果:



2.添加日历控件

添加控件,如图所示:

给日历控件添加变量 m_monthCalCtrl

给年,月,日编辑框添加变量m_year,m_month,m_day

在Dlg.cpp文件中,的构造函数中添加代码

CListCalendarAnimateDlg::CListCalendarAnimateDlg(CWnd* pParent /*=NULL*/)
	: CDialogEx(CListCalendarAnimateDlg::IDD, pParent)
	, m_name(_T(""))
	, m_age(_T(""))
	, m_sex(0)
	, m_year(0)
	, m_month(0)
	, m_day(0)
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
	// 添加的代码
	CTime tm = CTime::GetCurrentTime(); // 获取系统时间
	m_year = tm.GetYear();
	m_month = tm.GetMonth();
	m_day = tm.GetDay();

}

双击设置,添加代码:

void CListCalendarAnimateDlg::OnBnClickedButton2()
{
	// TODO:  在此添加控件通知处理程序代码
	UpdateData(TRUE);                   // 将控件的数据传递给成员变量
	CTime tm(m_year, m_month, m_day,0,0,0);
	m_monthCalCtrl.SetCurSel(tm);
}
在初始化区域中添加:

	// 日历控件
	m_monthCalCtrl.SetFirstDayOfWeek(0); //设置一星期的第一天
运行结果为:



3.添加动画控件

如图所示


给动画控件Animation Control 添加变量m_animate

设置停止,播放的ID为IDC_BUTTON_STOP,IDC_BUTTON_PLAY

添加一个avi视频资源,并导入:


在初始化区域添加代码:

	// 动画控件
	m_animate.Open(IDR_AVI1);
	GetDlgItem(IDC_BUTTON_STOP)->EnableWindow(FALSE); // 使播放按钮不能按下


分别双击停止和播放编程:
void CListCalendarAnimateDlg::OnBnClickedButtonPaly()
{
	// TODO:  在此添加控件通知处理程序代码
	m_animate.Play(0, -1, -1);                          // 播放视频
	GetDlgItem(IDC_BUTTON_PLAY)->EnableWindow(FALSE);   // 播放按钮使不能
	GetDlgItem(IDC_BUTTON_STOP)->EnableWindow(TRUE);    // 停止按钮使能
}


void CListCalendarAnimateDlg::OnBnClickedButtonStop()
{
	// TODO:  在此添加控件通知处理程序代码
	m_animate.Stop();                                  // 暂停播放
	GetDlgItem(IDC_BUTTON_STOP)->EnableWindow(FALSE);  // 停止按钮使不能
	GetDlgItem(IDC_BUTTON_PLAY)->EnableWindow(TRUE);   // 播放按钮使能
}

运行结果


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值