在使用YUV Player Deluxe时,发现其可保存上一次的参数,研究之后,才知道它是使用注册表来实现的。下面是YUV播放器与注册表有关的函数接口,注册表与了我的大名外,其它值是参照YUV Player Deluxe的。在写这篇文章时,还没有空完全实现播放参数的保存,主要是用户自定义的分辨率的添加和删除,还要排序。有点工作量。

判断注册表节点是否存在函数:

BOOL CSettingDlg::ExistRegistration()
{HKEY hKey;int ret = 0;ret = RegOpenKeyEx(HKEY_CURRENT_USER,  _T("Software\\YUVPlayer-latelee.org"), 0, KEY_ALL_ACCESS, &hKey);RegCloseKey(hKey);return !ret;
}

写注册表函数:

void CSettingDlg::SetRegistration(CString& strSize, int width, int height, int fpsidx, int fmt, int loop)
{HKEY hKey;RegCreateKey(HKEY_CURRENT_USER, _T("Software\\YUVPlayer-latelee.org\\Setting"), &hKey);RegSetValueEx(hKey, _T("AddedSize"), 0, REG_SZ, (BYTE*)(strSize.GetBuffer()), strSize.GetLength()*sizeof(TCHAR));RegSetValueEx(hKey, _T("FrameWidth"), 0, REG_DWORD, (BYTE*)&width, 4);RegSetValueEx(hKey, _T("FrameHeight"), 0, REG_DWORD, (BYTE*)&height, 4);RegSetValueEx(hKey, _T("FrameRate"), 0, REG_DWORD, (BYTE*)&fpsidx, 4);RegSetValueEx(hKey, _T("CurrentPixelFormat"), 0, REG_DWORD, (BYTE*)&fmt, 4);RegSetValueEx(hKey, _T("Loop"), 0, REG_DWORD, (BYTE*)&loop, 4);RegCloseKey(hKey);
}

读注册表函数:

void CSettingDlg::GetRegistration(CString& strSize, int& width, int& height, int& fpsidx, int& fmt, int& loop)
{
HKEY hKey;
DWORD dwType = 0;
DWORD dwLen = 1024; // 此处值是否适合?CString类型如何给定长度?
BYTE szBuffer[1024] = {0};
RegOpenKeyEx(HKEY_CURRENT_USER,  _T("Software\\YUVPlayer-latelee.org\\Setting"), 0, KEY_QUERY_VALUE, &hKey);
RegQueryValueEx(hKey, _T("AddedSize"), NULL, &dwType, szBuffer, &dwLen);
RegQueryValueEx(hKey, _T("FrameWidth"), NULL, &dwType, (BYTE*)&width, &dwLen);
RegQueryValueEx(hKey, _T("FrameHeight"), NULL, &dwType, (BYTE*)&height, &dwLen);
RegQueryValueEx(hKey, _T("FrameRate"), NULL, &dwType, (BYTE*)&fpsidx, &dwLen);
RegQueryValueEx(hKey, _T("CurrentPixelFormat"), NULL, &dwType, (BYTE*)&fmt, &dwLen);
RegQueryValueEx(hKey, _T("Loop"), NULL, &dwType, (BYTE*)&loop, &dwLen);
strSize.Format(_T("%s"), szBuffer);
RegCloseKey(hKey);
}

在AddedSize参数中,本来是使用strSize.GetBuffer()来存储获取的值(即分辨率),在调试时,发现会有错误,于是改用szBuffer。因为在类中使用m_strAddedSize,在构造函数里,我已经按默认值初始化一次,可能CString长度固定了,后来添加分辨率的话,长度变长,会有溢出。纯粹是个人猜测。

在初始化时,会去读注册表的值,如不存在,会先将默认值写进去。

    // defaultif (!ExistRegistration()){SetRegistration(m_strAddedSize, m_nWidth,m_nHeight, m_nFpsIndex, m_nYuvFormat, m_fLoop);}// readGetRegistration(m_strAddedSize, m_nWidth, m_nHeight, m_nFpsIndex, m_nYuvFormat, m_fLoop);

李迟 2015.8.15 晚

我的YUV播放器MFC小笔记:注册表读写相关推荐

  1. 我的YUV播放器MFC小笔记:设置picture控件背景为黑色、窗口缩放

    图像的显示主要使用picture控件,一般播放器,在初始化时,播放画面的区域背景都是黑色的,在YUV播放器,也如此.但在网上找了很久的资料才实现该功能,其实说白了,代码很简单,在OnPaint函数中将 ...

  2. 我的YUV播放器MFC小笔记:非模态对话框建立及窗口间传值

    YUV播放器中,显示界面(主窗口)和设置界面分离,所有参数均在Setting子窗口设置,故需要主窗口和子窗口中实现参数传递.下面是方法. 1. 在主窗口CYUVPlayerDlg类中定义子窗口变量: ...

  3. 我的YUV播放器MFC小笔记:添加删除自定义分辨率

    在最初设计YUV播放参数时,就考虑参数的保存,即使用注册表方式,前文已述.但直到后来才解决几个技术问题,方得以写此文章. 分辨率使用下拉框形式,在程序启动时初始化,不在资源中写死.注册表使用一个str ...

  4. 我的YUV播放器MFC小笔记:解析文件名称

    为了方便播放器直接播放,也为实现所谓智能识别文件分辨率和格式,对文件名称进行解析,代码如下: #define ARRAY_ELEMS(a) (sizeof(a) / sizeof((a)[0]))// ...

  5. 我的YUV播放器MFC小笔记:unicode编码、宽字符

    以前的MFC工程,字符集都是基于多字节的,而现在这个工程,无意间使用unicode字符集,在其过程中,有诸多函数使用不同于以前.当然,建立项目后也是可以在项目属性中修改字符集的.这篇文章记录一下关 ...

  6. 我的YUV播放器MFC小笔记:右键菜单事件和非标题实现鼠标拖动

    鼠标右键弹出菜单代码如下: // 右键菜单 void CYUVPlayerDlg::OnContextMenu(CWnd* pWnd, CPoint point) {// TODO: Add your ...

  7. 我的HEVC码流分析工具MFC小笔记:树形控件使用及窗口缩放

    大约1个半月前,发布了自己写的HEVC码流分析工具.当时的版本显示语法元素使用是的Edit控件.很多主流分析工具都使用树形控件,看上去觉得比较高端,于是在纠结一天后下定决心自己也实现树形的HEVC语法 ...

  8. 使用SDL实现一个简单的YUV播放器

    本文将通过几个简单示例,最后实现一个YUV播放器 本文内容如下 1.SDL的基本操作 2.SDL的处理事件 3.SDL的纹理渲染 4.使用SDL实现YUV播放器 1.SDL的基本操作 这个例子中,使用 ...

  9. php video标签使用方法,HTML_HTML5 video标签(播放器)学习笔记(一):使用入门,近有在学习html5中video标签(播 - phpStudy...

    HTML5 video标签(播放器)学习笔记(一):使用入门 近有在学习html5中video标签(播放器)的使用,这里做一些学习笔记,方便自己查阅和记录,本文是第一篇,将介绍的是使用该标签初始化该做 ...

最新文章

  1. [导入]MsAjax Lib- Boolean.parse 函数
  2. Java每天10道面试题,跟我走,offer有!(七)
  3. CodeForces - 1295B Infinite Prefixes(数学)
  4. 【转】30分钟学会UML类图
  5. 十年生死轮回,看国产手机发展四个阶段
  6. Android 手机不赚钱为啥还要做
  7. python和java哪个好学-java和python哪个的前途更好?
  8. B树与B+树 有动画
  9. 程序人生,程序猿要把编程一直学习下去吗?
  10. spring 事务源码(三)如何保证被@Transactional标记方法中的所有sql都在一个事务内
  11. kasp技术原理_KASP——基因分型研究者指尖跳跃的珠链
  12. 红米6pro刷机教无人直播包教程
  13. 时域认识采样定理的一个小例子
  14. 用u盘进不了pe计算机意外地,u盘装系统启动不了无法进入pe怎么办
  15. 弹弹堂高抛50°中抛计算器C#程序
  16. 2021-09-28
  17. one coin,oneworld
  18. 如何查看Isilon节点的硬件信息?
  19. [转]PHP大型Web应用入门(一)
  20. 手机射频测试-非信令

热门文章

  1. 特斯拉FED在美售价上调至1.2万美元 国内售价6.4万元
  2. 华策影视:控股股东、实控人等拟合计减持不超4.01%股份
  3. iPhone 13有搞头,经典功能或将回归!
  4. 小屏手机大势已去!iPhone 12 Pro Max被买空mini居然还有货
  5. “浪姐”万茜盗号事件是锅传锅?阿里、网易都来回应了
  6. 联想拯救者电竞手机成功“截胡”:全球首发骁龙865+
  7. 躺枪实惨!与新冠病毒“重名”,这款墨西哥国民啤酒宣布暂停生产...
  8. 一加8系列新机有望亮相CES 2020:全系支持5G网络
  9. 昔日互联网影视巨头现在连三包服务都无法履行?客服:建议亲自行维修呢
  10. 卢伟冰宣布Redmi新机即将发布 疑为Redmi 8A