我的YUV播放器MFC小笔记:设置picture控件背景为黑色、窗口缩放
2015-08-15 23:35
344 查看
图像的显示主要使用picture控件,一般播放器,在初始化时,播放画面的区域背景都是黑色的,在YUV播放器,也如此。但在网上找了很久的资料才实现该功能,其实说白了,代码很简单,在OnPaint函数中将picture画为黑色即可。代码:
下面实现主窗口的缩放。主要针对界面上各种按钮的位置的摆放。使用到MoveWindow和SetWindowPos两个函数。由于按钮较多,使用数组存储其ID:
实现OnSize函数:
李迟 2015.8.15晚
//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晚
相关文章推荐
- 算法题:杨辉三角打印
- wpf 主窗口关闭时关闭其它子窗口
- 浅谈自定义Toast~~
- 读Excel字段
- OFFSET IN 使用举例
- Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC
- 【开讲啦】20150814 余秋雨:寻找远方的自己
- 树状数组解析与例题
- JavaScript高级程序设计笔记(4)
- SQL常有语句
- TCP重发机制
- igrimaceV8.0.0 IG 一键新机 陌陌 Uber优步打针 平安易贷 滴滴 一号专车 饿了么 ios8 V8 ZTN(插件安装方式)
- C#对Ajax页面内容采集
- 英语句子倒序
- Asp.Net WebForm和MVC同样优秀!
- poj 2182 树状数组+二分
- AJAX的话题与简单实现
- Linux Shell脚本编程初体验
- 每天读一遍,不久你就会变
- Android下发送邮件功能总结