/*
* =====================================================================================
*
* Filename: a-kind-of-showDlg.cpp
*
* Description: 不使用CvvImage类来在MFC中显示图像
*
*
* Version: 1.0
* Created: 2013/11/16 22:06:13
* Author: yuliyang
*
* Mail: wzyuliyang911@gmail.com
* Blog: http://www.cnblogs.com/yuliyang
*
* =====================================================================================
*/ // a-kind-of-showDlg.cpp : 实现文件
// #include "stdafx.h"
#include "a-kind-of-show.h"
#include "a-kind-of-showDlg.h"
#include "afxdialogex.h" #ifdef _DEBUG
#define new DEBUG_NEW
#endif static DWORD Thread(LPVOID *lpvParam); /* 显示图像线程 */
// 用于应用程序“关于”菜单项的 CAboutDlg 对话框 class CAboutDlg : public CDialogEx
{
public:
CAboutDlg(); // 对话框数据
enum { IDD = IDD_ABOUTBOX }; protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现
protected:
DECLARE_MESSAGE_MAP()
}; CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)
{
} void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
} BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP() // CakindofshowDlg 对话框 CakindofshowDlg::CakindofshowDlg(CWnd* pParent /*=NULL*/)
: CDialogEx(CakindofshowDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
} void CakindofshowDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
} BEGIN_MESSAGE_MAP(CakindofshowDlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON1, &CakindofshowDlg::OnBnClickedButton1)
ON_BN_CLICKED(IDC_BUTTON2, &CakindofshowDlg::OnBnClickedButton2)
END_MESSAGE_MAP() // CakindofshowDlg 消息处理程序 BOOL CakindofshowDlg::OnInitDialog()
{
CDialogEx::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
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: 在此添加额外的初始化代码
/*------------------------------------------------------------------------------------------------------------
* 初始化
*
* 显示图像 另一种方法
*
*
*------------------------------------------------------------------------------------------------------------*/
cv::namedWindow("INPUT", 1);
HWND hWnd = (HWND) cvGetWindowHandle("INPUT");
HWND hParent = ::GetParent(hWnd);
::SetParent(hWnd, GetDlgItem(IDC_FRAME)->m_hWnd);
::ShowWindow(hParent, SW_HIDE); return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
} void CakindofshowDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialogEx::OnSysCommand(nID, lParam);
}
} // 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
// 这将由框架自动完成。 void CakindofshowDlg::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 CakindofshowDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
} void CakindofshowDlg::OnBnClickedButton1()
{
thread = AfxBeginThread((AFX_THREADPROC) Thread, (LPVOID) this);
// TODO: 在此添加控件通知处理程序代码 } void CakindofshowDlg::ThreadProcess(void)
{
capture = cvCaptureFromCAM(0);
if(!capture)
{
//AfxMessageBox(L"ERROR: Cannot initialize video!");
return;
}
cv::Size default_size;
default_size.width = 280; /* 窗口大小 */
default_size.height = 210;
IplImage* frame; cv::Mat img_input;
while (1)
{
cv::Mat img_input_aux;
frame = cvQueryFrame(capture);
img_input = cv::Mat(frame,true);
cv::resize(img_input, img_input_aux, default_size);
if(!img_input_aux.empty())
cv::imshow("INPUT", img_input_aux);
::Sleep(1000); /* 代替waitkey() */
} } static DWORD Thread(LPVOID *lpvParam)
{
CakindofshowDlg *thr = (CakindofshowDlg*) lpvParam;
thr->ThreadProcess();
return NULL;
} /*------------------------------------------------------------------------------------------------------------
* 停止线程
*------------------------------------------------------------------------------------------------------------*/
void CakindofshowDlg::StopThread(void)
{
DWORD exit_code = NULL; if(thread != NULL)
{
GetExitCodeThread(thread->m_hThread, &exit_code); if(exit_code == STILL_ACTIVE)
{
::TerminateThread(thread->m_hThread, 0);
CloseHandle(thread->m_hThread);
} thread->m_hThread = NULL;
thread = NULL;
}
} void CakindofshowDlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
CakindofshowDlg::StopThread();
}

程序有bug,不能退出。呵呵

最新文章

  1. 如何修改geditor的配置文件 -好像geditor没有文本格式的配置文件? 要使用dconf-editor来配置- geditor自己配置编码格式
  2. 12个Linux进程管理命令介绍
  3. [转]Rapid Reporter——轻量级ET测试记录工具
  4. JVM的堆分配
  5. UPC 2170 D Equal Is Not Really Equal (欧拉路径)
  6. UVa 11105 (筛法) Semi-prime H-numbers
  7. Linux ssh安全设置
  8. poj 1084 Brainman(归并排序)
  9. 深入了解java同步、锁紧机构
  10. c#3.0提供的扩展方法
  11. PTA題目的處理(二)
  12. python 的基础 学习 第三天 编码的初始
  13. 第八节 JS运动基础
  14. SpringMVC之文件上传
  15. ubuntu修改Bash命令行提示符
  16. [PHP] 商品类型规格属性后台管理(代码流程备忘)
  17. windows下npm安装vue
  18. SQL点点滴滴_删除临时表
  19. Linux下 ps -ef 和 ps aux 的区别及格式详解
  20. template.js的使用心得

热门文章

  1. js模拟苹果菜单
  2. 博客迁移到www.imyzf.com
  3. phpcms v9后台多表查询分页代码
  4. RasAPI函数实现PPPOE拨号
  5. slqplus 帮助手册
  6. WPF从入门到放弃系列第一章 初识WPF
  7. To fix sql server 2008 r2 Evaluation period has expired by change the key
  8. 20 个最棒的 jQuery Tab 插件
  9. MD5算法步骤详解
  10. POJ2302