您的位置:首页 > 其它

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

2015-10-09 19:39 363 查看
新建基于对话框的应用程序。

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);   // 播放按钮使能
}


运行结果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: