• 十、MFC控件(二)


    一、滑块控件

    1、控件使用

    (1)相关类

            CSliderCtrl类,父类为CWnd,封装了关于滑块控件的各种操作

    (2)常见操作

            设置范围

                    CSliderCtrl::SetRange

            设置位置

                    CSliderCtrl::SetPos

            获取位置

                    CSliderCtrl::GetPos

    (3)消息

            当滑块的位置改变之后

                    滑块控件发出WM_COMMAND消息(通知码 NM_CUSTOMDRAW)

    (4)在工具箱中名称为:Slider Control

    1、在项目中使用滑块控件

    (1)使用类向导添加滑块控件绑定的控件类对象

    (2)在对话框初始化函数设置滑块范围与位置

    1. BOOL CMFCCtrl1Dlg::OnInitDialog()
    2. {
    3. CDialogEx::OnInitDialog();
    4. // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
    5. // 执行此操作
    6. SetIcon(m_hIcon, TRUE); // 设置大图标
    7. SetIcon(m_hIcon, FALSE); // 设置小图标
    8. ShowWindow(SW_MINIMIZE);
    9. // TODO: 在此添加额外的初始化代码
    10. m_slider.SetRange(0, 100);
    11. m_slider.SetPos(30);
    12. return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
    13. }

    (3)添加滑块消息处理函数,在处理函数中获取滑块位置

    1. void CMFCCtrl1Dlg::OnCustomdrawSlider1(NMHDR *pNMHDR, LRESULT *pResult)
    2. {
    3. LPNMCUSTOMDRAW pNMCD = reinterpret_cast(pNMHDR);
    4. // TODO: 在此添加控件通知处理程序代码
    5. int nPos = m_slider.GetPos();
    6. CString str;
    7. str.Format("滑块位置:%d", nPos);
    8. this->SetWindowText(str); //设置对话框标题
    9. *pResult = 0;
    10. }

    二、进度条控件

    1、控件介绍

    (1)相关类

            CProgressCtrl类,父类为CWnd,封装了关于进度条控件的操作

    (2)常见操作

            设置范围

                    CProgressCtrl::SetRange

            设置位置

                    CProgressCtrl::SetPos

            获取位置

                    CProgressCtrl::GetPos

    (3)工具箱控件名称:Progress Control

    2、在项目中使用

    (1)使用类向导添加控件绑定控件类对象

    (2)在对话框处理函数中设置进度条范围与位置

    1. BOOL CMFCCtrl1Dlg::OnInitDialog()
    2. {
    3. CDialogEx::OnInitDialog();
    4. // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
    5. // 执行此操作
    6. SetIcon(m_hIcon, TRUE); // 设置大图标
    7. SetIcon(m_hIcon, FALSE); // 设置小图标
    8. ShowWindow(SW_MINIMIZE);
    9. // TODO: 在此添加额外的初始化代码
    10. m_slider.SetRange(0, 100);
    11. m_slider.SetPos(30);
    12. m_pro.SetRange(0, 100);
    13. m_pro.SetPos(50);
    14. return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
    15. }

    三、文件搜索类

    1、文件搜索类介绍

    (1)相关类

            CFileFind类,封装了关于文件遍历的操作

    (2)常见操作

            开启文件查找(判断路径是否正确),成功返回TRUE,失败返回FALSE

                    CFileFind::FindFile

            找到当前文件,返回下一个文件是否存在

                    CFileFind::FindNextFind

            调用一些列GetXXX函数获取文件信息

                    CFileFind::GetFileName / CFileFind::GetFilePath

            调用一系列IsXXX函数判断文件属性

                    CFileFind::IsDorectory / CFileFind::IsDots(. / ..)

            关闭查找

                    CFileFind::Close

    2、创建项目调用文件搜索操作

    (1)创建(Win32控制台)项目(MFCFileFind)

    (2)编写程序

    1. #include
    2. #include
    3. using namespace std;
    4. void Find(CString path)
    5. {
    6. CString strPath = path;
    7. strPath+="/*.*";
    8. CFileFind find; //文件搜索类对象
    9. BOOL bGoFind = find.FindFile(strPath);
    10. while (bGoFind)
    11. {
    12. bGoFind = find.FindNextFile(); //找到当前文件,将文件信息保存到find私有成员变量,使用成员函数可以访问
    13. if (find.IsDirectory())
    14. {
    15. cout<<"["<GetFileName()<<"]"<
    16. if (! find.IsDots()) //不是 .或..
    17. {
    18. Find(find.GetFilePath()); //递归遍历
    19. }
    20. }
    21. else
    22. {
    23. cout<<"Name: "<GetFileName()<
    24. }
    25. }
    26. find.Close();
    27. }
    28. int main()
    29. {
    30. Find("C:");
    31. return 0;
    32. }

    四、列表控件

    1、控件介绍

    (1)相关类

            CListCtrl类,父类为CWnd,封装了关于列表控件的操作

    (2)风格

            图标(LVS_ICON),相当于文件夹中等图标

            小图标(LVS_SMALLICON),相当于文件夹小图标

            列表(LVS_LIST),相当于文件夹列表

            报表(LVS_REPORT),相当于文件夹详细信息

            修改风格

                    CWnd::ModifStyle

    (3)常见操作

            添加选项

                    CListCtrl::InsertItem

            删除选项

                    CListCtrl::CListCtrl::DeleteItem / CListCtrl::DeleteAllItem

            添加列

                    CListCtrl::InsertColumn

            设置文本内容

                    CListCtrl::SetItemText

            设置图像

                    CListCtrl::SetImageList

            设置附加数据

                    CListCtrl::SetItemData

            获取附加数据

                    CListCtrl::GetItemData

    (4)消息

            当列表被双击

                    发出WM_COMMAND消息(通知码 NM_DBCLCK)        

    (5)在工具箱名称:List Condtrol

    2、在项目中使用

    (1)创建对话框项目(MFCList)

    (2)添加列表控件(从工具箱中拖拽 List Condtrol控件)

    (3)添加下拉列表控件(Combo Box),设置为Drop List,用于选择列表控件的风格

    (4)分别给列表和下拉列表添加绑定控件类对象

    (5)在对话框初始化函数给下拉列表添加选项

    1. m_dropList.AddString("图标");
    2. m_dropList.AddString("小图标");
    3. m_dropList.AddString("列表");
    4. m_dropList.AddString("报表");
    5. m_dropList.SetCurSel(0); //设置默认选项

    (6)在下拉列表消息处理函数,修改列表风格

    1. void CMFCListDlg::OnSelchangeCombo1()
    2. {
    3. // TODO: 在此添加控件通知处理程序代码
    4. switch (m_dropList.GetCurSel())
    5. {
    6. case 0:
    7. { //图标
    8. m_list.ModifyStyle(LVS_SMALLICON|LVS_LIST|LVS_REPORT, LVS_ICON);
    9. }
    10. break;
    11. case 1:
    12. { //小图标
    13. m_list.ModifyStyle(LVS_ICON|LVS_LIST|LVS_REPORT, LVS_SMALLICON);
    14. }
    15. break;
    16. case 2:
    17. { //列表
    18. m_list.ModifyStyle(LVS_SMALLICON|LVS_ICON|LVS_REPORT, LVS_LIST);
    19. }
    20. break;
    21. case 3:
    22. { //报表
    23. m_list.ModifyStyle(LVS_SMALLICON|LVS_LIST|LVS_ICON, LVS_REPORT);
    24. }
    25. break;
    26. }
    27. }

     (7)在对话框初始化函数添加选项,设置列表的报表风格的列

    1. //报表风格的列
    2. m_list.InsertColumn(0, "名称", LVCFMT_LEFT, 150); //150为列宽
    3. m_list.InsertColumn(1, "修改日期", LVCFMT_LEFT, 150);
    4. m_list.InsertColumn(2, "类型", LVCFMT_LEFT, 150);
    5. m_list.InsertColumn(3, "大小", LVCFMT_LEFT, 150);
    6. //报表风格的经纬线
    7. m_list.SetExtendedStyle(LVS_EX_GRIDLINES); //经纬线
    8. m_list.InsertItem(0, "目录", 0);
    9. m_list.InsertItem(1, "文件", 0);

    (8)添加文本内容(报表风格,其他列的文本内容)

    1. //报表风格的列
    2. m_list.InsertColumn(0, "名称", LVCFMT_LEFT, 150); //150为列宽
    3. m_list.InsertColumn(1, "修改日期", LVCFMT_LEFT, 150);
    4. m_list.InsertColumn(2, "类型", LVCFMT_LEFT, 150);
    5. m_list.InsertColumn(3, "大小", LVCFMT_LEFT, 150);
    6. //报表风格的经纬线
    7. m_list.SetExtendedStyle(LVS_EX_GRIDLINES); //经纬线
    8. m_list.InsertItem(0, "目录", 0);
    9. m_list.SetItemText(0, 1, "2022.1.1");
    10. m_list.SetItemText(0, 2, "Dir");
    11. m_list.SetItemText(0, 3, "3M");
    12. m_list.InsertItem(1, "文件", 0);
    13. m_list.SetItemText(1, 1, "2022.2.2");
    14. m_list.SetItemText(1, 2, "FILE");
    15. m_list.SetItemText(1, 3, "13M");

     (9)添加bmp图片,给列表设置图像

    1. m_dropList.AddString("图标");
    2. m_dropList.AddString("小图标");
    3. m_dropList.AddString("列表");
    4. m_dropList.AddString("报表");
    5. m_dropList.SetCurSel(0); //设置默认选项
    6. //报表风格的列
    7. m_list.InsertColumn(0, "名称", LVCFMT_LEFT, 150); //150为列宽
    8. m_list.InsertColumn(1, "修改日期", LVCFMT_LEFT, 150);
    9. m_list.InsertColumn(2, "类型", LVCFMT_LEFT, 150);
    10. m_list.InsertColumn(3, "大小", LVCFMT_LEFT, 150);
    11. //报表风格的经纬线
    12. m_list.SetExtendedStyle(LVS_EX_GRIDLINES); //经纬线
    13. CImageList* pImageList = new CImageList;
    14. pImageList->Create(IDB_BITMAP1, 24, 1, RGB(255,255,255)); //将IDB_BITMAP1以24列宽裁剪一个图片,去底色RGB(255,255,255)
    15. m_list.SetImageList(pImageList, LVSIL_NORMAL); //图像链表应用在列表空间的图标风格
    16. m_list.SetImageList(pImageList, LVSIL_SMALL); //图像链表应用在列表空间的其他风格
    17. m_list.InsertItem(0, "目录", 0); //最后一个参数为pImageList的第几个元素
    18. m_list.SetItemText(0, 1, "2022.1.1");
    19. m_list.SetItemText(0, 2, "Dir");
    20. m_list.SetItemText(0, 3, "3M");
    21. m_list.InsertItem(1, "文件", 1); //最后一个参数为pImageList的第几个元素
    22. m_list.SetItemText(1, 1, "2022.2.2");
    23. m_list.SetItemText(1, 2, "FILE");
    24. m_list.SetItemText(1, 3, "13M");

     (10)使用文件搜索类,实现列表添加文件

    1. void CMFCListDlg::ShowFile(CString str)
    2. {
    3. CString strPath = str;
    4. strPath+="/*.*";
    5. CFileFind find; //文件搜索类对象
    6. BOOL bGoFind = find.FindFile(strPath);
    7. int n=0;
    8. while (bGoFind)
    9. {
    10. bGoFind = find.FindNextFile(); //找到当前文件,将文件信息保存到find私有成员变量,使用成员函数可以访问
    11. if (find.IsDirectory() && !find.IsDots())
    12. {
    13. m_list.InsertItem(n, find.GetFileName(), 0);
    14. }
    15. else
    16. {
    17. m_list.InsertItem(n, find.GetFileName(), 1);
    18. }
    19. n++;
    20. }
    21. find.Close();
    22. }

     

     (11)使用类向导添加列表消息处理函数

    1. void CMFCListDlg::OnDblclkList1(NMHDR *pNMHDR, LRESULT *pResult)
    2. {
    3. LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast(pNMHDR);
    4. // TODO: 在此添加控件通知处理程序代码
    5. CString* pStrPath = (CString*)m_list.GetItemData(pNMItemActivate->iItem);
    6. if (pStrPath->GetLength() > 0)
    7. {
    8. ShowFile(*pStrPath);
    9. }
    10. *pResult = 0;
    11. }
    1. void CMFCListDlg::ShowFile(CString str)
    2. {
    3. for (int i=0;i
    4. {
    5. CString* pStrPath = (CString*)m_list.GetItemData(i);
    6. if (NULL != pStrPath)
    7. {
    8. delete pStrPath;
    9. }
    10. }
    11. m_list.DeleteAllItems();
    12. CString strPath = str;
    13. strPath+="/*.*";
    14. CFileFind find; //文件搜索类对象
    15. BOOL bGoFind = find.FindFile(strPath);
    16. int n=0;
    17. while (bGoFind)
    18. {
    19. bGoFind = find.FindNextFile(); //找到当前文件,将文件信息保存到find私有成员变量,使用成员函数可以访问
    20. if (find.IsDirectory() && !find.IsDots())
    21. {
    22. m_list.InsertItem(n, find.GetFileName(), 0);
    23. CString *pStrPath = new CString;
    24. *pStrPath = (find.GetFilePath());
    25. m_list.SetItemData(n, (DWORD)pStrPath);
    26. }
    27. else if(!find.IsDots())
    28. {
    29. m_list.InsertItem(n, find.GetFileName(), 1);
    30. CString *pStrPath = new CString;
    31. m_list.SetItemData(n, (DWORD)pStrPath);
    32. }
    33. n++;
    34. }
    35. find.Close();
    36. }

    五、树控件

    1、控件介绍

    (1)相关类

            CTreeCtrl类,父类为CWnd,封装了关于树控件的各种操作

    (2)常见操作

            添加选项

                    CTreeCtrl::InsertItem

            删除选项

                    CTreeCtrl::DeleteItem / DeleteAllItem

            获取选择项

                    CTreeCtrl::GetSelectedItem

            获取选项的文本内容

                    CTreeCtrl::GetItemText

            设置选项的高度

                    CTreeCtrl::

            设置选项的图像

                    CTreeCtrl::SetImageList

    (3)在工具箱中名称为Tree Control

    2、在项目中使用控件

    (1)添加对话框项目(MFCTree)

    (2)添加树控件(从工具栏拖拽 Tree Control)

    (3)使用类向导添加绑定控件类对象

    (4)在对话框初始化函数添加选项

    1. HTREEITEM nRoot = m_tree.InsertItem("树控件1", 0, 0, NULL);
    2. m_tree.InsertItem("树控件1-1", 0, 0, nRoot);
    3. m_tree.InsertItem("树控件1-2", 0, 0, nRoot);
    4. m_tree.InsertItem("树控件1-3", 0, 0, nRoot);
    5. m_tree.InsertItem("树控件1-4", 0, 0, nRoot);

     (5)通过按钮删除选项

    1. void CMFCTreeDlg::OnBnClickedButton1()
    2. {
    3. // TODO: 在此添加控件通知处理程序代码
    4. m_tree.DeleteItem(m_tree.GetSelectedItem());
    5. }

    (6)通过按钮获取文本内容

    1. void CMFCTreeDlg::OnBnClickedButton2()
    2. {
    3. // TODO: 在此添加控件通知处理程序代码
    4. AfxMessageBox( m_tree.GetItemText(m_tree.GetSelectedItem()));
    5. }

    (7)添加bmp资源,设置图标

    1. BOOL CMFCTreeDlg::OnInitDialog()
    2. {
    3. CDialogEx::OnInitDialog();
    4. // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
    5. // 执行此操作
    6. SetIcon(m_hIcon, TRUE); // 设置大图标
    7. SetIcon(m_hIcon, FALSE); // 设置小图标
    8. // TODO: 在此添加额外的初始化代码
    9. CImageList* pImageList = new CImageList;
    10. pImageList->Create(IDB_BITMAP1, 12, 1, RGB(255, 255, 255));
    11. m_tree.SetImageList(pImageList, LVSIL_NORMAL);
    12. HTREEITEM nRoot = m_tree.InsertItem("树控件1", 1, 2, NULL); //被选中设置为2,没有选中为1
    13. m_tree.InsertItem("树控件1-1", 2, 3, nRoot);
    14. m_tree.InsertItem("树控件1-2", 2, 3, nRoot);
    15. m_tree.InsertItem("树控件1-3", 2, 3, nRoot);
    16. m_tree.InsertItem("树控件1-4", 2, 3, nRoot);
    17. m_tree.SetItemHeight(50); //设置选择项高度
    18. return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
    19. }

     

  • 相关阅读:
    抓取网页的含义和URL基本构成
    css 文字溢出问题
    Elasticsearch
    UE5 各种moveto
    又一家芯片新势力杀入车载领域
    java计算机毕业设计航空机票预订系统源码+mysql数据库+系统+LW文档+部署
    git - 拉取远程代码并且不覆盖本地修改的代码
    人工智能 | ShowMeAI资讯日报 #2022.06.30
    面试题:深拷贝、浅拷贝、引用拷贝的区别
    【回归预测】MATLAB 实现基于BP神经网络的多变量回归预测
  • 原文地址:https://blog.csdn.net/liutit/article/details/126190843