基础控件的使用

  1. 创建和初始化
  2. 消息的响应
  3. 控制函数

按钮

  1. 使用CButton来绑定按钮控件. 一般不需要初始化
  2. 消息的响应 : 只有按钮被单击的消息.
  3. 控制函数 : SetWindowText来设置按钮的标题.

单选框

  1. 使用CButton绑定单选框控件 .
  2. 初始化
    1. 单选框一般都是分组. 同一组的单选框的选中状态是互斥的.
    2. 需要将一组单选框中的第一个按钮的分组属性设置为True
      1571962347970.png
      分组属性只能给第一个控件设置
    3. 单选框也是按钮中的一种, 也有被点击的消息,响应方式和按钮一样.
    4. 操作函数:
      1. 单选框控件绑定了CButton类的变量的话, 可以使用GetCheck和SetCheck来获取和设置单选框的选中状态.
  3. 单选框控件绑定了int类型的变量的话, int变量的值是一个分组中的单选框的序号. 使用UpdateData的时候,int类型的值是几,分组中的第几个单选框就被选中.
  4. 只需将分组中的第1个单选框添加int类型的变量即可.
  5. 修改了int类型变量的值在UpdateData的时候, MFC会自动操作同一分组内的其它单选框.

多选框

  1. 初始化
  2. 消息 : 和按钮一样.
  3. 操作函数:
    1. 绑定了CButton类型的变量, 可以GetCheck和SetCheck
    2. 帮定了以值类型的, 可以使用UpdateData来获取和修改选中状态.

编辑框

  1. 初始化 : 在资源编辑视图中的属性栏设置.
  2. 消息 : 编辑框文本被修改: EN_CHANGE
  3. 操作函数:
    1. 绑定了CEdit类型变量: ```c // 设置编辑框的最大文本个数 m_edit.SetLimitText(1000); // 设置是否是只读 m_edit.SetReadOnly(0); // 密码风格的时候,显示的字符,默认是’*’ m_edit.SetPasswordChar(‘@’); // 获取文本 CString buff; m_edit.GetWindowText(buff);

// 获取一共有几行 DWORD dwLineCount= m_edit.GetLineCount(); // 滚到到指定行. m_edit.LineScroll(dwLineCount);

  1. <a name="212779d4"></a>
  2. ## 列表框
  3. 1. 初始化
  4. 2. 消息:
  5. 1. SEL_CHANGE : 当前选中项被修改
  6. 3. 操作函数
  7. 1. 控件类型绑定(CListBox):
  8. 1. AddString - 将一行字符串添加到列表框.
  9. 2. ResetContent - 清空所有项
  10. 3. GetCurSel - 获取当前选中项的下标
  11. 4. GetText - 获取指定下标的文本
  12. 5. 更多函数可以F1 CListBox类查看帮助文档.
  13. <a name="d5ddc4f3"></a>
  14. ## 下拉框(组合框)
  15. 下拉框也称为组合框, 它是编辑框和列表框的组合
  16. 1. 初始化 : 有一个列表是否排序的属性
  17. 2. 消息 : ON_CBN_SELENDCANCEL - 当前选中项改变了
  18. 3. 操作函数
  19. 1. AddString - 向列表框添加文本
  20. 2. GetCurSel - 获取列表框的当前选中项
  21. 3. GetLBText - 获取列表框的指定行的文本
  22. 4. ResetContent - 清空列表框的所有节点
  23. 5. SetCurSel - 设置列表框的当前选中项
  24. 6. SetEditSel - 设置编辑框的文本
  25. <a name="1af29b1f"></a>
  26. ## 静态文本
  27. <a name="14d34236"></a>
  28. ### 标签
  29. 一般不需要绑定变量, 不需要响应消息. 标签只是一个文本提示而已.
  30. 如果想要动态修改标签的文本, 可以先得到标签控件的窗口句柄, 使用SetWindowText来修改即可.
  31. <a name="0d19ffac"></a>
  32. ### 图片控件
  33. 1. 初始化
  34. 1. 修改资源ID(类向导不会自动静态文本类的控件的资源ID)
  35. 2. 将type属性修改成bitmap
  36. 3. 将center image改为true , 图片控件不能缩放要显示的图片, 如果图片比控件大, 控件会自动将大小修改成和图片一样大. 该属性设置为true之后, 控件大小就不会自动跟随图片大小, 而是使用固定大小, 并只只显示图片的部分内容.
  37. 2. 消息 : 不需要处理
  38. 3. 操作函数:
  39. 1. 绑定了控件类型(CStatic)
  40. 4. 给图片控件设置图片
  41. 1. 使用资源
  42. 1. 先将一张位图添加到资源中
  43. 2. 在图片控件的Image属性中填写位图的资源ID
  44. <br />![1571966795130.png](https://cdn.nlark.com/yuque/0/2019/png/599030/1574943876985-2461666a-afc7-4471-bac1-684d5010e14e.png#align=left&display=inline&height=71&name=1571966795130.png&originHeight=71&originWidth=541&size=3483&status=done&width=541)
  45. 3. 调用CStatic.SetBitmap函数, 将位图的资源句柄设置进去.
  46. ```c
  47. // 加载位图,得到资源句柄
  48. HBITMAP hBitmap =
  49. LoadBitmap(AfxGetInstanceHandle(),
  50. (TCHAR*)IDB_BITMAP1);
  51. m_pic.SetBitmap(hBitmap);

2.使用磁盘中的图片文件

  1. CImage img;
  2. img.Load(L"位图2.bmp");
  3. pic.SetBitmap(img);
  1. 3. 加载GIF动图
  2. 1. 默认的CStatic类不支持这个功能
  3. 2. 需要自定义CStatic类(网上有CPictureEx类)
  4. 3. 添加图片控件, 添加变量的时候, 变量的类型使用CPictureEx
  5. 4. 在项目中导入CPictureEx类的源码
  6. 5. 在对话框初始化函数中. 使用CPictureEx.Load函数加载GIF图片
  7. 6. 使用CPictureEx.Draw函数来开始绘制GIF图片

滑块

  1. 初始化
    1. 设置水平或垂直的风格
      1571968896132.png
    2. 设置滑块的取值范围
      1. SetRange();
  2. 消息 :
    1. 如果滑块是水平风格, 向父窗口发送WM_HSCROLL消息
    2. 如果滑块是垂直风格, 向父窗口发送WM_VSCROLL消息
  3. 操作函数
    1. 控件类型绑定(CSliderCtrl)
      1. 初始化范围的函数:SetRange
      2. 获取当前位置:GetPos
      3. 设置当前位置:SetPos

进度条

  1. 进度条实际就是一个在界面上修改位置的滑块,但是通过SetPos来修改进度条的进度.
  2. 进度条和滑块外观是不一样的, 但也有水平和垂直
  3. 操作函数和滑块一模一样
    1. 通过SetRange 设置范围
    2. 通过SetPos来设置位置
    3. 通过GetPos来获取当前的位置

菜单栏

  1. 添加一个菜单资源
  2. 使用CMenu来加载菜单
  3. 在OnInitDialog函数中使用SetMenu函数来设置程序的菜单栏
  1. // 加载菜单
  2. m_menu.LoadMenu(IDR_MENU1);
  3. // 设置菜单栏
  4. SetMenu(&m_menu);// m_menu类型是CMenu ;

菜单栏的消息响应:

  1. 1571974404643.png
  2. 1571974425930.png

弹出菜单

  1. 不能弹出根菜单

状态栏

  1. // 2. 设置指示器的ID
  2. UINT ids[] = { 1000,1001 };
  3. m_statusBar.SetIndicators(ids, 2);
  4. // 3. 设置面板的宽度
  5. m_statusBar.SetPaneInfo(0, 0, 0, 120);
  6. m_statusBar.SetPaneInfo(1, 1, 0, 80);
  7. // 4. 设置面板的文本
  8. m_statusBar.SetPaneText(0, L"程序启动完毕");
  9. m_statusBar.SetPaneText(1, L"哈哈哈");

还需要在WM_SIZE的消息中调用函数来自动修改状态栏的位置

  1. RepositionBars(AFX_IDW_CONTROLBAR_FIRST,
  2. AFX_IDW_CONTROLBAR_LAST, 0);

工具栏

  1. 加载:

    1. m_toolBar.Create(this);
    2. m_toolBar.LoadToolBar(IDR_TOOLBAR1);
  2. 响应点击消息

    1. 先得到工具栏按钮的ID:
      1. 1571975580341.png
    2. 响应WM_COMMAND消息
    3. 在wParam保存就是按钮ID`

通用控件

列表控件

树控件

TAB控件

项目

mfc_002.zip
logon.zip
PictureEx.hPictureEx.cpp