基于MFC实现电脑录屏小程序
生活随笔
收集整理的這篇文章主要介紹了
基于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实现电脑录屏小程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 联影医疗IPO过会背后:已连续盈利,研发
- 下一篇: 【解决】检测到不兼容的Hyper-v正在