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

    //picture控件背景色为黑色if (m_fShowBlack){CRect rtTop;CStatic *pWnd = (CStatic*)GetDlgItem(IDC_VIDEO);CDC *cDc = pWnd->GetDC();pWnd->GetClientRect(&rtTop);cDc->FillSolidRect(rtTop.left, rtTop.top, rtTop.Width(), rtTop.Height(),RGB(0,0,0));Invalidate(FALSE);}

下面实现主窗口的缩放。主要针对界面上各种按钮的位置的摆放。使用到MoveWindow和SetWindowPos两个函数。由于按钮较多,使用数组存储其ID:

// 各类按钮m_nStartX[0][0] = IDC_STATIC_FRAMECNT;m_nStartX[0][1] = IDC_SLIDER1;m_nStartX[0][2] = IDC_BUTTON_OPEN;m_nStartX[0][3] = IDC_BUTTON_SAVE;m_nStartX[0][4] = IDC_BUTTON_PLAY;m_nStartX[0][5] = IDC_BUTTON_STOP;m_nStartX[0][6] = IDC_BUTTON_PREV;m_nStartX[0][7] = IDC_BUTTON_NEXT;m_nStartX[0][8] = IDC_BUTTON_FIRST;m_nStartX[0][9] = IDC_BUTTON_LAST;m_nStartX[0][10] = IDC_BUTTON_SET;CRect rect;for (int i = 0; i < 10; i++){GetDlgItem(m_nStartX[0][i])->GetWindowRect(rect);ScreenToClient(rect);m_nStartX[1][i] = rect.left;}

实现OnSize函数:

// 窗口缩放
// todo:只能宽、高同时缩放
void CYUVPlayerDlg::OnSize(UINT nType, int cx, int cy)
{if (!m_fInit) return;
//    if (cx<=333 || cy <= 343) return;CDialogEx::OnSize(nType, cx, cy);CWnd *pWnd = GetDlgItem(IDC_VIDEO);if (pWnd){pWnd->MoveWindow(0, 0, cx, cy-26-20-21-4-4);pWnd->Invalidate();pWnd->UpdateData();}// 最右边的按钮pWnd = GetDlgItem(m_nStartX[0][10]);if (pWnd){pWnd->SetWindowPos(NULL,cx-30-2,cy-26-4,0,0,SWP_NOZORDER|SWP_NOSIZE);}int startx = 2;// 帧数统计pWnd = GetDlgItem(m_nStartX[0][0]);if (pWnd){pWnd->SetWindowPos(NULL,startx+m_nStartX[1][0],cy-26-20-21-4,0,0,SWP_NOZORDER|SWP_NOSIZE);}// 滚动条pWnd = GetDlgItem(m_nStartX[0][1]);if (pWnd){//pWnd->MoveWindow(startx+0, cy-26-26, cx, cy-26-20-21);//pWnd->Invalidate();pWnd->SetWindowPos( NULL,startx+m_nStartX[1][1],cy-26-26-4,cx,26,SWP_NOZORDER);}// 水平位置相同的按钮for (int i = 2; i < 10; i++){pWnd = GetDlgItem(m_nStartX[0][i]);if (pWnd){pWnd->SetWindowPos(NULL,startx+m_nStartX[1][i],cy-26-4,0,0,SWP_NOZORDER|SWP_NOSIZE);}}
}

李迟 2015.8.15晚



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

  1. 我的YUV播放器MFC小笔记:注册表读写

    在使用YUV Player Deluxe时,发现其可保存上一次的参数,研究之后,才知道它是使用注册表来实现的.下面是YUV播放器与注册表有关的函数接口,注册表与了我的大名外,其它值是参照YUV Pla ...

  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. MFC小笔记:上下控件

    一.需求 上下控件实际上是由edit控件和spin控件组成的,共2个控件.为方便描述,称为上下控件,即可以点击spin控件上下按钮增减数值,当通过上下按钮操作时,edit控件中同时显示数值的变化.另外 ...

  9. MFC 配置OpenCV在Picture控件上绘图

    首先下载C++的OpenCV,这里给个百度网盘链接: 链接:https://pan.baidu.com/s/1Hltk8-eVo0lY9rj3IgIAPw 提取码:m52c 解压,放在合适位置即可. ...

最新文章

  1. python2转python3文件
  2. 随机位置显示图片不重叠前端实现详细讲解附效果图,代码可直接使用
  3. kali linux 学习 NETCAT NC的使用
  4. python tutorial_Python Tutorial笔记
  5. day002--python编程的相关软件,变量
  6. 对我影响最大的三个老师
  7. 安装apache需要的组件
  8. react dispatch_React纯Hooks状态管理探索
  9. unity3d 任务头上的血条
  10. C++ 控制结构和函数(二) —— 函数I(Functions I)
  11. 【洛谷比赛】你的名字。
  12. xocodebulid 自动化打包 解决提示 ld: library not found for -lPods 问题
  13. python字符串筛选输出_「每日一练」巧用Python对字符串进行筛选
  14. bzoj 3527 [Zjoi2014]力——FFT
  15. 三菱plc编程有c语言吗,三菱plc编程用什么语言
  16. 宋宝华——Linux设备驱动开发详解:基于最新的Linux 4.0内核(第一章)
  17. 交管12123显示当前环境存在风险_手机刷入ROOT权限后交管12123等银行APP打不开怎么解决...
  18. spring中的web上下文,spring上下文,springmvc上下文区别(超详细)
  19. 小白刷LeeCode(算法篇)7
  20. 【阿里聚安全·移动安全周刊】移动裸奔时代,手机已成为隐私的监视器

热门文章

  1. 抢那么多封面,有那么多钱发红包吗?
  2. 又一腾讯应用将停运!企业QQ将于2022年1月31日关闭
  3. 微信公布9月朋友圈十大谣言:包括接通电话手机的钱就会被转走
  4. 芯片短缺波及国内车市 5月国内汽车销量下降3.1%
  5. 近期新机发布一览:最便宜的只需699元!
  6. 蛋壳公寓回应破产传闻:没有破产 也不会跑路
  7. 魅族POP2s真无线耳机正式发布:售价299元!
  8. 王小川:与龚宇相识14年 爱奇艺造假不可能
  9. 第一场“直播相声”来了!罗永浩宣布独家签约抖音:不赚钱,交个朋友
  10. 阿里巴巴香港上市审批获准 11月25日上市交易