1、WM_INITDIALOG消息:在对话框要显示之前发送。其消息响应函数为OnInitDialog函
(override)。可以在此函数中做某些初始化工作。
2、对以控件添加相关联的Varible时,优先使用右键添加变量功能。(代码会在三处改变:声明、初始 化、DoDateExchange函数)
3、通常都是在属性表单的构造函数中添加属性页对象。
4、属性表单构造时,优先把添加属性页的操作放在第二个构造函数中,最好是两个构造函数里都放置相同的代码。若只放在第一个,可能运行时无法显示属性表单。
5、为了创建一个属性表单,首先需要创建一个CPropertySheet对象,接下来,在此对象中为每一个属性页创建一个对象(CPropertyPage类型),并调用AddPage函数添加每一个属性页,然后调用DoModal函数显示一个模态属性表单,或者调用 Create函数创建一个非模态属性表单。
6、增加属性页的方式:
1>Add resource/Dialog/IDD_PROPPAGE_LARGE;
2>增加一普通对话框资源,然后修改其属性,使其符合属性页资源的要求,然后把它当作属性页资源来使用。
7、CPropertySheet派生于CWnd而不是CDialog,但它有和CDialog对象类似的操作方式。同样调用DoModal构造并显示一模态属性表单,调用Create成员函数创建一个非模态属性表单。
8、向导的创建:
1> DoModal之前,propSheet.SetWizardMode();
2> 设置想到对话框上的按钮:void CPropertySheet::SetWizardButtons(DWORD dsFlags)
1) 为属性页重写OnSetActive函数(当属性页被选中,从而成为一个活动的页面时,应用程序框架就会调用OnSetActive(virtual函数))。
2) 重写代码如:((CPropertySheet* )GetParent())->SetWizardButtons(PSWIZB_NEXT);(属性表单是属性页的父窗口)
3> 单用户单击“下一步”按钮时,程序将调用OnWizardNext这个虚函数。如果此函数返回0,那么程序自动进入当前向导的下一个属性页,如果返回- 1,将禁止属性页发生变更。(*先调用UpdateData,此点易忽略)
4> 处理“完成”按钮的单击消息响应函数为:OnWizardFinish(virtual函数)
9、单选按钮(Radio Button):
1> 对一组单选按钮来说,需要设置该组中第一个单选按钮的Group属性,那么随后的单选按钮就和这个按钮属于同一组了,直到遇到
下一个(按照Tab顺序)具有Group属性的控件为止。
2> 分组:(分多组)按TAB顺序来,每组第一个设置为GROUP
3> 当用户单击单选按钮时,该按钮会向其父窗口发送一BN_CLICKED消息(为反映此改变,应为其添加响应的消息响应,函数,然后在其中调用 InValidate()函数,并在对话框OnPaint函数中针对特定改变进行操作,在OnPaint中注意调用UpdateData函数)
10、列表框(List Box):
1> 相关类:CListBox
2> AddString:向列表框添加字符串 eg:((CListBox* )GetDlgItem(IDC_LIST1))->AddString(_T("北京"));
3> 添加字符串的时机:OnInitDialog(override,WM_INITDIALOG的消息响应函数)
4> 关联一CString vaule变量,通过是否为NULL判断用户有没有选择
11、复选框(Check Box):每个复选框添加一个关联变量,BOOL型。
12、组合框(Combo Box):
1> 由一个编辑框和一个列表框组成
2> 相关类:CComboBox
3> 向组合框控件的列表框中添加字符串选项:AddString eg:((CComboBox* )GetDlgItem(IDC_COMBO1))->AddString(_T("3000元以上"));
4> 添加字符串的时机:OnInitDialog(override,WM_INITDIALOG的消息响应函数)
5> 组合框默认情况下具有排序功能,即sort属性为true,可将其修改为false
6> SetCurSel成员函数:设置组合框初始显示,
原型为int SetCurSel(int nSelect);
eg:((CComboBox* )GetDlgItem(IDC_COMBO1))->SetCurSel(0);
7> GetCurSel成员函数:返回一个基于0的索引,表明组合框的列表框中当前选中项的位置
8> GetLBText成员函数:从组合框的列表框中指定位置处得到一个字符串,有两种原型,其中一个为:
void GetBLText(int nIndex, CString& rString) const;
9> 手动给Dialog类添加一CString变量,用来保存用户在CComboBox中的选择:
eg:int index=((CComboBox* )GetDlgItem(IDC_COMBO1))->GetCurSel();
((CComboBox* )GetDlgItem(IDC_COMBO1))->GetLBText(index, m_strSalary);
13、编辑框(Edit Control):
1> 当用户在其上面对文本进行改变时,它会向其父窗口即对话框发送一EN_CHANGE通知消息(为反映此改变,应为其添加响应的消息响应,
函数,然后在其中调用InValidate()函数,并在对话框OnPaint函数中针对特定改变进行操作,在OnPaint中注意调用 UpdateData函数)
14、vs05:typedef int BOOL;
15、一般情况下,CPropertySheet类的DoModal函数的返回值是IDOK或IDCANCEL。但是如果属性表单已经被创建为向导了,那么该函数的返回值将是ID_WIZFINISH或IDCANCEL。
16、close操作/DestoryWindow/发送WM_DESTORY消息/PostQuitMessage/WM_QUIT/消息循环正常退出 /return 0;
17、对话框捕获WM_DEYDOWN消息:(以基于对话框的应用程序Test为例):[在pretranslatemessage中捕获:if (pMsg->message==wm_keydown)]
1> CTestAPP类.h中Add Member Varialbe:
HWND m_hwndDlg;
2> CTestApp类.CPP的InitInstance函数中添加:
m_hwndDlg=NULL;
3> CTestApp类上Add Virtual Function,override函数ProcessMessageFilter,对对话框或者其字空间发出的WM_KEYDOWN进行消息判
断与处理;
4> CTestDlg类.cpp中的OnInitialDialog函数中添加:
((CDialog_KEYDOWNApp* )AfxGetApp())->m_hwndDlg=m_hWnd;
5> CTestDlg类中Add Windows Message Handler,为WM_DESTORY添加消息响应函数OnDestory(),并在次函数中添加:
((CDialog_KEYDOWNApp* )AfxGetApp())->m_hwndDlg=NULL;//在对话框窗口销毁后,将CTestApp的m_hwndDlg置为NULL
VC++深入详解·chapter08·笔记
最新推荐文章于 2025-04-11 12:21:38 发布