MFC - 复杂控件_2

news2024/9/24 6:41:35

前言

  • 各位师傅大家好,我是qmx_07,今天讲解剩下的复杂控件知识点
    请添加图片描述

IP地址栏

  • 绘图准备:
    在这里插入图片描述
  • 调整windows窗口大小、设置 ip address control
  • 设置 Button按钮,修改名称
    在这里插入图片描述
  • 添加IP栏 变量:m_IP

获取IP栏内容

void CMFCApplication3Dlg::OnBnClickedButton1()
{
	// TODO: 在此添加控件通知处理程序代码
	BYTE cIPA, cIPB, cIPC, cIPD;
	if (m_IP.IsBlank())
	{
		AfxMessageBox(L"IP地址栏不能为空");
		return;
	}
	m_IP.GetAddress(cIPA, cIPB, cIPC, cIPD);
	CString csIP;
	csIP.Format(L"%d.%d.%d.%d", cIPA, cIPB, cIPC, cIPD);
	MessageBox(csIP);
}
  • BYTE 0-255 符合ip的习惯
  • IsBlank()判断是否为空
  • GetAddress()获取IP栏的内容
  • 检查IP栏是否为空,将IP栏内容输出到cIPA, cIPB, cIPC, cIPD进行弹窗

清空IP栏内容


void CMFCApplication3Dlg::OnBnClickedButton2()
{
	// TODO: 在此添加控件通知处理程序代码
	m_IP.ClearAddress();
}

  • ClearAddress()清空IP栏内容

设置IP栏内容

void CMFCApplication3Dlg::OnBnClickedButton3()
{
	// TODO: 在此添加控件通知处理程序代码
	char ip[] = "192.168.0.1";
	DWORD dwIP = htonl(inet_addr(ip));
	m_IP.SetAddress(dwIP);
}
  • inet_addr将 IP 地址字符串转换为一个以网络字节序表示的 32 位整数
  • htonl 函数将这个整数转换为主机字节序到网络字节序
  • SetAddress()设置ip地址
  • 将ip地址 进行转换,设置到ip栏里
知识点讲解
  • 网络字节序是指在网络传输中规定的统一的字节顺序,互联网中,通常采用大端字节序,也就是高位字节存储在低地址,低位字节存储在高地址
  • 主机字节序则是因不同的计算机体系结构而有所不同,主要分为大端字节序和小端字节序,Intel x86 系列的 CPU 采用小端字节序,而一些其他的处理器架构可能采用大端字节序
  • 在网络编程中,为了确保不同主机之间能够正确地传输和解析数据,需要进行字节序的转换。

画面演示

在这里插入图片描述

树控件

  • 绘图准备:
    在这里插入图片描述

  • 调整windows窗口大小,设置Tree control控件,设置属性Has Lines、Has Buttons 为True

  • 设置Button按钮
    在这里插入图片描述

  • 设置变量:m_Tree
    在这里插入图片描述

  • 通过类向导,进入OninitDialog

	HTREEITEM hRoot = m_Tree.InsertItem(L"Root", TVI_ROOT, TVI_LAST);
	HTREEITEM hSubNode = m_Tree.InsertItem(L"SubNode",hRoot, TVI_LAST);
	HTREEITEM hSubNode_Sub1 = m_Tree.InsertItem(L"SubNode1", hSubNode, TVI_LAST);
	HTREEITEM hSubNode_Sub2 = m_Tree.InsertItem(L"SubNode2", hSubNode, TVI_LAST);
	HTREEITEM hSubNode_Sub3 = m_Tree.InsertItem(L"SubNode3", hSubNode, TVI_LAST);
	HTREEITEM hSubNode_Sub4 = m_Tree.InsertItem(L"SubNode4", hSubNode, TVI_LAST);
  • TVI_ROOT 为root节点
  • InsertItem插入节点
  • TVI_LAST 向后插入
    画面演示:
    在这里插入图片描述

当前选中

void CMFCApplication3Dlg::OnBnClickedButton4()
{
	// TODO: 在此添加控件通知处理程序代码
	HTREEITEM hCurNode = m_Tree.GetSelectedItem();
	CString Text = m_Tree.GetItemText(hCurNode);
	AfxMessageBox(Text);
}
  • GetSelectedItem()获取当前的对象
  • GetItemText()获取文本信息

删除选中

void CMFCApplication3Dlg::OnBnClickedButton5()
{
	// TODO: 在此添加控件通知处理程序代码
	HTREEITEM hCurNode = m_Tree.GetSelectedItem();
	m_Tree.DeleteItem(hCurNode);
}
  • DeleteItem()删除当前的对象

删除全部

void CMFCApplication3Dlg::OnBnClickedButton6()
{
	// TODO: 在此添加控件通知处理程序代码
	m_Tree.DeleteAllItems();
}
  • DeleteAllItems()删除全部对象

画面演示

在这里插入图片描述

列表

  • 绘图准备:
    在这里插入图片描述
  • 调整windows窗口大小,设置 List control 列表,设置属性:View 为report报表
    在这里插入图片描述
  • 通过类向导,进入OnInitDialog
	m_File_List.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
	m_File_List.InsertColumn(0, L"Name", 0, 100);
	m_File_List.InsertColumn(1, L"Path", 0, 100);
	m_File_List.InsertColumn(2, L"Title", 0, 100);
  • LVS_EX_GRIDLINES 使用网线格
  • LVS_EX_FULLROWSELECT整行选中
  • InsertColumn() :
  • 第一个参数 为 索引列
  • 第二个参数为 名称
  • 第三个参数为 对齐方式
  • 第四个参数为 宽度
    画面演示:
    在这里插入图片描述

模拟windows文件夹

	m_File_List.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
	m_File_List.InsertColumn(0, L"Name", 0, 100);
	m_File_List.InsertColumn(1, L"Path", 0, 200);
	m_File_List.InsertColumn(2, L"Title", 0, 100);

	DWORD Index = 0;
	CFileFind finder;
	BOOL Ret = finder.FindFile(L"G:\\MFC_Demo\\*.*");
	while (Ret)
	{
		Ret = finder.FindNextFileW();
		m_File_List.InsertItem(Index, finder.GetFileName(), 0);
		m_File_List.SetItemText(Index, 1, finder.GetFilePath());
		m_File_List.SetItemText(Index, 2, finder.GetFileTitle());
		Index++;
	}
  • 利用之前学习的文件类 CFileFind 进行文件遍历插入
  • InsertItem(): 第一个参数是列,第二个参数是内容,第三个不使用特定图标
  • SetItemText():第一个是列,第二个是行,第三个是内容
    文件素材:
    在这里插入图片描述

画面演示:
在这里插入图片描述

为windows文件夹 设置右键菜单功能

在这里插入图片描述

  • 添加菜单
    在这里插入图片描述
  • 类向导创建右键命令 NM_BCLICK
void CMFCApplication3Dlg::OnRclickList2(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
	// TODO: 在此添加控件通知处理程序代码
	POINT pt = { 0 };
	GetCursorPos(&pt);//获取鼠标的位置
	HMENU hMenu = LoadMenu((HINSTANCE)GetWindowLongPtr(m_hWnd, GWLP_HINSTANCE), MAKEINTRESOURCE(IDR_MENU1));//加载IDR_MENU1菜单
	HMENU hSubMenu = GetSubMenu(hMenu, NULL);//加载子菜单
	TrackPopupMenu(hSubMenu, TPM_CENTERALIGN, pt.x, pt.y, 0, m_hWnd, NULL);//弹出菜单
	*pResult = 0;
}

  • 设置显示右键菜单,具体上一节有相关说明
    在这里插入图片描述

  • 为三个选项添加 事件处理程序

获取文本
void CMFCApplication3Dlg::On32771()
{
	// TODO: 在此添加命令处理程序代码
	//获取文本
	int nPos = (int)m_File_List.GetFirstSelectedItemPosition();
	nPos -= 1;
	CString Buffer = m_File_List.GetItemText(nPos , 0);
	AfxMessageBox(Buffer);
}
  • GetFirstSelectedItemPosition() 这个函数 获取到的索引值 偏差值为1,所以需要-=1
  • GetItemText()第一个参数为获取的列,第二个参数为获取的行
删除一行
void CMFCApplication3Dlg::On32772()
{
	// TODO: 在此添加命令处理程序代码
	//删除一行
	int nPos = (int)m_File_List.GetFirstSelectedItemPosition();
	nPos -= 1;
	m_File_List.DeleteItem(nPos);
}

  • DeleteItem() 删除对象,由于LVS_EX_FULLROWSELECT ,可以直接删除一行数据
删除全部
void CMFCApplication3Dlg::On32773()
{
	// TODO: 在此添加命令处理程序代码
	//删除全部
	m_File_List.DeleteAllItems();
}
  • DeleteAllItems() 删除全部对象
画面演示

在这里插入图片描述

表格

  • 绘图准备:
    在这里插入图片描述
  • 调整windows窗口大小,设置Tab control
    在这里插入图片描述
  • 为表格添加变量: m_Tab
  • 进入OnInitDiaglog
	m_Tab.InsertItem(0, L"Page0");
	m_Tab.InsertItem(1, L"Page1");
	m_Tab.InsertItem(2, L"Page2");

画面演示:
在这里插入图片描述

  • 有了画面效果,还需要创建对话框
    在这里插入图片描述
  • 点击创建Dialog对话框
    在这里插入图片描述
  • 将Border 设置为NULL,Style设置为Child,创建三个对话框
    在这里插入图片描述
  • 为每个对话框 创建类
  • 在这里插入图片描述
  • 在主程序头文件,引用
    在这里插入图片描述
  • 创建类变量
  • 在OnInitDialog里写下面程序:
	page1.Create(IDD_DIALOG1, &m_Tab);
	page2.Create(IDD_DIALOG2, &m_Tab);
	page3.Create(IDD_DIALOG3, &m_Tab);

	CRect rs;
	m_Tab.GetClientRect(rs);
	rs.top += 20;
	page1.MoveWindow(rs);
	page2.MoveWindow(rs);
	page3.MoveWindow(rs);
  • 创建三个对话框,但是会产生覆盖效果,看不到其他的标签页
  • 所以要进行移动
    在这里插入图片描述
  • 为表格设置 事件处理程序
void CMFCApplication3Dlg::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult)
{
	// TODO: 在此添加控件通知处理程序代码
	int nCurSel = m_Tab.GetCurSel();
	switch (nCurSel)
	{
	case 0:
		page1.ShowWindow(SW_SHOW);
		page2.ShowWindow(SW_HIDE);
		page3.ShowWindow(SW_HIDE);
		break;

	case 1:
		page1.ShowWindow(SW_HIDE);
		page2.ShowWindow(SW_SHOW);
		page3.ShowWindow(SW_HIDE);
		break;
	case 2:
		page1.ShowWindow(SW_HIDE);
		page2.ShowWindow(SW_HIDE);
		page3.ShowWindow(SW_SHOW);
		break;
	default:
		break;
	}
	*pResult = 0;
}
  • 获取所点击的标签页,让其他页面隐藏
    画面效果:
    在这里插入图片描述

总结

  • 我们学习了IP地址栏,树控件,列表,表格等复杂控件的基本使用,以及对话框的创建与绑定

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2159706.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++ | Leetcode C++题解之第433题最小基因变化

题目&#xff1a; 题解&#xff1a; class Solution { public:int minMutation(string start, string end, vector<string>& bank) {int m start.size();int n bank.size();vector<vector<int>> adj(n);int endIndex -1;for (int i 0; i < n; i)…

滚动轴承故障诊断、预测与分类综合数据集

独家整理 滚动轴承数据集 故障诊断&#xff0c;预测、分类 最全套数据集 可做对比实验 拍就发自动发货 1.CWRU西储大学轴承数据集 2.MFPT机械故障协会数据集 3.XJTU西安交通大学数据集 4.渥太华变速轴承轴承数据集 5.江南大学轴承数据集 滚动轴承故障诊断、预测与分类综合数据集…

CORS解决浏览器跨域请求(同源策略)限制原理、后端springboot CROS跨域解决方案

文章目录 1 浏览器的同源策略1.1 什么是源&#xff08;origin&#xff09;&#xff1f;1.2 跨域请求&#xff1f;1.3 同源策略&#xff08;跨域限制&#xff09;是什么&#xff1f;1.3.1 同源策略的具体限制&#xff1f;1.3.2 浏览器CORS校验 2 CORS解决Ajax跨域问题2.1 CORS概…

周家庄智慧旅游小程序

项目概述 周家庄智慧旅游小程序将通过数字化手段提升游客的旅游体验&#xff0c;依托周家庄的自然与文化资源&#xff0c;打造智慧旅游新模式。该小程序将结合虚拟现实&#xff08;VR&#xff09;、增强现实&#xff08;AR&#xff09;和人工智能等技术&#xff0c;提供丰富的…

Java 中的垃圾回收综合讲解

Java 垃圾收集综合指南 Java 中的垃圾收集 (GC) 是 Java 虚拟机 (JVM) 通过删除应用程序中不再可访问的对象来自动回收内存的过程。这有助于防止内存泄漏并优化活动对象的可用内存&#xff0c;从而保持 Java 应用程序的性能和效率。 在 Java 中配置垃圾收集器 要在 Java 中…

Java语言程序设计基础篇_编程练习题***18.33 (游戏:骑士旅途的动画)

目录 ***18.33 (游戏:骑士旅途的动画) 习题思路 代码示例 动画演示 ***18.33 (游戏:骑士旅途的动画) 为骑士旅途的问题编写一个程序&#xff0c;该程序应该允许用户将骑士放到任何一个起始正方形&#xff0c;并单击Solve按钮&#xff0c;用动画展示骑士沿着路径的移动&…

2024年信息安全企业CRM选型与应用研究报告

数字化的生活给人们带来便利的同时也带来一定的信息安全隐患&#xff0c;如网络侵权、泄露用户隐私、黑客攻击等。在互联网高度发展的今天&#xff0c;信息安全与我们每个人、每个组织甚至每个国家都息息相关。 信息安全行业蓬勃发展。根据智研咨询数据&#xff0c;2021年&…

3DMAX乐高建筑生成器插件LegoBuilding使用方法详解

3DMAX乐高建筑生成器插件LegoBuilding使用教程 3DMAX乐高建筑生成器插件LegoBuilding&#xff0c;一键批量生成随机的乐高积木样式建筑群&#xff0c;可作为配景楼建模使用。可根据闭合样条线画定范围或地形&#xff08;网格&#xff09;对象表面范围和起伏批量生成随机形状的乐…

深入理解音视频pts,dts,time_base以及时间数学公式

引入 首先介绍一下基础名词 DTS&#xff08;Decoding Time Stamp&#xff09;&#xff1a;即解码时间戳&#xff0c;这个时间戳的意义在于告诉播放器该在什么时候解码这一帧的数据。当数据没b帧时&#xff0c;dts pts&#xff0c;有兴趣可参阅我前面视频知识类文章。 PTS&a…

MyBatis - 动态SQL

前言 我们在某网站填写个人信息时&#xff0c;时常会遇到可以选填的空&#xff08;即可填&#xff0c;可不填&#xff09;&#xff0c;由于之前讲过的Java中的SQL语句都是固定的&#xff0c;且我们不可能对所有情况都写出与之对应的插入语句&#xff08;太过繁琐&#xff09;&…

虚幻引擎的三种输入模式和将控件显示到屏幕上

首先要知道一个概念 , HUD 和 Input 都是由 PlayerController 来控制的 而虚幻的Input控制模式有三种 Set Input Mode Game Only (设置输入模式仅限游戏): 视角会跟着鼠标旋转 , 就是正常游戏的模式 , 这也是游戏默认输入模式 Set Input Mode UI Only (设置输入模式仅限UI): …

【操作系统强化】王道强化一轮笔记

第一章 计算机系统概述 考点1 操作系统的概念、特征和功能 1. 2. 考点2 内核态与用户态 1. 2.用户态和内核态之间的切换本质上就是应用程序和操作系统对CPU控制器的切换 考点3 中断和异常 1. 2. 考点4 系统调用 1. 2. 3.C 考点5 操作系统引导 1. 2. ①磁盘的物理格式化&…

APP自动化中 ADB Monkey用法

一、monkey是干什么的&#xff1f; 我们可以使用monkey做手机端性能的压力测试&#xff0c;稳定性测试 二、monkey在使用的时候&#xff0c;他的运行特性 monkey默认配置下执行&#xff0c;会在手机中随机的点击或者轻触我们的手机中应用&#xff0c;不过这个时候&#xff0…

在Windows系统上安装的 flatbuffers C++ 库

步骤一 下载:https://github.com/google/flatbuffers git clone gitgithub.com:google/flatbuffers.git步骤二 打开安装目录,然后再打开该目录下的powershell, 新建build目录 cd build cmake ..步骤三 进入步骤二生成的build目录里面,点击FlatBuffers.sln,打开vs2019 补充…

信息安全工程师(13)网络攻击一般过程

前言 网络攻击的一般过程是一个复杂且系统化的行为&#xff0c;其目标往往在于未经授权地访问、破坏或窃取目标系统的信息。 一、侦查与信息收集阶段 开放源情报收集&#xff1a;攻击者首先会通过搜索引擎、社交媒体、论坛等公开渠道获取目标的基本信息&#xff0c;如姓名、地址…

【经验分享】电商api接口——各类商品数据一键获取

目前&#xff0c;双十一促销活动正在火爆预热进行中。大促期间&#xff0c;消费者常常会做攻略以防被坑&#xff0c;而活动期间&#xff0c;品牌商家方也需要有所行动&#xff0c;避免一些不必要的损失。 大促期间&#xff0c;商家前前后后的改价活动往往比较频繁&#xff0c;…

超分之SPIN

Lightweight image super-resolution with superpixel token interaction[C]利用超像素token交互实现轻量级图像超分辨率Zhang A, Ren W, Liu Y, et al.Proceedings of the IEEE/CVF International Conference on Computer Vision. 2023: 12728-12737. 文章目录 摘要1. 引言2. …

【开源免费】基于SpringBoot+Vue.JS体育馆管理系统(JAVA毕业设计)

本文项目编号 T 048 &#xff0c;文末自助获取源码 \color{red}{T048&#xff0c;文末自助获取源码} T048&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析5.4 用例设计 六、核…

元器件数据手册识别工具

数据手册识别方案&#xff0c;目前有多家厂商实现了这个功能&#xff0c;分别采用不同的技术路线实现。 基于AI方法&#xff1a;使用大量的数据手册进行训练&#xff0c;训练后的将模型文件提供给客户&#xff0c;用户在程序中加载模型文件和数据手册得到手册里面的数据结果。 …

Python中requests模块(爬虫)基本使用

Python的requests模块是一个非常流行的HTTP库&#xff0c;用于发送HTTP/1.1请求。 一、模块导入 1、requests模块的下载&#xff1a; 使用包管理器下载&#xff0c;在cmd窗口&#xff0c;或者在项目的虚拟环境目录下&#xff1a; pip3 install -i https://pypi.tuna.tsingh…