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()

posted on 2019-06-16 17:47  yeyeye123  阅读(313)  评论(0编辑  收藏  举报

导航