【无标题】c++基于MFC项目更新,后续会在github上开源出来

本文介绍了基于MFC的远程控制项目开发,包括锁机功能的实现,从创建锁机对话框到完善锁机和解锁功能。此外,详细讲解了客户端网络模块的开发,涉及与服务端的连接准备,以及IP地址和端口控件的添加与默认值设置。文件树和驱动获取控件的处理也进行了阐述。
摘要由CSDN通过智能技术生成

二、远程控制(二)

1 锁机对话框处理
a、锁机的画面实现

(1)、打开项目,右键–>添加–>选择资源—>选择Dialog即可,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GYfm1EHV-1682347698397)(D:\笔记图片\image-20230420222645256.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oeLQAoTm-1682347698398)(D:\笔记图片\Snipaste_2023-04-20_22-28-05.png)]

(2)、在添加的界面中,添加一些文本框如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WbwbwR8u-1682347698399)(D:\笔记图片\Snipaste_2023-04-20_22-32-05.png)]

(3)、在文本框中右键—>点击添加类,这样就创建了一个锁机的类,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mVpguJVb-1682347698399)(D:\笔记图片\Snipaste_2023-04-20_22-35-02.png)]

创建类的代码如下:

// LockInfoDialog.cpp: 实现文件
//

#include "pch.h"
#include "RemoteCtri.h"
#include "LockInfoDialog.h"
#include "afxdialogex.h"


// CLockInfoDialog 对话框

IMPLEMENT_DYNAMIC(CLockInfoDialog, CDialog)

CLockInfoDialog::CLockInfoDialog(CWnd* pParent /*=nullptr*/)
	: CDialog(IDD_DIALOG_INFO, pParent)
{

}

CLockInfoDialog::~CLockInfoDialog()
{
}

void CLockInfoDialog::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
}


BEGIN_MESSAGE_MAP(CLockInfoDialog, CDialog)
END_MESSAGE_MAP()


// CLockInfoDialog 消息处理程序

以及头文件:

#pragma once


// CLockInfoDialog 对话框

class CLockInfoDialog : public CDialog
{
	DECLARE_DYNAMIC(CLockInfoDialog)

public:
	CLockInfoDialog(CWnd* pParent = nullptr);   // 标准构造函数
	virtual ~CLockInfoDialog();

// 对话框数据
#ifdef AFX_DESIGN_TIME
	enum { IDD = IDD_DIALOG_INFO };
#endif

protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

	DECLARE_MESSAGE_MAP()
};

2 锁机的功能完善以及解锁功能
a、锁机的功能完善

(1)、先定义一个锁机的全局变量,因为锁机在整个过程都会存在,所以不能定义在一个函数中

#include"LockInfoDialog.h"
CLockInfoDialog dlg;//定义一个全局变量

(2)、定义锁机的函数,锁机的实质就是控制鼠标的功能,屏蔽掉鼠标以及一些按键的功能即可。其中,锁机功能是在创建的一个线程里面实现的,因为如果实现在一个函数中,有个消息循环的设置,就会一直在该循环中,就会跳不到下一个解锁的功能函数中。

锁机的代码如下图所示:

unsigned threadid = 0;//定义一个全局的线程ID
//线程回调函数
unsigned __stdcall threadLockDlg(void* arg)
{
    //创建一个窗口,显示上述的锁机的画面
    dlg.Create(IDD_DIALOG_INFO, NULL);
    //然后进行一些初始化
    dlg.ShowWindow(SW_SHOW);

    //遮蔽后台的窗口
    CRect rect;//鼠标功能的类
    //dlg.GetWindowRect(rect);//获取对话框的位置
    //优化,让其处于屏幕的左上角,限制在左上角
    rect.left = 0;
    rect.top = 0;
    //获取系统分辨率WxH
    rect.right = GetSystemMetrics(SM_CXFULLSCREEN);
    rect.bottom = GetSystemMetrics(SM_CYFULLSCREEN);
    rect.bottom *= 1.08;//调整锁机的画面使之更加完美的覆盖屏幕
    TRACE("right==%d,bottom==%d\r\n", rect.right, rect.bottom);
    dlg.MoveWindow(rect);
    //设置窗口置顶,不改变大小,不要移动
    dlg.SetWindowPos(&dlg.wndTopMost, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
    //隐藏任务栏
    ::ShowWindow(::FindWindow(_T("shell_TrayWnd"), NULL), SW_HIDE);


    //设置限制鼠标的功能
    ShowCursor(false);
    //初次之外,还要限制鼠标访问的范围

    //让鼠标限制在屏幕的左上角
    rect.left = 0;
    rect.top = 0;
    rect.right = 1;
    rect.bottom = 1;

    ClipCursor(rect);//让其限制在弹出的对话框内


    //添加一个消息循环,才可以出现锁机的窗口界面
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    {
        //得到消息后,处理
        TranslateMessage(&msg);
        //分配消息
        DispatchMessageW(&msg);
        //设置按键后退出
        //由解锁函数发送WM_KEYDOWN以及0x1B使其结束该循环然后就执行下面的部分
        if (msg.message == WM_KEYDOWN)
        {
        	//先打印看一下,每个按键的数值
            TRACE("msg:%08X, wparam:%08X,lparam:%08X\r\n", msg.message, msg.wParam, msg.lParam);
            if (msg.wParam == 0x1B)//按下esc按键退出
            {
            
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值