VC++深入详解·chapter08·笔记

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值