CaptureVideoDlg.cpp
上传用户:szth2006
上传日期:2021-11-30
资源大小:68k
文件大小:6k
源码类别:

DirextX编程

开发平台:

Visual C++

  1. // CaptureVideoDlg.cpp : 实现文件
  2. //
  3. #include "stdafx.h"
  4. #include "CaptureVideo.h"
  5. #include "CaptureVideoDlg.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #endif
  9. // 用于应用程序“关于”菜单项的 CAboutDlg 对话框
  10. class CAboutDlg : public CDialog
  11. {
  12. public:
  13. CAboutDlg();
  14. // 对话框数据
  15. enum { IDD = IDD_ABOUTBOX };
  16. protected:
  17. virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
  18. // 实现
  19. protected:
  20. DECLARE_MESSAGE_MAP()
  21. };
  22. CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
  23. {
  24. }
  25. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  26. {
  27. CDialog::DoDataExchange(pDX);
  28. }
  29. BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
  30. END_MESSAGE_MAP()
  31. // CCaptureVideoDlg 对话框
  32. CCaptureVideoDlg::CCaptureVideoDlg(CWnd* pParent /*=NULL*/)
  33. : CDialog(CCaptureVideoDlg::IDD, pParent)
  34. {
  35. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  36. }
  37. void CCaptureVideoDlg::DoDataExchange(CDataExchange* pDX)
  38. {
  39. CDialog::DoDataExchange(pDX);
  40. DDX_Control(pDX, IDC_VIDEO_WINDOW, m_videoWindow);
  41. DDX_Control(pDX, IDC_COMBO1, m_listCtrl);
  42. }
  43. BEGIN_MESSAGE_MAP(CCaptureVideoDlg, CDialog)
  44. ON_WM_SYSCOMMAND()
  45. ON_WM_PAINT()
  46. ON_WM_QUERYDRAGICON()
  47. //}}AFX_MSG_MAP
  48. ON_BN_CLICKED(ID_PREVIEW, &CCaptureVideoDlg::OnBnClickedPreview)
  49. ON_BN_CLICKED(ID_CAPTURE, &CCaptureVideoDlg::OnBnClickedCapture)
  50. ON_BN_CLICKED(ID_VIDEO_FORMAT, &CCaptureVideoDlg::OnBnClickedVideoFormat)
  51. ON_BN_CLICKED(ID_IMAGE_PARAMETER, &CCaptureVideoDlg::OnBnClickedImageParameter)
  52. ON_BN_CLICKED(ID_SAVEGRAPH, &CCaptureVideoDlg::OnBnClickedSavegraph)
  53. ON_BN_CLICKED(ID_EXIT, &CCaptureVideoDlg::OnBnClickedExit)
  54. END_MESSAGE_MAP()
  55. // CCaptureVideoDlg 消息处理程序
  56. BOOL CCaptureVideoDlg::OnInitDialog()
  57. {
  58. CDialog::OnInitDialog();
  59. // 将“关于...”菜单项添加到系统菜单中。
  60. // IDM_ABOUTBOX 必须在系统命令范围内。
  61. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  62. ASSERT(IDM_ABOUTBOX < 0xF000);
  63. CMenu* pSysMenu = GetSystemMenu(FALSE);
  64. if (pSysMenu != NULL)
  65. {
  66. CString strAboutMenu;
  67. strAboutMenu.LoadString(IDS_ABOUTBOX);
  68. if (!strAboutMenu.IsEmpty())
  69. {
  70. pSysMenu->AppendMenu(MF_SEPARATOR);
  71. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  72. }
  73. }
  74. // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
  75. //  执行此操作
  76. SetIcon(m_hIcon, TRUE); // 设置大图标
  77. SetIcon(m_hIcon, FALSE); // 设置小图标
  78. //ShowWindow(SW_MINIMIZE);
  79. // TODO: 在此添加额外的初始化代码
  80. m_cap.EnumDevices(m_listCtrl.GetSafeHwnd());
  81. m_listCtrl.SetCurSel (0); 
  82. m_tooltip.Create(this);
  83. m_tooltip.Activate(TRUE);
  84. m_tooltip.AddTool(GetDlgItem(ID_PREVIEW), _T("开始预览视频"));
  85. m_tooltip.AddTool(GetDlgItem(ID_CAPTURE), _T("开始捕获、保存视频"));
  86. m_tooltip.AddTool(GetDlgItem(ID_VIDEO_FORMAT), _T("视频格式"));
  87. m_tooltip.AddTool(GetDlgItem(ID_IMAGE_PARAMETER), _T("图像参数"));
  88. m_tooltip.AddTool(GetDlgItem(ID_SAVEGRAPH), _T("保存链表"));
  89. m_tooltip.AddTool(GetDlgItem(ID_EXIT), _T("退出应用程序"));
  90. return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
  91. }
  92. void CCaptureVideoDlg::OnSysCommand(UINT nID, LPARAM lParam)
  93. {
  94. if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  95. {
  96. CAboutDlg dlgAbout;
  97. dlgAbout.DoModal();
  98. }
  99. else
  100. {
  101. CDialog::OnSysCommand(nID, lParam);
  102. }
  103. }
  104. // 如果向对话框添加最小化按钮,则需要下面的代码
  105. //  来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
  106. //  这将由框架自动完成。
  107. void CCaptureVideoDlg::OnPaint()
  108. {
  109. if (IsIconic())
  110. {
  111. CPaintDC dc(this); // 用于绘制的设备上下文
  112. SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
  113. // 使图标在工作矩形中居中
  114. int cxIcon = GetSystemMetrics(SM_CXICON);
  115. int cyIcon = GetSystemMetrics(SM_CYICON);
  116. CRect rect;
  117. GetClientRect(&rect);
  118. int x = (rect.Width() - cxIcon + 1) / 2;
  119. int y = (rect.Height() - cyIcon + 1) / 2;
  120. // 绘制图标
  121. dc.DrawIcon(x, y, m_hIcon);
  122. }
  123. else
  124. {
  125. CDialog::OnPaint();
  126. }
  127. }
  128. //当用户拖动最小化窗口时系统调用此函数取得光标显示。
  129. //
  130. HCURSOR CCaptureVideoDlg::OnQueryDragIcon()
  131. {
  132. return static_cast<HCURSOR>(m_hIcon);
  133. }
  134. BOOL CCaptureVideoDlg::PreTranslateMessage(MSG* pMsg) 
  135. {
  136. // CG: The following block was added by the ToolTips component.
  137. {
  138. // Let the ToolTip process this message.
  139. m_tooltip.RelayEvent(pMsg);
  140. }
  141. return CDialog::PreTranslateMessage(pMsg);
  142. }
  143. void CCaptureVideoDlg::OnBnClickedPreview()
  144. {
  145. // TODO: 在此添加控件通知处理程序代码
  146. HWND hVWindow = m_videoWindow.GetSafeHwnd();
  147. int id = m_listCtrl.GetCurSel();
  148. m_cap.PreviewImages(id , hVWindow);
  149. }
  150. void CCaptureVideoDlg::OnBnClickedCapture()
  151. {
  152. // TODO: 在此添加控件通知处理程序代码
  153. CString strFilter = _T("AVI File (*.avi) | *.avi|");
  154. strFilter += "All File (*.*) | *.*|";
  155. CFileDialog dlg(TRUE, NULL, NULL, OFN_PATHMUSTEXIST|OFN_HIDEREADONLY, strFilter, this);
  156. if (dlg.DoModal() == IDOK)
  157. {
  158. CString m_sourceFile = dlg.GetPathName();
  159. m_cap.CaptureImages(m_sourceFile);
  160. }
  161. }
  162. void CCaptureVideoDlg::OnBnClickedVideoFormat()
  163. {
  164. // TODO: 在此添加控件通知处理程序代码
  165. m_cap.ConfigCameraPin(this->m_hWnd);
  166. }
  167. void CCaptureVideoDlg::OnBnClickedImageParameter()
  168. {
  169. // TODO: 在此添加控件通知处理程序代码
  170. m_cap.ConfigCameraFilter(this->m_hWnd);
  171. }
  172. void CCaptureVideoDlg::OnBnClickedSavegraph()
  173. {
  174. // TODO: 在此添加控件通知处理程序代码
  175. CFileDialog dlg(TRUE);
  176. if (dlg.DoModal()==IDOK)
  177. {
  178. CString str=dlg.GetPathName();
  179. TCHAR *inFileName = str.GetBuffer(str.GetLength());
  180. str.ReleaseBuffer();
  181. m_cap.SaveGraph(inFileName);
  182. }
  183. }
  184. void CCaptureVideoDlg::OnBnClickedExit()
  185. {
  186. // TODO: 在此添加控件通知处理程序代码
  187. CDialog::OnOK();
  188. }