基于MFC实现电脑录屏小程序
1、新建一个“MFC应用”项目
2、项目名称自己选择
3、选择“基于对话框”
4、选择“资源视图”整体布局就是这样。
就改动了两个文件夹“DesktopVidioDlg.h”和“DesktopVidioDlg.cpp”
代码如下:
// DesktopVidioDlg.h: 头文件
//
#include<math.h>
#include<Vfw.h>
#include<mmsystem.h>#pragma comment(lib,"vfw32.lib")
#pragma comment(lib,"winmm.lib")
#pragma once// CDesktopVidioDlg 对话框
class CDesktopVidioDlg : public CDialogEx
{
// 构造
public:CDesktopVidioDlg(CWnd* pParent = nullptr); // 标准构造函数// 对话框数据
#ifdef AFX_DESIGN_TIMEenum { IDD = IDD_DESKTOPVIDIO_DIALOG };
#endifBOOL m_IsStart;protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持// 实现
protected:HICON m_hIcon;// 生成的消息映射函数virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();DECLARE_MESSAGE_MAP()
public:afx_msg void OnBnClickedSavepathButton();afx_msg void OnBnClickedStartButton();afx_msg void OnBnClickedStopButton();afx_msg void OnTimer(UINT_PTR nIDEvent);
};
// : 实现文件
//#include "pch.h"
#include "framework.h"
#include "DesktopVidio.h"
#include "DesktopVidioDlg.h"
#include "afxdialogex.h"#ifdef _DEBUG
#define new DEBUG_NEW
#endif
PAVIFILE pfile;
int nFrames = 0;
PAVISTREAM ps;
PAVISTREAM pComStream;// 用于应用程序“关于”菜单项的 CAboutDlg 对话框class CAboutDlg : public CDialogEx
{
public:CAboutDlg();// 对话框数据
#ifdef AFX_DESIGN_TIMEenum { IDD = IDD_ABOUTBOX };
#endifprotected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持// 实现
protected:DECLARE_MESSAGE_MAP()
};CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX)
{
}void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{CDialogEx::DoDataExchange(pDX);
}BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()// CDesktopVidioDlg 对话框CDesktopVidioDlg::CDesktopVidioDlg(CWnd* pParent /*=nullptr*/): CDialogEx(IDD_DESKTOPVIDIO_DIALOG, pParent)
{m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}void CDesktopVidioDlg::DoDataExchange(CDataExchange* pDX)
{CDialogEx::DoDataExchange(pDX);
}BEGIN_MESSAGE_MAP(CDesktopVidioDlg, CDialogEx)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_SAVEPATH_BUTTON, &CDesktopVidioDlg::OnBnClickedSavepathButton)ON_BN_CLICKED(IDC_START_BUTTON, &CDesktopVidioDlg::OnBnClickedStartButton)ON_BN_CLICKED(IDC_STOP_BUTTON, &CDesktopVidioDlg::OnBnClickedStopButton)ON_WM_TIMER()
END_MESSAGE_MAP()// CDesktopVidioDlg 消息处理程序BOOL CDesktopVidioDlg::OnInitDialog()
{CDialogEx::OnInitDialog();SetDlgItemText(IDC_PATH_EDIT, _T("C:\\"));SetDlgItemText(IDC_FILENAME_EDIT, _T("录屏"));SetDlgItemText(IDC_RATE_EDIT, _T("3"));// 将“关于...”菜单项添加到系统菜单中。// IDM_ABOUTBOX 必须在系统命令范围内。ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != nullptr){BOOL bNameValid;CString strAboutMenu;bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);ASSERT(bNameValid);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}// 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动// 执行此操作SetIcon(m_hIcon, TRUE); // 设置大图标SetIcon(m_hIcon, FALSE); // 设置小图标// TODO: 在此添加额外的初始化代码return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}void CDesktopVidioDlg::OnSysCommand(UINT nID, LPARAM lParam)
{if ((nID & 0xFFF0) == IDM_ABOUTBOX){CAboutDlg dlgAbout;dlgAbout.DoModal();}else{CDialogEx::OnSysCommand(nID, lParam);}
}// 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。 对于使用文档/视图模型的 MFC 应用程序,
// 这将由框架自动完成。void CDesktopVidioDlg::OnPaint()
{if (IsIconic()){CPaintDC dc(this); // 用于绘制的设备上下文SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);// 使图标在工作区矩形中居中int cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;// 绘制图标dc.DrawIcon(x, y, m_hIcon);}else{CDialogEx::OnPaint();}
}//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR CDesktopVidioDlg::OnQueryDragIcon()
{return static_cast<HCURSOR>(m_hIcon);
}void CDesktopVidioDlg::OnBnClickedSavepathButton()
{// TODO: 在此添加控件通知处理程序代码CString ReturnPath = _T("");//字符串变量TCHAR szPath[_MAX_PATH];//保存路径变量BROWSEINFO bi;//BROWSEINFO结构变量bi.hwndOwner = NULL;//HWND句柄bi.pidlRoot = NULL;//默认值位NULLbi.lpszTitle = _T("文件浏览器对话框");bi.pszDisplayName = szPath;//选择文件夹路径bi.ulFlags = BIF_RETURNONLYFSDIRS;//标记bi.lpfn = NULL;//默认值位NULLbi.lParam = NULL;//回调消息LPITEMIDLIST pitemIDList = SHBrowseForFolder(&bi);//显示文件浏览器对话框if (NULL != pitemIDList){if (SHGetPathFromIDList(pitemIDList, szPath))//判断是否获得文件夹路径{ReturnPath = szPath; //获得文件夹路径}else {ReturnPath = _T(""); //文件夹路径为空}}SetDlgItemText(IDC_PATH_EDIT, ReturnPath);
}void CDesktopVidioDlg::OnBnClickedStartButton()
{// TODO: 在此添加控件通知处理程序代码if (!m_IsStart){CString rate;CString name;CString path;GetDlgItemText(IDC_PATH_EDIT, path); //保存路径GetDlgItemText(IDC_FILENAME_EDIT, name); //文件名GetDlgItemText(IDC_RATE_EDIT, rate); //帧数if (path.IsEmpty() || name.IsEmpty() || rate.IsEmpty()){AfxMessageBox(_T("视频参数填写不完整!"));return;}AVIFileInit();SetTimer(1, 100, NULL);}else {KillTimer(1);AVIStreamClose(pComStream);if (NULL == ps) {AVIStreamClose(ps);}if (pfile != NULL){AVIFileRelease(pfile);}AVIFileExit();nFrames = 0;}m_IsStart = !m_IsStart;
}void CDesktopVidioDlg::OnBnClickedStopButton()
{// TODO: 在此添加控件通知处理程序代码OnBnClickedStartButton();
}void CDesktopVidioDlg::OnTimer(UINT_PTR nIDEvent)
{// TODO: 在此添加消息处理程序代码和/或调用默认值CDialogEx::OnTimer(nIDEvent);
}
运行效果如下:
基于MFC实现电脑录屏小程序相关推荐
- 基于C#的电脑录屏和录像(工程源码)
基于C#的电脑录屏和录像 主要包含一下几个模块: 录屏菜单 屏幕绘画 视频录像(可以单独录取屏幕,可以单独录取视频,可以两者同时录取) 设置功能:声音+屏幕+视频 任意组合 涉及到的原理: 视频录制使 ...
- 用 .NET / C# 实现录屏小程序并保存为视频文件
用 .NET / C# 开发一个录屏小程序 实现思路: 不断的获取桌面屏幕的图像,每一张图像我们称为 一帧 . 这里介绍一下 帧率 (FPS , Frame per Second) 的概念:每秒显示的 ...
- Java小程序—录屏小程序(上半场)
做软件的三个步骤: (1)做什么? (2)怎么做? (3)动手做! ok,我们今天要做的是一个录屏软件,那怎么做呢?首先,我们小时候都玩过一种小人书,就是当你快速翻动书页时,书中的人物就会活灵活现的动 ...
- 电脑版微信小程序全屏显示方法,手机横屏方法。
电脑版微信小程序全屏显示方法: 在app.json中加入:"resizable": true 注意要与"pages"同级,网上有许多错误方法! 手机横屏方法: ...
- 电脑录屏怎么录视频?了解几个小技巧
电脑录屏怎么录视频?最近经常被小伙伴问到这个问题,说到电脑录屏很多小伙伴都陷入一个误区就是电脑自带的win+G捕获录制,因为这个功能只能支持录制游戏的窗口,在没有检测到游戏窗口的情况下是不能直接录制其 ...
- 基于MFC单文档的画图程序(小项目)
基于MFC单文档的画图程序 前言 学习了一年多的MFC和Qt,对其基本用法已经熟练掌握,迫不及待的想实战一波,但是心急吃不了热豆腐,我还是踏踏实实的找一些既能复习以前知识的单子又不消耗我太多时间(最近 ...
- captura录屏没声音_电脑录屏有哪些好用的软件呢?
嗨~大家好! 应粉丝要求,今天介绍一下电脑录屏软件,其实需要电脑录屏的需求大概率就那么几个: 1.游戏录播及后期制作. 2.课程录屏后方便再次学习. 3.动作演示,阁主就经常会通过录屏来演示某个软件怎 ...
- 6种电脑录屏工具,免费在线,桌面端Windows和Mac均适用
如果你想做一个教程类博主,不管是游戏类的,科技类的,还是语言类的,你首先需要一个不错的电脑录屏工具.自自媒体大流行开始以来,对电脑屏幕录制的需求有不断增长.来自不同领域的专业人士,例如教育领域的专业人 ...
- win10麦克风说话没声音_电脑录屏,真的没那么麻烦
剪辑视频没有高清素材,视频下载受限, 大部分录屏软件难用还要收费 其实电脑录屏没那么麻烦, 补充更新: 今天意外地发现了一款非常不错的电脑录屏软件,整个软件体积小巧.操作简单,最为难得的是,录制的视频 ...
最新文章
- 高性能Mysql主从架构的复制原理及配置详解
- 香港城市大学、港理工招收博士生,有奖学金机会
- virtualBox NAT模式,设置虚拟机可上网,宿主机可访问虚拟机的方法
- 每日一皮:男性同胞,是时候反击了!
- JAVA入门级教学之(简单的程序测试)
- java到底是值传递还是引用传递?
- [HDU 1003] Max Sum
- linux中ldap管理工具,LDAP管理工具Mac版-LDAP Admin Tool for Mac下载 V7.2-PC6苹果网
- 使用cboard(oracle数据库)
- 利用html简单自我介绍案例
- 2023年全国最新工会考试精选真题及答案33
- 天眼查 Authorized和企查查 sign破解
- 用Rstudio写.Sh/Shell文件
- C# winform 免费短信提醒方式
- 删除文件右键及打开方式下的HBuiderX 已成功
- android popmenu,android 自定义PopupMenu详解
- 使用python3爬取美女图片
- 数据分析(一)百度指数,代码如下:
- 想找女朋友,结果遭遇了酒托,且行且小心啊!
- 六大国产CPU | 全面梳理分析