我的YUV播放器MFC小筆記:設定picture控制元件背景為黑色、視窗縮放
阿新 • • 發佈:2019-01-09
影象的顯示主要使用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晚