不使用CvvImage类来在MFC中显示图像
/*
* =====================================================================================
*
* 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,不能退出。呵呵
不使用CvvImage类来在MFC中显示图像的更多相关文章
- MFC中显示图像的放大、缩小、移动功能
StretchBlt函数直接对图片进行放大,缩小,显示位置变换. 这个函数有两种形态一种全局函数是这样的: BOOL StretchBlt(HDC hdcDest, int nXOriginDest ...
- MFC中对话框类(Dialog)的应用
转载http://hi.baidu.com/jackywdx/item/feee8041d2c2e12310ee1e85 Windows应用程序通常是通过对话框接收用户输入.向用户输出信息,本节介绍应 ...
- MFC中的CString类使用方法指南
MFC中的CString类使用方法指南 原文出处:codeproject:CString Management [禾路:这是一篇比较老的资料了,但是对于MFC的程序设计很有帮助.我们在MFC中使用字符 ...
- MFC中存在的不属于任何类的全局函数,它们统统在函数名称开头加上Afx
MFC中存在的不属于任何类的全局函数,它们统统在函数名称开头加上Afx. 函数名称 说明 AfxWinInit 被WinMain(MFC提供)调用的一个函数,用做MFC GUI程序初始化的一部分,如果 ...
- 在MFC中使用一个单独的类实现数据在各个类之间的传递
第一步:使用VS2010创建一个基于MFC的单文档程序,然后 编译 运行 确定没有问题. 第二步:添加一个名叫CGszCommonData 类. 第三步:在应用程序类的头文件里 添加#includ ...
- MFC中用户自定义类响应自定义消息
这篇技术文章不是讨论经典的MFC中的消息工作机理的,讨论消息工作原理.方式和路径的文章在网上和书本中随处可见.网上众多的讨论都是关于如何响应并进行用户自定义消息映射的:网上还有一些文章介绍如何在自定义 ...
- 列表控件ListBox关联的MFC中的类:CListBox
列表控件ListBox关联的MFC中的类:CListBox ######################################################## 1.在列表的结尾添加一项: ...
- 高级列表控件ListCtrl关联的MFC中的类:CListCtrl
高级列表控件ListCtrl关联的MFC中的类:CListCtrl■ 报表样式ListCtrl常用操作:1.添加列标题头:InsertColumn2.获取与设置列宽:GetColumnWidth.Se ...
- MFC中 自定义类访问主对话框控件的方法
之前一直在找有木有好点的方法.现在终于被我找到,收藏之~~~~~~ 在使用mfc的时候经常遇到自定义类访问主对话框控件的问题,例如自定义类中的方法要输出一段字符串到主对话框的EDIT控件.控制对话框的 ...
随机推荐
- React Native在虚拟运行app时,报错RCTRootView not found,怎么解决?
报错: 解决方案:
- php 中文字符串首字母的获取函数
这篇文章介绍了php 中文字符串首字母的获取函数,有需要的朋友可以参考一下 function chineseFirst($str) { $str= iconv("UTF-8",&q ...
- Linux文件保护禁止修改、删除、移动文件等,使用chattr +i保护
不让用户修改.删除文件等,使用 chattr保护 chattr命令的用法:chattr [ -RV ] [ -v version ] [ mode ] files… 最关键的是在[mode]部分,[m ...
- TNS-12541: TNS:no listener TNS-12560: TNS:protocol adapter error
新建的数据库,在配置完listener的时候报这个错. 参考文章:https://community.oracle.com/message/4098938 http://blog.csdn.net/l ...
- jquery实现替代iframe的功能
使用iframe能很好的嵌入其他的网页或者网站,但是iframe每次加载都会浪费好多的时间,且会阻止其他元素的加载,搜索引擎也不能识别页面ifram框架中被调用的链接.文本.图片等等内容的. Html ...
- UICountingLabel实现数字变化的动画效果-b
在大多数金融类 app 上或者其他 app 需要数字展示的地方, 经常会有如下的动画效果: 动画效果 怎么做呢? 一.下载UICountingLabel 下载地址: https://github.co ...
- KVC vs KVO(内容为转载记录,整合大家的总结为我所用)
KVC即key-value coding的缩写, KVO即key-value observing的缩写 假如需要掌握Key-Value Observing机制,那么需要阅读本文应该有帮助.本文提供了K ...
- java 发布和逸出
[转载]:http://www.2cto.com/kf/201310/247738.html 前言 多线程并发环境下,线程安全极为重要.往往一些问题的发生都是由于不正确的发布了对象造成了对象逸出而引起 ...
- 一些常用的jQuery插件
1. X-editable 这个插件能够让你在页面上创建可编辑的元素.它能够使用任何引擎(bootstrap.jquery-ui.jquery),并且包含弹出式和内联模式. 2. Garlic.js ...
- C#.NET连接mysql方法
C#访问MySQL数据库的方法 (1)首先需要下载C#访问MySQL数据库的ADO.NET驱动程序 下载地址为: http://dev.mysql.com/downloads/connector/ne ...