//控件绘制事件处理方法 void CLedCtrl::OnPaint() { // TODO: Add your message handler code here // Do not call CStatic::OnPaint() for painting messages GetClientRect(&m_recClient); CPaintDC dc(this); CMemDC memDC(&dc, m_recClient); CMemDC* pDC = &memDC; CRect clip; pDC->GetClipBox(&clip); pDC->FillSolidRect(&m_recClient, m_crColorBackground ); for (int nCount = 0; nCount< m_strNumber.GetLength(); nCount++) { if (m_bDrawFadedNotches) Draw( pDC, STCOUNTERALL, nCount ); // Draw the faded bits //CString str = m_strNumber[nCount]; if ( m_strNumber[nCount] == _T('0') ) Draw( pDC, STCOUNTER0, nCount ); else if ( m_strNumber[nCount] == _T('1') ) Draw( pDC, STCOUNTER1, nCount ); else if ( m_strNumber[nCount] == _T('2') ) Draw( pDC, STCOUNTER2, nCount ); else if ( m_strNumber[nCount] == _T('3') ) Draw( pDC, STCOUNTER3, nCount ); else if ( m_strNumber[nCount] == _T('4') ) Draw( pDC, STCOUNTER4, nCount ); else if ( m_strNumber[nCount] == _T('5') ) Draw( pDC, STCOUNTER5, nCount ); else if ( m_strNumber[nCount] == _T('6') ) Draw( pDC, STCOUNTER6, nCount ); else if ( m_strNumber[nCount] == _T('7') ) Draw( pDC, STCOUNTER7, nCount ); else if ( m_strNumber[nCount] == _T('8') ) Draw( pDC, STCOUNTER8, nCount ); else if ( m_strNumber[nCount] == _T('9') ) Draw( pDC, STCOUNTER9, nCount ); else if ( m_strNumber[nCount] == _T('-') ) Draw( pDC, STCOUNTER10, nCount ); else if ( m_strNumber[nCount] == _T(':') ) Draw( pDC, STCOUNTER11, nCount ); } }
void CScreenViewWnd::OnLButtonDblClk(UINT nFlags, CPoint point) { CDialog::OnLButtonDblClk(nFlags, point); if (!valid_camera(_selectCamera)) { return; } _sync_drawing.Lock(); _frameQueue.clear(); // frame_buffer clear CClientDC dc(this); CMemDC MemDC; MemDC.CreateDC(&dc, &_bmpCanvas); MemDC->FillSolidRect(_rectScreen, RGB(0, 0, 0)); MemDC.DeleteDC(); UINT32 cameraList = 0; if (_fuse1x1Mode == false) { // 1x1 mode setting _fuse1x1Mode = true; setScreenLayout(ScreenFormatter::LAYOUT_1X1, _selectCamera, _rectScreen); // watch for only selected camera cameraList |= 1 << _selectCamera; } else { _fuse1x1Mode = false; setScreenLayout(_countLiveCamera); for (int i = 0; i < _countLiveCamera; ++i) { CameraView& rcamera = _cameraView[i]; if (rcamera.is_visible()) { cameraList |= 1 << i; } } } _sync_drawing.Unlock(); CWnd* lpParent = GetParent(); if (lpParent != NULL && lpParent->GetSafeHwnd()) { lpParent->PostMessage(UM_SCREEN_DBLCLICK, static_cast<WPARAM>(cameraList), static_cast<LPARAM>(MAX_CAMERA_COUNTS)); } Invalidate(FALSE); }
void CScreenViewWnd::clearScreen() { _sync_drawing.Lock(); for (int i = 0; i < _countCamera; i++) { _cameraView[i].resetCamera(); } _selectCamera = -1; _countLiveCamera = __min(_countCamera, 16); CDC* pDC = GetDC(); CMemDC MemDC; MemDC.CreateDC(pDC, &_bmpCanvas); MemDC->FillSolidRect(_rectScreen, RGB(0, 0, 0)); MemDC.DeleteDC(); ReleaseDC(pDC); _sync_drawing.Unlock(); Invalidate(TRUE); }
void CScreenViewWnd::updateStatus(int camera) { if (GetSafeHwnd() == NULL) { return; } _sync_drawing.Lock(); if (_fuse1x1Mode == true && _selectCamera != camera) { _sync_drawing.Unlock(); return; } if (!_cameraView[camera].is_visible()) { _sync_drawing.Unlock(); return; } int camstatus = getCameraState(camera); CClientDC dc(this); CMemDC MemDC; MemDC.CreateDC(&dc, &_bmpCanvas); const CRect& rctcamera = _cameraView[camera].rect(); if (camstatus != CameraView::ENABLED) { MemDC->FillSolidRect(rctcamera, (camstatus == CameraView::NO_VIDEO) ? RGB(0, 0, 255) : RGB(0, 0, 0)); } CString strStatus = _T(""); switch (camstatus) { case CameraView::NO_VIDEO : strStatus = _T("No Video"); break; case CameraView::NOT_CONNECTED: strStatus = _T("Not Connected"); break; case CameraView::COVERT_LEVEL1 : strStatus = _T("Covert"); break; case CameraView::COVERT_LEVEL2 : strStatus = _T(""); break; } CRect rctosd = rctcamera; rctosd.DeflateRect(5, 2, 5, 3); CFont* lpFontPrev = MemDC->SelectObject(&_fontText); drawText(&MemDC, strStatus, rctosd, DT_CENTER | DT_VCENTER | DT_SINGLELINE); drawText(&MemDC, getCameraTitle(camera), rctosd, DT_LEFT | DT_TOP | DT_SINGLELINE); MemDC->SelectObject(lpFontPrev); MemDC->Draw3dRect(rctcamera, RGB(255, 255, 255), RGB(255, 255, 255)); dc.BitBlt(rctcamera.left, rctcamera.top, rctcamera.Width(), rctcamera.Height(), &MemDC, rctcamera.left, rctcamera.top, SRCCOPY); _sync_drawing.Unlock(); }
void CScreenViewWnd::drawImage(int camera, LPBYTE pImage, const CSize& size, SDK_TIME_T time) { CameraView& rcamView = _cameraView[camera]; _sync_drawing.Lock(); if (!rcamView.is_visible() || !rcamView.is_enable()) { _sync_drawing.Unlock(); return; } _bmpInfohead.biWidth = size.cx; _bmpInfohead.biHeight = size.cy; _bmpInfohead.biSizeImage = size.cx * size.cy * _bmpInfohead.biBitCount >> 3; CDC* pDC = GetDC(); if ((size.cx > 0) && (size.cy > 0)) { CMemDC MemDC; ASSERT(_bmpCanvas.m_hObject); MemDC.CreateDC(pDC, &_bmpCanvas); CRect rctDest = rcamView.rect(); CRect rctImage = rctDest; if (_fuseAspectRatio) { imageAspectRatio(size.cx, size.cy, rctImage, rctImage); if (rcamView.rectImage() != rctImage) { MemDC->FillSolidRect(rctDest, RGB(0, 0, 0)); } else { const int letter_t = rctImage.top - rctDest.top; const int letter_b = rctDest.bottom - rctImage.bottom; const int letter_l = rctImage.left - rctDest.left; const int letter_r = rctDest.right - rctImage.right; if (letter_t > 1 || letter_b > 1 || letter_l > 1 || letter_r > 1) { if (letter_t > 0) { MemDC->FillSolidRect(rctDest.left + 1, rctDest.top, rctDest.Width() - 2, letter_t, RGB(0, 0, 0)); } if (letter_b > 0) { MemDC->FillSolidRect(rctDest.left + 1, rctImage.bottom, rctDest.Width() - 2, letter_b, RGB(0, 0, 0)); } if (letter_l > 0) { MemDC->FillSolidRect(rctDest.left + 1, rctImage.top, letter_l, rctImage.Height(), RGB(0, 0, 0)); } if (letter_r > 0) { MemDC->FillSolidRect(rctImage.right, rctImage.top, letter_r, rctImage.Height(), RGB(0, 0, 0)); } } } } rcamView.setRectImage(rctImage); ::DrawDibDraw(_hDrawDib, MemDC, rctImage.left, rctImage.top, rctImage.Width(), rctImage.Height(), &_bmpInfohead, pImage, 0, 0, size.cx, size.cy, 0); drawReferLines(&MemDC); CRect rctOSD = rctDest; rctOSD.DeflateRect(5, 2, 5, 3); CTime tmFrame(time); CString strTime = (rctOSD.Width() < 140) ? tmFrame.Format(_T("%H:%M:%S")) : tmFrame.Format(_T("%y-%m-%d %H:%M:%S")); CString strTitle = getCameraTitle(camera); /* CFont* lpFontPrev = MemDC->SelectObject(&_fontText); drawText(&MemDC, strTitle, rctOSD, DT_TOP | DT_LEFT | DT_SINGLELINE); drawText(&MemDC, strTime, rctOSD, DT_BOTTOM | DT_CENTER | DT_SINGLELINE); MemDC->SelectObject(lpFontPrev); */ COLORREF clrBorder = (_selectCamera == camera) ? RGB(0, 255, 0) : RGB(255, 255, 255); MemDC->Draw3dRect(rctDest, clrBorder, clrBorder); pDC->BitBlt(rctDest.left, rctDest.top, rctDest.Width(), rctDest.Height(), &MemDC, rctDest.left, rctDest.top, SRCCOPY); } ReleaseDC(pDC); _sync_drawing.Unlock(); }