新建基于对话框的应用程序。
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); // 播放按钮使能
}
运行结果