• MFC进阶教程深入浅出版.笔记第3天


     

    平时也没机会接触到MFC的代码,这次也是项目使然,手上项目涉及到MFC,感觉有点意思,所以在b站找了视频学习,没有上手操作过,只是走马观花,大致了解了这个代码的流程,现在奉上b站的视频链接:MFC进阶教程深入浅出版
    以下是课程笔记:

    第三天(对话框、常用控件):
        1、动态图标制作(定时器)
        2、对话框(模态和非模态)
        3、基于对话框的编程
        4、常用控件的使用
    -------------------------------------------------
    作业
    结构体内部的变量不要初始化
    在构造函数处进行初始化。

    Invalidate();//间接调用OnDraw()


    资源视图 -> Menu -> 新建菜单 -> [重新开始] -> 右击 -> 添加事件处理程序

    -------------------------------------------------

    一、对话框

    1)模态对话框
      a)资源视图 —> Dialog —> 右击 —> 插入Dialog
      b)创建对话框对象 CDialog
      c)以模态方式运行 CDialog::DoModal

    2)非模态对话框
      a)资源视图 —> Dialog —> 右击 —> 插入Dialog
      b)创建对话框对象,需要在.h的地方声明为成员变量 CDialog
      c)创建对话框(在构造函数或OnCreate(),目的只创建一次) CDialog::Create
      d)显示窗口CWnd::ShowWindow
     
    3)自定义对话框类(重要)
      a)资源视图 —> Dialog —> 右击 —> 插入Dialog
      b)点击对话框模板 —> 右击 —> 添加类
      c)多出来一个自定义的类,.h 类中有个枚举和对话框关联 enum {IDD = IDD_DIALOG2};
     

    二、基于对话框(控件)编程

    新建工程 —> 选择【基于对话框】
    1)基于对话框应用程序框架
      a)应用程序类: 继承于CWinApp
        InitInstance(): 程序的入口地址
      b)对话框类: 继承于CDialogEx
        OnPaint()
        OnInitDialog():对话框的初始化工作
        DoDataExchange():控件和变量的关联和交换
      

    三、常用控件

    1)静态控件CStatic (Qt中的标签QLabel) 文字/图片都可以放

      显示一些文字信息
      a) Caption:修改显示的内容
      b) ID: XXX_STATIC,静态ID,不响应任何消息(事件)
     

    2)按钮CButton 通告消息

      a) Caption:修改显示的内容
      b) 处理消息 BN_CLICKED,用户点击按钮自动触发:
         1)属性 —> 控制事件 —> 选择所需事件
         2)双击按钮,自动生成消息处理函数
    ==============================================   
    自定义一个类:
    类视图—>类视图—>添加类—>MFC类—>MyButton—>基类CButton
    关联变量—>点击按钮右键添加变量—>MyButton m_button(control类型)

    对话框上的控件—>右击类向导,可以看到关联成员变量的分布

    //通过路径获取bitmap句柄,同时设置其宽度、高度
    #define HBMP(filepath,width,height)
    (HBITMAP)LoadImage(AfxGetInstanceHandle(),filepath,IMAGE_BITMAP,width,height,LR_LOADFROMFILE|LR_CREATEDIBSECTION)
    //通过路径获取ico句柄,默认大小
    #define HICO(filepath) (HICON)LoadImage(AfxGetInstanceHandle(),filepath,IMAGE_ICON,0,0,LR_LOADFROMFILE|LR_DEFAULTSIZE
    ==============================================  

    3)逃跑按钮(类似于Qt提升)

     a)自定义按钮类,继承于CButton
      选择类视图最开始的文件夹—>右击—>添加类—>MFC—>MFC类
        1)处理鼠标移动消息 WM_MOUSEMOVE
        2)获取父窗口指针 CWnd::GetParent
        3)获取父窗口客户区域的范围 CWnd::GetClientRect
        4)获取按钮的范围 CWnd::GetWindowRect
        5)产生随机坐标 rand()%w
        6)移动按钮的位置 CWnd::MoveWindow
     b)变量关联
      选中按钮一>右击一>添加变量一>变量类型:MyButton一>变量:button
      最终,button和我们所选中的按钮关联成功,操作button,相当于操作ui上的按钮(Qt的提升)
        
     c)为按钮设置位图
        1)按钮属性: Bitmap一>True
        2)在对话框类中 OnlnitDialog() 做如下处理
         a)创建位图模板
         b)创建位图对象 CBitmap
         c)加载位图资源 CBitmap::LoadBitmap
         b)按钮设置位图 CBUtton::SetBitmap
         e)获取位图大小 CBitmap::GetBitmap
         f)重新设置按钮大小(图片和按钮大小一致) CWnd::MoveWindow
     

    4) 编辑框CEdit

     a)关联类别:Value, Control
      1) Value:标准普通数据类型 CString str;
         关联变量和控件数据的交互更新
       a)把编辑区的内容更新到str中 UpdateData(TRUE);
       b)把str的内容更新到编辑区中 UpdateData(FALSE);
       
      2) Control:控件类型
       控件类型的对象即为ui上的控件

     b)常用属性设置
      1) Number —> True 只能输入数字
      2) Password —> True 密码模式
      3) Want return —> True 接收回车键,自动换行,只有在多行模式下,才能换行
      4) Multiline —> True 多行模式
      5) Auto VScroll —> True
         Vertical Scroll —> True 当垂直方式字符太多,自动出现滚动条
      6) Read Only —> True 只读

     c)复制小案例
     关联Control: 控件类型,只能关联一次
      1)获取编辑区内容 CWnd::GetWindowText
      2)设置编辑区内容 CWnd::SetWindowText
      3)关闭对话框窗口
         CDialog::OnOK();
         CDialog::OnCance1();

    5)单选框、复选框(特殊的CButton,没有单选框,复选框类型)

     a)单选框
      1) 属性设置: 顺序排放 Ctrl+D 查看标号
      2) 同组第一个按钮 Group 设置为 TRUE
      3) 初始化单选框 CWnd::CheckRadioButton
      4) 按钮是否按下 CWnd::IsDlgButtonChecked

     b)复选框

      1)常关联变量 BOOL  UpdateData(TRUE),UpdateData(FALSE);
      2)设置按钮选择状态 CButton::SetCheck
      3)获取按钮选择状态 CButton::GetCheck
    UpdateData(TRUE)//获取编辑区内容
    UpdateData(FALSE)//把内容更新到编辑区

    6)列表框CListBox

     a)给列表框添加一个字符串 CListBox::AddString
     b)选中列表列表框某一项,自动触发事件: LBN_SELCHANGE
        1)获取当前选中项 CListBox::GetCurSel
        2)获取指定位置的内容 CListBox::GetText
     c)删除指定位置的字符串 CListBox::DeleteString
     d)在指定位置插入字符串 CListBox::InsertString

    7)组合框(下拉框)CComboBox

        a)获取内容: CComboBox::GetLBText
            其它接口和 CListBox 的用法几乎一样
        b)属性设置
          1) data:设置内容,不同内容间用英文的分号“;”分隔
          2) type:dropdown可编辑,droplist只显示

    8)滚动条 CScrollBar(Horizontal Scroll Bar)

     a) 设置给定滚动条的最小和最大位置: CScrollBar::SetScrollRange
     b) 获取一个滚动框的当前位置: CScrollBar::GetScrollPos
     c) 设置一个滚动框的当前位置: CScrollBar::SetScrollPos
     d) 处理滚动条的事件,不是在滚动条控件本身处理,是在滚动条所属的父窗口处理(对话框类)
      处理信号:WM_HSCROLL
     e) 滚动条位置关系
      switch (nSBCode)//判断滚动条的哪一部分
      {
      case SB_THUMBPOSITION://滑块位置
         break;
      case SB_LINELEFT://向左的箭头
         break;
      case SB_LINERIGHT://向左的箭头
         break;
      case SB_PAGELEFT:  //箭头和滑块之间左边
         break;
      case SB_PAGERIGHT:  //箭头和滑块之间右边
         break; 
      default:
         break;
      }

    9) 微调(旋转)按钮 SpinControl 的使用

     a)属性设置
       Auto Buddy -> True
       Set buddy integer -> True
     b)微调(旋转)按钮的顺序比伙伴大1,且不能出现0  (Ctrl+D查看)
         
    10)列表视图控件CListCtrl
     a)属性设置 view -> Report(报表方式)
     b)常用接口
      1)设置列表风格 CListCtrl::SetExtendedStyle
       LVS_EX_FULLROWSELECT: 选择整行
       LVS_EX_GRIDLINES: 网格方式
       具体有哪些风格,可通过MSDN查看

      2)获取列表风格 CListCtrl::SetExtendedStyle
       具体有哪些风格,可通过MSDN查看
      
      3)插入某列 CListCtrl::InsertColumn
      
      4)字符串格式化
       CString str
       str.Format( T(”张三_%d"),i)
       
      5)插入新项后,才能设置子项内容
       a)插入新项 (确定第几行) CListCtrl::InsertItem
       b)设置子项内容 (设置第几列) CListCtrl::SetItemText

    11) 树视图控件CTreeCtrl

     a) 常用属性设置
      has buttons一>true
      has lines一>true
      lines at root一>true
     b)写代码流程
      1) 加载自定义图标
       a) 获取应用程序对象指针 AfxGetApp()
       b) 加载自定义图标 CWinApp::Loadlcon
      2) 创建图像列表
       a) .h文件类中定义图形列表(CIsmageList)对象
       b) 创建图像列表 ClmageList::Create
       c) 图像列表追加图标 ClmageList::Add
      4)设置图形状态列表 CTreeCtrl::SetImageList
      5)插入节点 CTreeCtrl::InsertItem
      6)设置默认选中项 CTreeCtrl::SelectItem


    12)标签控件 CTabCtrl

     1) 在ui工具箱拖放 Tab Control
     2) 把TabSheet.h和TabSheet.cpp放在项目文件同级目录,并且添加到工程目录中
     3) 给ui上 Tab Control 关联Control类型 (CTabSheet)
     4) CTabSheet对象添加对话框
      a) 资源视图一>Dialog一>右击一>插入Dialog
      b) 设置相应属性:
       Style一>Child (子窗口)
       Border一>None (无边框)
      c) 自定义类:点击对话框模板一>右击一>添加类
      d) 主对话框类中,定义自定义类对象
      e) 主对话框类中 OnInitDialog() 做初始化工作
      f) CTabSheet添加对话框 CTabSheet::AddPage()
       tmp.AddPage(_T(”系统管理”),&tl, tab1):
        tmp:为CTabSheet对象
        tl:需要添加对话框对象
        tab1:对话框ID
      g) 显示窗口:CTabSheet::Show()

  • 相关阅读:
    CDH中flume是已经启动着了…
    CDH中,执行HIVE脚本表联查权限问题。。
    linux screen 命令详解(未验证+研究)
    004ICMP-type对应表
    003iptables 命令介绍
    002利用zabbix监控某个目录大小
    Nginx图片剪裁模块探究 http_image_filter_module
    linux增加自定义path和manpath
    TortoiseSVN中图标的含义
    Linux SVN 搭建(YUM)安装
  • 原文地址:https://www.cnblogs.com/yeyeye123/p/11032297.html
Copyright © 2020-2023  润新知