//------------------------------------------------------------------------------
// <copyright file="ColorBasics.cpp" company="Microsoft">
// Copyright (c) Microsoft Corporation. All rights reserved.
// </copyright>
//------------------------------------------------------------------------------
#include "stdafx.h"
#include <strsafe.h>
#include "ColorBasics.h"
#include "resource.h"
/// <summary>
/// Entry point for the application//应用程序的入口点
/// </summary>
/// <param name="hInstance">handle to the application instance</param>
/// <param name="hPrevInstance">always 0</param>
/// <param name="lpCmdLine">command line arguments</param>
/// <param name="nCmdShow">whether to display minimized, maximized, or normally</param>
/// <returns>status</returns>
int APIENTRY wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow)
{
CColorBasics application;
application.Run(hInstance, nCmdShow);
}
/// <summary>
/// Constructor
/// </summary>
CColorBasics::CColorBasics() ://构造函数
m_pD2DFactory(NULL),
m_pDrawColor(NULL),
m_hNextColorFrameEvent(INVALID_HANDLE_VALUE),
m_pColorStreamHandle(INVALID_HANDLE_VALUE),
m_bSaveScreenshot(false),
m_pNuiSensor(NULL)
{
}
/// <summary>
/// Destructor
/// </summary>
CColorBasics::~CColorBasics()//析构函数
{
if (m_pNuiSensor)
{
m_pNuiSensor->NuiShutdown();//关闭NUI连接
}
if (m_hNextColorFrameEvent != INVALID_HANDLE_VALUE)//如果下一帧颜色数据是无效值
{
CloseHandle(m_hNextColorFrameEvent);
}
// clean up Direct2D renderer
delete m_pDrawColor;//删除指针
m_pDrawColor = NULL;
// clean up Direct2D//释放
SafeRelease(m_pD2DFactory);
SafeRelease(m_pNuiSensor);
}
/// <summary>
/// Creates the main window and begins processing
/// </summary>
/// <param name="hInstance">handle to the application instance</param>//应用程序实例的句柄
/// <param name="nCmdShow">whether to display minimized, maximized, or normally</param>//指定窗口如何显示:最小化、最大化、常规
int CColorBasics::Run(HINSTANCE hInstance, int nCmdShow)
{
MSG msg = {0};
WNDCLASS wc;//实例化一个窗口
// Dialog custom window class//win32创建窗口前的准备工作,构造窗口类结构
ZeroMemory(&wc, sizeof(wc));
wc.style = CS_HREDRAW | CS_VREDRAW;//定义窗口类型,指当窗口水平或者宽度发生变化时重绘整个窗口
wc.cbWndExtra = DLGWINDOWEXTRA;//指定紧跟在窗口实例后的附加字节数。如果一个应用程序在资源中用CLASS伪指令注册一个对话框类时,则必须把这个成员设成DLGWINDOWEXTRA。
wc.hInstance = hInstance;//本模块的实例句柄
wc.hCursor = LoadCursorW(NULL, IDC_ARROW);//光标句柄,采用箭头光标
wc.hIcon = LoadIconW(hInstance, MAKEINTRESOURCE(IDI_APP));//图标句柄
wc.lpfnWndProc = DefDlgProcW; //窗口处理函数的指针
wc.lpszClassName = L"ColorBasicsAppDlgWndClass"; //指向类名称的指针
//注册窗口类
if (!RegisterClassW(&wc))//如果对窗口注册失败,返回值为0
{
return 0;
}
//用该窗口类创建一个对话框
// Create main application window
HWND hWndApp = CreateDialogParamW( //该函数根据对话框模板创建一个无模式对话框,系统会给对话框发送窗口初始化消息
hInstance, //标识一个模块的事例,该模块的可执行文件含有对话框模板
MAKEINTRESOURCE(IDD_APP), //标识对话框模板。此参数可以指向一个以NULL结尾的字符串的指针,该字符串指定对话框模板名,或是指定对话框模板的资源标识符的一个整型值。
NULL,
(DLGPROC)CColorBasics::MessageRouter,
reinterpret_cast<LPARAM>(this)); //强制转换类型
// Show window显示对话框
ShowWindow(hWndApp, nCmdShow); //显示窗口
//用来检测kinect消息的event
const int eventCount = 1;
HANDLE hEvents[eventCount]; //事件句柄,eventCount是存放事件句柄的数组
// Main message loop
//消息循环,在这个消息循环里,如果没有kinect,那就是简单的处理窗口消息即可
while (WM_QUIT != msg.message)
{
// 为什么在这里赋值,相当于每次循环都赋值?因为这个句柄随着消息处理会变化
hEvents[0] = m_hNextColorFrameEvent; //如果有消息就读取下一帧色彩数据
// Check to see if we have either a message (by passing in QS_ALLINPUT)//检查是否有新的消息或者kinect链接事件
// Or a Kinect event (hEvents)
// Update() will check for Kinect events individually, in case more than one are signalled
// 检查kinect事件,第一个参数1表示等待一个句柄,第二个参数是消息数组,第三个参数指示是不是要等数组里的所有消息,参数是false
// 第四个参数是等待多久,INFINITE表示永远,第五个参数呢,因为第四个参数说没有kinect消息这个函数就一直阻塞这里,那么它肯定可能影响正常的windows消息处理
// 所以第五个参数表示说有些情况下也要打断这个等待,QS_ALLINPUT就表示在有windows消息时,该函数也不再阻塞的继续往下执行
MsgWaitForMultipleObjects(eventCount, hEvents, FALSE, INFINITE, QS_ALLINPUT);//等待一个线程退出
// Explicitly check the Kinect frame event since MsgWaitForMultipleObjects
// can return for other reasons even though it is signaled.
Update();//此函数用来处理kinect消息
//添加消息循环,防止线程死锁
//处理windows消息
while (PeekMessageW(&msg, NULL, 0, 0, PM_REMOVE))//为线程创建消息队列,接收当前调用线程的窗口的消息,PM_REMOVE表示将消息从消息队列中删除
{
// If a dialog message will be taken care of by the dialog proc
if ((hWndApp != NULL) && IsDialogMessageW(hWndApp, &msg))
{
continue;
}
TranslateMessage(&msg);//对消息进行处理,将击键消息转换为字符消息
DispatchMessageW(&msg);
}
}
return static_cast<int>(msg.wParam);
}
/// <summary>
/// Main processing function
/// </summary>
//更新窗口,update函数做了一些错误处理
void CColorBasics::Update()
{
if (NULL == m_pNuiSensor// 如果pNuiSensor为空,那说明设备还没有初始化
{
return;
}
if ( WAIT_OBJECT_0 == WaitForSingleObject(m_hNextColorFrameEvent, 0) )//检测m_hNextColorFrameEvent是否有消息
//0表示立即返回WAIT_OBJECT_0,返回WAIT_OBJECT_0代表kinect有消息来
{
ProcessColor(); //若有消息,执行ProcessColor函数,这里面有真正的更新函数
}
}
/// <summary>
/// Handles window messages, passes most to the class instance to handle//处理窗口消息
/// </summary>
/// <param name="hWnd">window message is for</param>
/// <param name="uMsg">message</param>
/// <param name="wParam">message data</param>
/// <param name="lParam">additional message data</param>
/// <returns>result of message processing</returns>
LRESULT CALLBACK CColorBasics::MessageRouter(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
CColorBasics* pThis = NULL;
if (WM_INITDIALOG == uMsg)//对话框和子控件全部创建完毕
{
pThis = reinterpret_cast<CColorBasics*>(lParam);//强制转换
SetWin
没有合适的资源?快使用搜索试试~ 我知道了~
ColorBasics-D2D.rar_节点相似性
共43个文件
tlog:14个
h:4个
cpp:2个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 77 浏览量
2022-09-24
07:05:39
上传
评论
收藏 15.23MB RAR 举报
温馨提示
使用Kinect获取彩色图像的程序,在vs平台下使用C++编写。
资源推荐
资源详情
资源评论
收起资源包目录
ColorBasics-D2D.rar (43个子文件)
ColorBasics-D2D
app.ico 31KB
ImageRenderer.h 3KB
ColorBasics.aps 34KB
ColorBasics-D2D.vcxproj 9KB
stdafx.h 2KB
ColorBasics.rc 6KB
ColorBasics.cpp 20KB
ImageRenderer.cpp 6KB
ColorBasics-D2D.suo 15KB
resource.h 1KB
ColorBasics-D2D.vcxproj.user 221B
ColorBasics-D2D.sln 1KB
ColorBasics.h 4KB
ipch
colorbasics-d2d-a985d33b
colorbasics-d2d-e3124887.ipch 36.31MB
Debug
vc100.idb 643KB
CL.write.1.tlog 810B
CL.read.1.tlog 27KB
mt.read.1.tlog 310B
rc.write.1.tlog 494B
ColorBasics.res 32KB
ColorBasics-D2D.exe.embed.manifest.res 748B
ImageRenderer.obj 107KB
ColorBasics-D2D.exe.embed.manifest 682B
rc.read.1.tlog 3KB
ColorBasics-D2D.exe.intermediate.manifest 640B
ColorBasics-D2D.ilk 1.09MB
mt.command.1.tlog 416B
ColorBasics-D2D.log 3KB
cl.command.1.tlog 1KB
link-cvtres.read.1.tlog 2B
link.write.1.tlog 988B
ColorBasics-D2D.pdb 2.91MB
link-cvtres.write.1.tlog 2B
link.command.1.tlog 2KB
rc.command.1.tlog 1KB
link.read.1.tlog 3KB
ColorBasics-D2D.lastbuildstate 72B
ColorBasics-D2D_manifest.rc 220B
mt.write.1.tlog 310B
ColorBasics-D2D.exe 482KB
ColorBasics.obj 122KB
vc100.pdb 780KB
ColorBasics-D2D.sdf 35.39MB
共 43 条
- 1
资源评论
朱moyimi
- 粉丝: 64
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功