MFC笔记1:对话框学习
2014-03-24 10:53
197 查看
一、 对话框伸缩功能的实现
1、 常用函数
(1) GetDlgItemText:返回对话框中指定ID的控件上的文本;如:char ch1[10]; CString str;
GetDlgItemText(IDC_BUTTON1,str); GetDlgItemText(IDC_BUTTON1,ch1);
(2) SetDlgItemText:设置对话框中指定ID的空间上的文本;
如:SetDlgItemText(IDC_EDIT3,ch3); SetDlgItemText(IDC_BUTTON1,"扩展>>");
(3) GetWindowRect:获得图像控件窗口的大小和位置;
如:static CRect rectLarge; //初始值为0,保存大矩形坐标
if (rectLarge.IsRectNull())
{
CRect rectSeparator;
GetWindowRect(&rectLarge);//获得大窗口的矩形大小
GetDlgItem(IDC_SEPARATOR)->GetWindowRect(&rectSeparator);
}
(4) SetWindowPos:设置对话框的收缩和扩展之后的大小;
SetWindowPos(NULL,0,0,rectSmall.Width(),rectSmall.Height(),SWP_NOMOVE|SWP_NOZORDER);//维持窗口当前位置,当前Z次序
二、 输入焦点的传递
1、常用函数
(1) SetWindowLong:修改窗口已指定的过程函数;如果为指定窗口设定一个新的窗口过程,则该函数将返回先前为该窗口类指定的窗口过程地址。注意:在程序运行时,当对话框及其上的子控件创建完成,将要显示之前会发送的一个消息:WM_INITDIALOG.因此,在此消息的响应函数中修改编辑框控件的窗口过程比较合适。
(2) GetWindow:获得窗口句柄,返回与指定窗口有特定关系的窗口句柄;第一个参数是开始查找的窗口句柄,第二个参数指定hWnd参数指定的窗口与要获得的窗口之间的关系,取值为:GW_HWNDNEXT,GW_HWNDPREV;
(3) WM_INITDIALOG消息响应函数:
BOOLCTestDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
prevProc=(WNDPROC)SetWindowLong(GetDlgItem(IDC_EDIT1)->m_hWnd,GWL_WNDPROC,(LONG)NewEditProc);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
(4) 重写窗口过程函数:
WNDPROCprevProc;//定义先前的窗口处理
LRESULTCALLBACK NewEditProc(
HWNDhwnd, // handle to window
UINTuMsg, // message identifier
WPARAMwParam, // first message parameter
LPARAMlParam // second message parameter
) //重写窗口过程函数
{
if (uMsg==WM_CHAR && wParam==0x0d)
{
SetFocus(::GetWindow(hwnd,GW_HWNDNEXT)); //注意,编辑框一般不接受多行,所以在属性中要先选中Multiline,否则回车没反应;
return 1;
}
else
{
returnprevProc(hwnd,uMsg,wParam,lParam);
}
}
(5) GetNextDlgTabItem函数:返回指定控件前面或后面的一个具有WS_TABSTOP风格的控件;如果设置了这个Tabstop,则在对话框中按下Tab键后,输入焦点可以转移到此控件上。
(6) ::表示调用SDK中的全局函数。
(7) 在MFC中,默认情况下,当在对话框窗口中按下回车键时,会调用对话框的默认按钮的响应函数,我们可以再次默认按钮的响应函数中把焦点依次向下传递。但是首先要取消第一个编辑框中的Multiline选项。
如:void CTestDlg::OnOK()
{
// TODO: Add extra validation here
GetNextDlgTabItem(GetFocus())->SetFocus();//获得当前焦点窗口指针的下一个窗口指针,并设置焦点
//CDialog::OnOK();
} 默认OK按钮的ID是:IDOK
三、 逃跑按钮的实现
1、从CButton类派生一个新类,把按钮控件与一个自定义的按钮窗口类关联起来;详见P166-267.
(1)鼠标移动响应中: ShowWindow(SW_HIDE); m_pBtn->ShowWindow(SW_SHOW);四、属性表单和向导的创建
1、MFC类库作为一个共享库(As a sharedDLL)来使用,编译后生成的文件比较小,但移植到其他系统下有可能因为缺少MFC类库而导致程序不能运行;但作为一个静态链接库(As a statically linked library)来使用,就不会出现这种问题。如果MFC作为共享库使用的,产品开发完成后,发布时可将相关的MFC类库一起打包到产品发布包中。2、创建属性表单
为了创建一个属性表单,首先需要创建一个CPropertySheet对象,在此对象中为每一个属性页创建一个对象(CPropertyPage类型),并调用AddPage函数添加每一个属性页,然后调用DoModal函数显示一个模态属性表单,或者调用create函数创建一个非模态属性表单。
3、步骤:
(1)为prop程序创建一个属性表单对象;
(2)在属性表单对象中添加属性页;
(3)显示属性表单;
4、向导的创建
创建一个向导类型的对话框,应该遵循创建一个标准属性表单的步骤来实现,但在调用属性表单对象的DoModal函数之前,应该调用SetWizardMode这一函数;
5、UpdateData(TRUE)函数:为真时从对话框获取数据;FALSE时,将数据赋给对话框。
6、控件:组框(Group Box) 单选按钮(Radio Button) 列表框(List Box) 复选框
7、CPropertySheet类提供SetWizardButtons成员函数,用来设置向导对话框上的按钮。
SetWizardButtons(DWORDdwFlags) 参数取值:
PSWIZB_BACK:设置上一个按钮; PSWIZB_NEXT:设置下一个按钮;
PSWIZB_FINISH:设置完成按钮; PSWIZB_DISABLEDFINISH:设置一个禁用按钮;
注意:
在属性页的OnSetActive函数中调用SetWizardButtons这个函数,属性页被选中成为一个活动的页面时,应用程序框架就会调用OnSetActive这个函数,它为一个虚函数,应该在属性页子类中重写这个函数。
8、对一组单选按钮来说,需要设置该组中第一个单选按钮的Group属性,属性中选中该选项。只能增加一个int类型的变量,选中该第一个按钮时,变量m_occupation为0,第二个为1,第三个为2;
9、在MFC编程中,对控件的操作都是通过相关的MFC类来完成的;
10、对于列表框,对应的MFC类为:CListBox; 组合框控件由一个编辑框和一个列表框组成,其对应的MFC类是CComboBox, 有成员函数AddString,用来向组合框控件的列表框中添加字符串选项。 列表框添加字符串在WM_INITDIALOG消息的响应函数中添加。
((CComboBox*)GetDlgItem(IDC_COMBO1))->AddString("3000元以上");
((CComboBox*)GetDlgItem(IDC_COMBO1))->SetCurSel(0);//选择组合框中列表框中的一项
11、接收用户在向导中的选择
(1)view类中定义变量保存属性页中选择项;
(2)memset(m_bLike,0,sizeof(m_bLike));//字符数组初始化;
(3)一般情况下,CPropertySheet类的DoModal函数的返回值是IDOK或IDCANCEL,但是如果属性表单已经被创建为向导了,该函数返回值为ID_WIZFINISH或IDCANCEL;
相关文章推荐
- VS2013MFC对话框工程学习笔记七 - C++数据类型 - 整形 的简单学习
- MFC学习笔记之对话框
- MFC学习笔记--将对话框收获的输入在View中使用
- MFC对话框学习笔记(2)
- VS2013MFC对话框工程学习笔记九 - C++语法的的学习
- MFC学习笔记之-对话框
- MFC学习笔记之Invalidate的用处及对话框数据交换及实现文字背景色为透明
- 孙鑫VC学习笔记:第十五讲 (四) 编写一个基于MFC对话框的聊天程序
- VS2010 C++ MFC框架学习笔记3 - 控件Tab顺序设置及模态对话框
- MFC学习笔记——CDialog(模态对话框及其弹出过程)
- MFC学习笔记之:7种访问对话框控件的方式
- MFC学习笔记之多对话框中使用定时器
- VS2013MFC对话框工程学习笔记四 - 为按钮添加一个响应事件二
- MFC学习笔记之八————颜色对话框与字体对话框
- MFC学习笔记8 对话框与程序连接
- MFC对话框编程详细学习笔记
- MFC学习笔记(二):消息对话框的两个函数用法与区别
- VS2013MFC对话框工程学习笔记十一 - 动态改变一个控件标题
- MFC学习笔记(四)- 模态对话框与非模态对话框的创建与显示
- MFC对话框学习笔记之模态对话框转化为非模态