首页 > 代码库 > MFC DAY10 11 12
MFC DAY10 11 12
一 MFC对话框
1 DoModal函数的执行过程
1.1 查找和加载对话框资源
1.2 将父窗口设置为不可用状态
1.3 创建和显示对话框
1.4 进入对话框的消息循环
1.5 点击OK或者Cancel或者关闭按钮,隐藏对话框窗口
1.6 将父窗口设置为可用的和活动的
1.7 销毁对话框窗口
1.8 释放对话框资源
1.9 返回执行结果(IDOK/IDCANCEL)
二 对话框数据交换技术(DDX)
引入对话框数据交换技术的目的方便的操作控件。将对话框类的
成员变量与对话框的控件绑定,通过操作成员变量达到操作控件
的目的。
1 相关函数:
1.1 需要一系列的绑定函数
(绑定函数的作用就是将成员变量与控件绑定)
DDX_Control(pDX,控件ID,控件类型的变量名);
DDX_Text(pDX,控件ID,值类型的变量名);
1.2 数据交换函数DoDataExchange
包含了对话框中所有的绑定函数。
CDialog::OnInitDialog函数间接调用DoDataExchange函数,
在对话框初始后,控件与变量已经绑定了。
1.3 UpdateData(BOOL)-当用户在控件中输入的值与控件绑定的值
有数据交换时,调用该函数。
UpdateData(TRUE)-控件的值传递给成员变量
UpdateData(FALSE)-成员变量的值传递给控件
2 使用DDX做一个登录例子
三 MFC控件的使用
1 静态控件(CStatic)包括图片、静态文本和分组框。控件的默认ID都是
IDC_STATIC,如果需要为静态控件绑定成员变量时,首先需要
修改控件的ID。
2 按钮控件(CButton)包括一般按钮、复杂按钮和单选按钮。单选
按钮如果需要绑定成员变量,需要选中group属性。单选按钮的
分组,同一组按钮的Tab键顺序要连续,然后在Tab键编号较小
的按钮设置group属性,有几组设置几个。
3 组合框控件和列表框控件
组合框通常是单选,列表框可单选和多选。组合框可以通过
属性设置数据项。
4 播放动画的例子
4.1 文件对话框
CFileDialog(
BOOL bOpenFileDialog, //表示打开或者另存为对话框
LPCTSTR lpszDefExt=NULL,用在另存为对话框表示默认扩展名
LPCTSTR lpszFileName = NULL,用在另存为对话框表示默认文件名
//对话框的样式
DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
LPCTSTR lpszFilter = NULL,//设置文件类型的过滤字符串
CWnd* pParentWnd = NULL //父窗口,通常为NULL
);
设置文件类型的过滤字符串的格式:
1 多个数据项之间以"|"隔开,整个字符串以"||"结束;
2 每一个数据项由两部分组成,显示部分和过滤部分。这两
部分以"|"隔开。
"视频文件(*.avi)|*.avi|所有文件(*.*)|*.*||";
4.2 CListBox和CComboBox的使用
4.2.1 添加数据项
CListBox::AddString
CComboBox::AddString
4.2.2 查找数据项
CListBox::FindString LB_ERR
CComboBox::FindString CB_ERR
4.2.3 删除数据项
CListBox::DeleteString
CComboBox::DeleteString
4.2.4 获取/设置当前选择的数据项
CListBox::GetCurSel/SetCurSel
CComboBox::GetCurSel/SetCurSel
4.2.5 获取/设置数据项的附加数据
CListBox::GetItemData/SetItemData
CComboBox::GetItemData/SetItemData
...
---------------------------------------
一 控件的使用
演示旋转按钮(CSpinButtonCtrl)、进度条(CProgressCtrl)和
滑块控件(CSliderCtrl)的使用.
1 设置控件表示的数值范围
SetRange/GetRange
SetRange32/GetRange32
2 设置控件的步长或者增量
CSpinButtonCtrl::SetAccel
CProgressCtrl::SetStep
CSliderCtrl::PageSize
CSliderCtrl::LineSize
3 设置/获取当前的位置
SetPos/GetPos
二 列表控件
1 相关类
CListView-本质是一个视图类。相当于在CView的客户区包含了
一个CListCtrl控件。
GetListCtrl()得到视图包含的控件。
CListCtrl-本质是一个控件,常用于对话框显示数据。
2 分析CListCtrl控件:
控件可以以不同的样式显示数据,包含图标、小图标、列表和
报表等四种样式。 如果以报表的样式显示数据,控件还可以
包含多个列。一个控件包含多个数据项。每个数据项的信息包
括图标和文本。不同的数据项的图标也是不一样的,所以,控件
包含了两个图标列表(大图标列表和小图标列表)。
3 控件的使用
3.1 设置控件的图标列表(大图标列表和小图标列表)
CListCtrl::SetImageList
3.2 修改控件的显示风格
CWnd::ModifyStyle
3.3 添加列
CListCtrl::InsertColumn
3.4 添加数据项
CListCtrl::InsertItem
3.5 设置列文本
CListCtrl::SetItemText
3.6 设置/获取数据项的附加数据
CListCtrl::SetItemData/GetItemData
3.7 设置控件的背景图片
CListCtrl::SetBkImage
需要有Ole库的初始化 AfxOleInit();
3.8 设置文本的背景色
CListCtrl::SetTextBkColor(CLR_NONE)
...
三 树控件
1 相关类
CTreeView-是一个视图,在CView的客户区包含了一个CTreeCtrl
控件。调用GetTreeCtrl()得到视图包含的控件
CTreeCtrl-是一个控件,更多的用于对话框上显示数据
2 CTreeCtrl的使用
2.1 分析CTreeCtrl
CTreeCtrl控件主要用于显示具有层次结构的数据。树控件是
由一个个的节点组成,每一个节点的信息包括文本和图标,
而且节点的图标可以有选中和未选中两种图标。
2.2 具体使用
2.2.1 设置图标列表
CTreeCtrl::SetImageList
2.2.2 插入节点
CTreeCtrl::InsertItem
2.2.3 设置节点高度
CTreeCtrl::SetItemHeight
2.2.4 设置节点的展开状态
CTreeCtrl::Expand
2.2.5 设置/获取树节点的附加数据
CTreeCtrl::SetItemData/GetItemData
...
几乎所有的函数操作时,都会有节点句柄作为参数!
VC扩展界面库...
四 属性页对话框
1 分类
标签式属性页和向导式属性页
2 相关类
CPropertyPage类-对话框类,拥有自己的资源窗口。
CPropertySheet类-框架窗口类,包含多个页面对话框。
3 标签式属性页(例子:使用属性页设置图形的线宽和颜色)
用于设置参数、选项等配置
---------------------------------
一 属性页对话框
1 分类
标签式属性页和向导式属性页
2 相关类
CPropertyPage类-对话框类,拥有自己的资源窗口。
CPropertySheet类-框架窗口类,包含多个页面对话框。
3 标签式属性页(例子:使用属性页设置图形的线宽和颜色)
用于设置参数、选项等配置
3.1 插入对话框资源,注意对话框资源的类型,双击生成相应
的类,注意父类一定是CPropertyPage。重复这个步骤,可以
添加多个页面对话框。
3.2 添加CPropertySheet类的子类CSheet类,并且添加页面
对象,在CSheet类的构造函数中,将页面对象添加到表单。
AddPage(&m_page1);
AddPage(&m_page2);
3.3 在菜单的消息处理函数中,创建和显示属性页
CPropertySheet::DoModal
3.4 将应用按钮设置为可用状态
CPropertyPage::SetModified
3.5 消息处理(通过重写虚函数的方式)
CPropertyPage::OnApply
CPropertyPage::OnOK
CPropertyPage::OnCancel
4 向导式属性页
通常用于引导用户按照设定的步骤一步步的选择或者设置最终
完成某种功能。
4.1 与3.1 相同
4.2 与3.2 相同
4.3 在创建和显示对话框前,先设置为向导模式
CPropertySheet::SetWizardMode()
CPropertySheet::DoModal()
4.4 设置每一个页面的向导按钮,右击CPage1类,选择添加
虚函数,在列表中选择OnSetActive(),在函数中:
((CPropertySheet*)GetParent())->SetWizardButtons(
PSWIZB_NEXT);
按照同样的方式,设置CPage2和CPage3这两个页面的
向导按钮。
4.5 获取用户在每一个页面中选择的信息。通常的办法给控件
绑定成员变量。
4.5.1CPage1的处理:
为单选按钮和列表框绑定成员变量。添加CPage1
的WM_INITDIALOG消息处理函数,在OnInitDialog函数中:
m_wndCity.AddString("北京");
m_wndCity.AddString("上海");
m_wndCity.AddString("天津");
m_wndCity.AddString("重庆");
4.5.2 为空判断
右击CPage1类,选择添加虚函数中,选择OnWizardNext,
在函数中:
UpdateData(TRUE);
if (-1==m_nJob)
{
MessageBox("请选择您的职业!");
return -1;
}
if (m_strCity=="")
{
MessageBox("请选择您所在的城市");
return -1;
}
4.5.3 CPage2、CPage3类的处理,为控件绑定成员变量。
分别在 OnWizardNext和OnWizardFinish中为空判断。
注意 OnWizardFinish的返回值类型是BOOL。
4.6 在视图对菜单的消息处理函数OnWizardProp中:
4.6.1 在视图中添加成员变量并在构造函数中初始化
int m_nJob;
CString m_strCity;
BOOL m_bFlag[4];
CString m_strSalary;
4.6.2 在视图类的OnWizardProp将页面中的数值传
递给视图:
// 创建和显示向导式属性页
CSheet sheet("向导式属性页");
//设置显示的方式为向导模式
sheet.SetWizardMode();
if(ID_WIZFINISH!=sheet.DoModal())return;
//1将每一个页面的数值传递给视图
m_nJob=sheet.m_page1.m_nJob;
m_strCity=sheet.m_page1.m_strCity;
//2 使得视图重绘以显示新的数据
Invalidate(TRUE);
4.6.3 在OnDraw函数中,输出各个变量的值
MFC 多线程
COM 4天
数据库(odbc和ado)+网络通信(socket)3天
vod视频点播系统 (4)