MFC对话框程序基础复习002

来源:互联网 发布:excel筛选多列数据 编辑:程序博客网 时间:2024/06/05 20:54

 

对话框基础复习二 2011.4.23

 

可以把一个控件关联一个类,在这个类内响应消息,就会只对控件本身响应消息了。

 

PROPPAGE = property[propəti] page,在插入资源中展开Dialog 可以选择不同size的。

这里要注意的是,这个dlg是英文的,不支持显示中文,要在Properties里全选择中文。

 

属性页 和 普通Dialog 的不同:

一般来说,属性页的style是child,没有system menu, 在More Style中选中Disable。知道这些之后,就可以在普通Dialog 和属性页中转化。

布局小技巧:在Dialog 工具栏里面有个小工具 Test (ctrl+T打开),可以让窗口先运行起来,方便看窗体的布局及其控件的可见性。

 

为 PROPPAGE 创建一个关联类的时候,classWizard 有个BUG,就是会提示找不到*.cpp和*.h文件,然后类创建成功,在classWizard中找不到这个类。解决办法是到工程文件夹中删除*.clw这个工程配置文件,再打开工程中选择classWizard,然后classWizard就会提示找不到这个配置文件,提示重新生成,然后就ok了。

 

CPropertyPage 和 CPropertySheet 两个基类 :

要使用属性页,就要创建 CPropertySheet 的对象,然后 AddPage() 添加CPropertypage对象。CPropertySheet有两个构造函数,分别是用标题字符串来构造和ID号来构造,如果要在够照函数中AddPage()这类操作的时候,记得两个构造函数都要照顾到。

 

SetWizardMode 设置属性表单为向导类,eg:安装界面哪种有下一步和上一步的。

如果返回ID_WIZFINISH 就是完成按钮 如果返回IDCANCLE就是取消

跟IDOK一类

SetWizardButtons 设置向导中的上一步、下一步等Button,要在每个CPropertyPage 的OnSetActive 函数中调用来设置,其中OnSetActive 是一个Virtual Function,要进行override

使用的时候要注意,要设置的是 CPropertySheet 的对象,所以要

((CpropertySheet *)GetPartent())->SetWizardbuttons(PSWIZB_*); //PSWIZB_只是一个前缀,例如PSWIZE_NEXT(下一步)什么的。

 

OnWizardNext 当点击下一步的时候会调用,是一个 Virtual Function,其中return 0

能通过, return  -1不能通过,注意在这里要用UpdateData 获取控件的数据

 

 

在override 父类的虚函数 的时候,可以选择Add Virtual Function....(这个是vc6.0缩写来的,不要以为是要增加虚函数,全称是Add Virtual Override Function for * Class,汗)

 

当在ClassWizard 中 MessageMap中找到了 一个控件的 ID号,在MemberVaiables中又找不到的时候,不妨在控件的 Properties 中选择 Group  

 

Radio Button中有一个选择了 Group 他接下来的 Radio Button 就会和他分配到一组,直到再次碰到 Group标记的 Radio Button 再为下一组 ,Group是用 Tab Order (ctrl+d)来排序的。 Radio Button 关联的一个 int Value,就是Group中相对的 index(从0开始)。

如果该 index 为 -1,就是什么也没有选中。

 

切记,每次想要获取或设置控件已经更新的数据的时候,要UpdateData一下。

 

 

ListBox 添加Item  ((CListBox *)GetDlgItem(IDC_*))->AddString(" ****** ");

 

ComboBox 添加Item ((CComboBox *)GetDlgItem(IDC_*))->AddString(" ****** ");

ComboBox 里 Property 中 Style 有个Sort功能,不选中就会按添加的顺序排列 Item

设置初始选中的Item ((CComboBox *)GetDlgItem(IDC_*))->SetCirSel(0); //从0开始

GetCirSel  获取选中的index

GetLBText 获取选中的文字

 

 

如何刷新窗口

Invalidate() 可以让视类(View类)窗口无效,就会引起重绘操作,然后就可以在 OnDraw 中改变窗口的数据,进行刷新

 

 

如何在对话框中捕获 WM_KEYDOWN 消息

在对话框类中设置了对 WM_KEYDOWN 消息响应后,这个消息还是被Post到Windows处理了,可以override ProcessMessageFilter 这个 Virtual Function 来捕获对应的消息。同理,还可以用来拦截某些消息。