gh0st远程控制——客户端界面编写(二)

这篇具有很好参考价值的文章主要介绍了gh0st远程控制——客户端界面编写(二)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

● 补充小知识:枚举类型的使用

每个控件(比如列表)都对应一个自己的唯一的变量

使用枚举类型可以将变量名与编号进行绑定,以后程序需要扩展的时候,只需要在定义枚举变量的位置重新修改编号就可以了,这样全局的所有变量的编号就都跟着修改了

由于列表这个数据结构在本项目中十分重要,所有需要放在一个每一个文件都能访问到的文件当中,比如"pcb.h"

示例1:默认是0 1 2 3 4 5这样和数组一样递增的

enum Day {
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday,
    Sunday
};

int main() {
    // 使用枚举类型
    Day today = Wednesday;

    // 输出枚举常量的值
    std::cout << "Today is: " << today << std::endl;

    return 0;
}

示例2:也可以是乱序使用的

enum Color {
    Red = 1,
    Green = 2,
    Blue = 6
};

6、为列表控件添加条目

写代码的时候找不到对话框,如何转到资源视图?

gh0st远程控制——客户端界面编写(二),网络安全,网络协议,windows,c语言,c++

为列表控件添加初始化函数,如果代码都写在OnInitDlg()函数里面,显得太过于臃肿了,于是我们考虑在CPCRemoteDlg类里面添加一个成员函数initList()用来初始化列表

gh0st远程控制——客户端界面编写(二),网络安全,网络协议,windows,c语言,c++  

gh0st远程控制——客户端界面编写(二),网络安全,网络协议,windows,c语言,c++

在initList()函数中实现为列表添加条目

// 初始化对话框中的列表
int CPCRemoteDlg::initList()
{
	// TODO: 在此处添加实现代码.

	//为Online_List添加条目
	for (int i = 0; i < ONLINELIST_LEN; i++) {
		m_CList_Online.InsertColumn(i, g_Column_Data_Onlie[i].title, LVCFMT_CENTER, g_Column_Data_Onlie[i].nWidth);
	}

	//为MessageList添加条目
	for (int i = 0; i < MESSAGELIST_LEN; i++) {
		m_CList_Message.InsertColumn(i, g_Column_Data_Message[i].title, LVCFMT_CENTER, g_Column_Data_Message[i].nWidth);
	}

	return 0;
}

数据结构的定义:

2个枚举类型的列表定义在"pcb.h"文件当中:

enum
{
	ONLINELIST_IP = 0,          //IP的列顺序
	ONLINELIST_ADDR,            //地址
	ONLINELIST_COMPUTER_NAME,   //计算机名/备注
	ONLINELIST_OS,              //操作系统
	ONLINELIST_CPU,             //CPU
	ONLINELIST_VIDEO,           //摄像头
	ONLINELIST_PING,            //PING
	ONLINELIST_LEN				//OnlineList的总长度
};

enum
{
	MESSAGELIST_TYPE,			//信息类型
	MESSAGELIST_TIME,			//时间
	MESSAGELIST_INFO,			//信息
	MESSAGELIST_LEN				//MessageList的总长度
};

列表项定义在PCRemoteDlg.cpp文件当中:

typedef struct
{
	char*   title;    //列表的名称
	int		nWidth;   //列表的宽度
}COLUMNSTRUCT;

COLUMNSTRUCT g_Column_Data_Onlie[] =
{
	{"IP",				148	},
	{"区域",			150	},
	{"计算机名/备注",	160	},
	{"操作系统",		128	},
	{"CPU",				80	},
	{"摄像头",			81	},
	{"PING",			81	}
};

COLUMNSTRUCT g_Column_Data_Message[] =
{
	{"信息类型",		148	},
	{"时间",			100	},
	{"信息内容",	    660	}
};

此时运行项目还是显示不出来条目,我们需要将2个列表的属性》视图:ICon 改为 Report:

gh0st远程控制——客户端界面编写(二),网络安全,网络协议,windows,c语言,c++

然后运行起来就OK了:

注意:不要忘记在CPCRemoteDlg的initDlg函数里面调用😂😂😂

结果报C005错误

gh0st远程控制——客户端界面编写(二),网络安全,网络协议,windows,c语言,c++

经排查是因为m_CList_Online错误地写成了m_CList_Message导致数组越界引发报错

修改为:

//为Online_List添加条目
	for (int i = 0; i < ONLINELIST_LEN; i++) {
		m_CList_Online.InsertColumn(i, g_Column_Data_Message[i].title, LVCFMT_CENTER, g_Column_Data_Message[i].nWidth);
	}

最终运行结果截图:

gh0st远程控制——客户端界面编写(二),网络安全,网络协议,windows,c语言,c++

但是对窗口进行放大缩小,列表的条目大小不随着变化,如何解决?

想不到使用什么函数,首先要知道这个函数一定是CList的成员函数,然后去查MSDN,或者可以再具体到你想改变列的大小,就在CList里面再查和Column相关的内容/SetXXX之类的

只有当前列表条目宽度需要设置为double类型,这个自行体会

1)定义两个列表初始宽度为全局变量

int g_Online_List_InitWidth = 0;
int g_Message_List_InitWidth = 0;

2)在initList当中分别计算出两个列表的初始宽度

// 初始化对话框中的列表
int CPCRemoteDlg::initList()
{
	// TODO: 在此处添加实现代码.

	//为Online_List添加条目
	for (int i = 0; i < ONLINELIST_LEN; i++) {
		m_CList_Online.InsertColumn(i, g_Column_Data_Onlie[i].title, LVCFMT_CENTER, g_Column_Data_Onlie[i].nWidth);
		g_Online_List_InitWidth += g_Column_Data_Onlie[i].nWidth;
	}

	//为MessageList添加条目
	for (int i = 0; i < MESSAGELIST_LEN; i++) {
		m_CList_Message.InsertColumn(i, g_Column_Data_Message[i].title, LVCFMT_CENTER, g_Column_Data_Message[i].nWidth);
		g_Message_List_InitWidth += g_Column_Data_Message[i].nWidth;
	}

	return 0;
}

3)在OnSize函数当中实现列表的条目随着窗体的大小自由伸缩 

void CPCRemoteDlg::OnSize(UINT nType, int cx, int cy)
{
	CDialogEx::OnSize(nType, cx, cy);

	// TODO: 在此处添加消息处理程序代码
	
	//使列表的位置随窗口自动变化
	double wndCurWidth = cx;	//使用double类型来重新表示当前窗口大小
	double dTmp = 0;
	if (m_CList_Online.m_hWnd != NULL)
	{
		CRect rc;
		rc.left = 1;       //列表的左坐标
		rc.top = 80;       //列表的上坐标
		rc.right = cx - 1;  //列表的右坐标
		rc.bottom = cy - 160;  //列表的下坐标
		m_CList_Online.MoveWindow(rc);

		//使列表条目的大小也适应窗口的变化
		for (int i = 0; i < ONLINELIST_LEN; i++) {
			dTmp = g_Column_Data_Onlie[i].nWidth * wndCurWidth;
			dTmp /= g_Online_List_InitWidth;
			int nCurWidth = (int)dTmp;
			m_CList_Online.SetColumnWidth(i, nCurWidth);
		}	
	}

	//使列表的位置随窗口自动变化
	if (m_CList_Message.m_hWnd != NULL)
	{
		CRect rc;
		rc.left = 1;        //列表的左坐标
		rc.top = cy - 156;    //列表的上坐标
		rc.right = cx - 1;    //列表的右坐标
		rc.bottom = cy - 6;  //列表的下坐标
		m_CList_Message.MoveWindow(rc);

		//使列表条目的大小也适应窗口的变化
		for (int i = 0; i < MESSAGELIST_LEN; i++) {
			dTmp = g_Column_Data_Message[i].nWidth * wndCurWidth;
			dTmp /= g_Message_List_InitWidth;
			int nCurWidth = (int)dTmp;
			m_CList_Message.SetColumnWidth(i, nCurWidth);
		}
	}

}

运行效果截图: 

 gh0st远程控制——客户端界面编写(二),网络安全,网络协议,windows,c语言,c++

补充编程小技巧:

在类视图下无法直接删除成员函数,想要删除成员函数需要手动转到它的定义和引用处删除

运行程序发现功能没有体现,程序没有什么变化,需要考虑是否调用了该函数文章来源地址https://www.toymoban.com/news/detail-807851.html

到了这里,关于gh0st远程控制——客户端界面编写(二)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • TeamViewer远程值守(免密码直接远程控制)

    账户分配 选择 完全访问 并设置 个人密码 (注意:此密码用于远程被连接的计算机,牢记,远程发起连接的计算机填写此密码) 设置 完全访问 (需要注册账密,并登录) ID:被连接的电脑启动时界面上显示的ID 密码:之前设置的个人密码 别名:用于备注远程计算机 点击远

    2024年02月13日
    浏览(23)
  • 电脑自带远程桌面和远程控制软件哪个好?

    随着科技的不断发展和普及,越来越多的公司和个人开始关注 远程控制软件 的使用。我们常常需要在不同的地方工作,但工作需要的文件和软件却只能在一个地方使用,这时候远程控制电脑软件就变得尤为重要咯。但是,许多人分不清楚:到底是电脑自带的远程桌面好用,

    2023年04月14日
    浏览(47)
  • 一文详解远程控制安全与远程控制软件(横测ToDesk\AnyDesk\向日葵)

    远程控制的安全性已经算半个老生常谈的问题了,作为常年远程办公的人,这里我只想说一句,无论你用什么软件都会有安全上的隐患,做不到百分百的安全,但相对安全,咱们还是可以自主把控的。 第一,我们要弄清楚远程控制是什么? 远程控制是指管理人员在异地通过

    2024年02月08日
    浏览(37)
  • 思科ASA防火墙:内网telnet远程控制防火墙 && 外网ssh远程控制防火墙

    现在他们相互都可以通信 全局通信 1.内网telnet连接ASA 进入asa防火墙全局模式 telnet 192.168.1.1 255.255.255.0 in telnet + 指定远程ip + 子网掩码 +接口名称in=e0/1 如果想让全部都可以连接 telnet 0.0.0.0 0.0.0.0 in passwd 123  设置连接密码 pass + 自定义密码     2.外网ssh远程连接asa防火墙 进入

    2023年04月11日
    浏览(38)
  • 远程桌面连接(远程控制另一电脑)的详细步骤

    目录 1、打开电脑B的允许远程连接 2、找到需要控制的电脑B的IP地址  3、在电脑A打开远程桌面连接 通过电脑A远程控制电脑B: 电脑B必须要设置用户名和密码,否则连接不成功。 1.1、首先打开电脑B的远程控制:桌面找到我的电脑,右键选择“属性” ; 1.2、点击“远程设置”

    2024年02月01日
    浏览(42)
  • iPad远程控制Windows PC - Microsoft远程桌面

    有时我们坐在客厅里,想来一局游戏,怎奈何主机太远,接不上电视,这个时候我们就可以利用iPad当作中继器,插上电视,享受大屏带来的震撼...... 有时我们躺在床上,不想到电脑上玩游戏,我们就可以用iPad远程游戏,低延迟也可以让我们大展拳脚...... Microsoft远程桌面详细

    2024年02月06日
    浏览(30)
  • 如何进行远程控制电脑

    电脑在我们日常生活中的作用是非常大的,尤其是在信息时代地位非常高。 其中,最常见、最具代表性的功能是实现远程控制功能。它可以直接解决一些问题,而不需要去现场,在一定程度上提高了工作效率。但是有很多朋友不知道如何实现远程控制。那么小编就和大家分享

    2024年02月05日
    浏览(38)
  • 手机木马远程控制复现

    目录 前言 系列文章列表 渗透测试基础之永恒之蓝漏洞复现http://t.csdn.cn/EsMu2 思维导图 1,实验涉及复现环境    2,Android模拟器环境配置 2.1,首先从官网上下载雷电模拟器 2.2,安装雷电模拟器  2.3, 对模拟器网络进行配置 2.3.1,为什么要进行配置 2.3.2,进行配置  2.3.3,安装成功后

    2024年02月09日
    浏览(36)
  • anydesk远程控制,主动连接。

    远程控制目标电脑,且无需对方同意,并且可以控制目标电脑开关机。 目标电脑和己方电脑均安装anydesk。 目标电脑取消开机密码。 打开目标电脑的anydesk在设置安全设置中打开为自主访问设置密码。 为了让笔记本电脑合盖后仍能被控制 (1)点击开始/设置/系统/电源与休眠

    2024年02月15日
    浏览(29)
  • websocket实现远程控制桌面

    WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,它允许在客户端和服务器之间建立持久性的连接。相比传统的 HTTP 请求-响应模型,WebSocket 提供了更低的延迟和更高的效率 是一组用于在 Web 浏览器和服务器之间进行实时全双工通信的 标准化接口 。该 API 允许开发者创

    2024年02月02日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包