《VC++深入详解》学习笔记 第七、八章对话框

(程序员不仅要会写代码还要会写博客还要会写诗??我是原来是硬件工程师诶)

控件问题:  对话框中各种控件都是CWnd派生而来都是窗口,一般为对话框子窗口,也可以在视类窗口中使用

模态对话框:  对话框分为模态对话框(开启后禁止其他界面交互)和非模态对话框(不禁止其他界面交互)

创建模态对话框:  创建对话框类(CDialog类)>类.DoModal();(CDialog类DoModal函数)

非模态对话框创建:  CDialog类Create函数)  Create(ID,pParentwnd)  创建完成后用ShowWindow函数显示  

        为保持其生命周期(定义为视类窗口对象/定义为指针对象)(结束对话框按钮需要手动重写按钮函数并调用DestroyWindow销毁对话框,否则只是隐藏)

        局部指针会引发内存泄露(要么视类中创建然后析构函数中delete/要么原类中重载PostNcDestroy(窗口销毁后调用)释放this指向内存)

按钮控件的创建:  CButton::Create();

获取指定ID控件对象:  CWnd* GetDlgItem(int nID) const;

静态文本控件:  可以 通过配置Notify从而实现消息响应,其次需要配置新ID

获取,设置文字:  pWnd->GetWindowText(CString)获取文字到CString  pWnd->SetWindowText(CString)设置文本

获取指定ID控件文本:  GetDlgItemText()/SetDlgItemText()    GetDlgItemInt()/SetDlgItemInt()

编辑框控件:  可以将编辑框文本和对话框类中成员数据变量(类型随意)关联  框架自动重写DoDataExchange实现变量关联

      UpdateData(bool);更新关联数据.默认为true从对话框获取,false变量赋值对话框

      同时可以和控件变量关联、当成对象使用

DDX/DDV:  对话框数据交换/校验

对话窗伸缩(展开):  配置完伸缩按钮文字变化>将图型控件拉伸为细线坐标伸缩分割线>设置两变量(CRect)作为两种状态尺寸存放

          判断尺寸存放变量是否为空(IsRectEmpty/IsRectNull)>以图形控件作为边界限制伸缩尺寸

          判断状态(伸还是缩)>设置尺寸SetWindowPos(pCWnd,x,y(坐标),cx,cy(宽高),尺寸配置)

焦点移动下一控件:  GetDlgItem(ID)获取当前窗口指针>GetNextDlgTabItem()获取下一窗口指针>SetFocus()输入焦点移动该位置弄人

默认按钮优先级高

属性表单:  IDD_PROPPAGE_XXX 属性页资源

       风格(Style):子集(Child)  边框(Border)为细  对话框中不包含系统菜单(System menu)  最初显示不使用(Disabled)

       创建对应类,对每一页属性页创建对应类基于CPropertyPage确保ID对应正确,然后创建属性表单基于CPropertySheet类(MFC类)其中对每一页属性页建立对象,

      在其构建函数中通过AddPage(pPage)将属性页添加进表单,在需要地方通过创建对象 (构建函数是创建属性表单标题),然后DoModal()调用对象;     

向导构建:  向导是一种特殊属性表单,在通过DoModal()显示对象前,通过SetWizardMode()设置向导模式,

       按钮配置:在对应类中重写OnSetActive()函数,通过SetWizardButtons()设置按钮

      ps:向导首页只有下一步:((CPropertySheet*)GetParent())->SetWizardButtons(PSWIZB_NEXT);

      中间页存在上一步和下一步:((CPropertySheet*)GetParent())->SetWizardButtons(PSWIZB_BACk | PSWIZB_NEXT);

      最后一页有上一步和完成:((CPropertySheet*)GetParent())->SetWizardButtons(PSWIZB_BACk | PSWIZB_FINISH);

       重写OnWizardNext()实现在对下一步按键响应前处理,返回值为-1时禁止属性页变更(注意添加提示MessageBox,注意数据更新)

      同理OnWizardBack(),OnWizardFinsh()对应上一步和完成按键

       当DoModal()结束后窗口被销毁,但其对象依然存在可以访问其内部成员

单选框控件:  将单选控件设为组后,添加一个Value-int变量表示选择内容和第一个控件ID绑定,-1为没选,0~表示选择第几个根据tab顺序,第一个为0

列表框控件:  通过AddString进行字符串添加(在对话框初始化函数中添加OnInitDialog())

      ps:((CListBox*)GetDlgItem(IDC_LIST1))->AddString("背景");

多选框控件:  每个控件单独设定变量,控件勾取,变量为True否则为False

组合框控件:  通过AddString进行数据添加,同样在初始化函数中

      ps:((CComboBox*)GetDlgItem(IDC_COMBO3))->AddString("10000左右");

        SetCurSel(索引首位为0)设置默认选项  int GetCurSel();获取索引  GetLBText(索引,接收缓存);获取索引位置字符串

窗体重绘:  Invalidate();使窗体无效引发重绘,然后再OnDraw()配置重绘内容

原文地址:https://www.cnblogs.com/sepmaple/p/9390132.html