• 《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()配置重绘内容

  • 相关阅读:
    覆盖式发布与非覆盖式发布
    GIT
    Web Service返回符合Xml Schema规范的Xml文档
    下拉渐显菜单
    计算网页上坐标的距离
    初识交互设计
    良好用户体验-实现过程!
    做 用户调研?
    这个没什么技术含量,实现起来很简单?
    SQL SERVER 登录问题!该用户与可信的Sql Server连接无关联
  • 原文地址:https://www.cnblogs.com/sepmaple/p/9390132.html
Copyright © 2020-2023  润新知