void CDBPickView::DrawWindow(int nWindow, CDC *pDC) { CBrush WhiteBrush(RGB(255,255,255)); CBrush GrayBrush(RGB(192,192,192)); CBrush BlueBrush(RGB(0,0,128)); CPen WhitePen(PS_SOLID,1,RGB(255,255,255)); CPen DarkPen(PS_SOLID,1,RGB(0,0,0)); CPen BluePen(PS_SOLID,1,RGB(0,0,255)); CPen YellowPen(PS_SOLID,1,RGB(255,255,0)); int xw1=WaveformInfo[nWindow]->xw1; int xw2=WaveformInfo[nWindow]->xw2; int yw1=WaveformInfo[nWindow]->yw1; int yw2=WaveformInfo[nWindow]->yw2; int x1=WaveformInfo[nWindow]->x1; int x2=WaveformInfo[nWindow]->x2; int y1=WaveformInfo[nWindow]->y1; int y2=WaveformInfo[nWindow]->y2; long amin=WaveformInfo[nWindow]->amin; long amax=WaveformInfo[nWindow]->amax; CPen *oldPen=pDC->GetCurrentPen(); CFont *oldFont=pDC->GetCurrentFont(); CBrush *oldBrush=pDC->GetCurrentBrush(); CRect rc(xw1, MaxY-yw2, xw2, MaxY-yw1); pDC->FillRect(&rc, &BlueBrush); pDC->SelectObject(&DarkPen); //*********************************************************** pDC->SelectObject(&WhitePen); pDC->MoveTo(xw1,MaxY-yw2); pDC->LineTo(xw2,MaxY-yw2); pDC->MoveTo(xw1,MaxY-yw2); pDC->LineTo(xw1,MaxY-yw1); pDC->MoveTo(xw1+1,MaxY-yw2); pDC->LineTo(xw1+1,MaxY-yw1); pDC->SelectObject(&DarkPen); pDC->MoveTo(xw2,MaxY-yw1); pDC->LineTo(xw2,MaxY-yw2); pDC->MoveTo(xw2,MaxY-yw1); pDC->LineTo(xw1,MaxY-yw1); pDC->SelectObject(&DarkPen); pDC->MoveTo(xw1+WindowInfoXsize,MaxY-yw1); pDC->LineTo(xw1+WindowInfoXsize,MaxY-yw2); pDC->SelectObject(&WhitePen); pDC->MoveTo(xw1+WindowInfoXsize+1,MaxY-yw1); pDC->LineTo(xw1+WindowInfoXsize+1,MaxY-yw2); pDC->MoveTo(xw1+WindowInfoXsize+2,MaxY-yw1); pDC->LineTo(xw1+WindowInfoXsize+2,MaxY-yw2); //************************************************************* // Draw Ampl (Y) Axis // CRect rc1(xw1, MaxY-yw2, xw1+WindowInfoXsize-1, MaxY-yw1); pDC->FillRect(&rc1, &GrayBrush); pDC->SelectObject(&DarkPen); pDC->SetTextColor(RGB(0,0,0)); pDC->MoveTo(xw1+WindowInfoXsize-8,MaxY-(yw1+8)); pDC->LineTo(xw1+WindowInfoXsize-8,MaxY-(yw2-8)); pDC->MoveTo(xw1+WindowInfoXsize-8,MaxY-(yw1+8)); pDC->LineTo(xw1+WindowInfoXsize-8+4,MaxY-(yw1+8)); pDC->MoveTo(xw1+WindowInfoXsize-8,MaxY-(yw2-8)); pDC->LineTo(xw1+WindowInfoXsize-8+4,MaxY-(yw2-8)); pDC->SelectObject(&WhitePen); { RECT rcText; char cText[64]; sprintf(cText,"%d",amax); CRect rcc1(xw1,MaxY-(yw2-8),xw1+WindowInfoXsize-8-2, MaxY-(yw2-8-13)); pDC->DrawText(cText,rcc1,DT_RIGHT); sprintf(cText,"%d",amin); GetTextRectangle(cText, rcText); CRect rcc2(xw1,MaxY-(yw1+8+13),xw1+WindowInfoXsize-8-2, MaxY-(yw1-8)); pDC->DrawText(cText,rcc2,DT_RIGHT); CRect rcc3(xw1+5,(MaxY-yw2),xw1+WindowInfoXsize-8-2, (MaxY-yw1)); sprintf(cText,"%s::%s",WaveformInfo[nWindow]->StaName, WaveformInfo[nWindow]->ChanName); pDC->DrawText(cText,rcc3, DT_VCENTER|DT_SINGLELINE ); } //************************************************************** int nXferBlocks=this->pRTDisplay->WaveformInfo[nWindow]->xferData.GetSize(); double ttt=-1.; double dSpS=WaveformInfo[nWindow]->dSpS; pDC->SelectObject(&YellowPen); for(int j=0; j<nXferBlocks; ++j) { CDataBlock *xfd=this->pRTDisplay->WaveformInfo[nWindow]->xferData[j]; double t1packet=this->pRTDisplay->WaveformInfo[nWindow]->xferData[j]->beg; double t2packet=this->pRTDisplay->WaveformInfo[nWindow]->xferData[j]->end; int nsamp=this->pRTDisplay->WaveformInfo[nWindow]->xferData[j]->nsamp; for(int k=0; k<nsamp; ++k) { long a=this->pRTDisplay->WaveformInfo[nWindow]->xferData[j]->data[k]; double tt=t1packet+(1./dSpS)*k; int x,y; if(tt<t1) continue; if(tt>t2) break; x=(int)((tt-t1)*(x2-x1)/(t2-t1)+x1); if(a>amax) a=amax; if(a<amin) a=amin; y=(a-amin)*(y2-y1)/(amax-amin)+y1; y=MaxY-y; if(tt-ttt>1.1/dSpS) { pDC->MoveTo(x,y); } else { pDC->LineTo(x,y); } ttt=tt; } } DrawGaps(nWindow,pDC); pDC->SelectObject(oldPen); pDC->SelectObject(oldBrush); pDC->SelectObject(oldFont); }
void CDoubleBufferDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // 그리기를 위한 디바이스 컨텍스트입니다. SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 클라이언트 사각형에서 아이콘을 가운데에 맞춥니다. int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // 아이콘을 그립니다. dc.DrawIcon(x, y, m_hIcon); } else { #ifndef DOUBLE CPaintDC dc(this); int x, y; CRect rect; GetClientRect(&rect); CPen *oldPen; CPen BlackPen(PS_SOLID, 1, RGB(0,0,0)); CPen GreenPen(PS_SOLID, 1, RGB(0,255,0)); CPen BluePen(PS_SOLID, 5, RGB(0,0,255)); oldPen = dc.SelectObject(&BlackPen); for (x = 0; x < rect.right; x += 10) { dc.MoveTo(x, 0); dc.LineTo(x, rect.bottom); } for (y = 0; y < rect.bottom; y += 10) { dc.MoveTo(0, y); dc.LineTo(rect.right, y); } dc.SelectObject(&GreenPen); dc.Ellipse(ex - r, ey - r, r * 2, r * 2); dc.SelectObject(&BluePen); dc.Ellipse(ex - r, ey - r, r * 2, r * 2); dc.SelectObject(oldPen); #else CPaintDC paintdc(this); CDC dc; CBitmap dcBitmap, *pOldBitmap; CPen BlackPen(PS_SOLID, 1, RGB(0,0,0)); CPen GreenPen(PS_SOLID, 1, RGB(0,255,0)); CPen BluePen(PS_SOLID, 5, RGB(0,0,255)); CPen *pOldPen; int x, y; CRect rect; GetClientRect(&rect); dc.CreateCompatibleDC(&paintdc); dcBitmap.CreateCompatibleBitmap(&paintdc, rect.Width(), rect.Height()); pOldBitmap = dc.SelectObject(&dcBitmap); dc.PatBlt(0, 0, rect.Width(), rect.Height(), WHITENESS); pOldPen = dc.SelectObject(&BlackPen); for (x = 0; x < rect.right; x += 10) { dc.MoveTo(x, 0); dc.LineTo(x, rect.bottom); } for (y = 0; y < rect.bottom; y += 10) { dc.MoveTo(0, y); dc.LineTo(rect.right, y); } dc.SelectObject(&GreenPen); dc.Ellipse(ex - r, ey - r, ex - r + r * 2, ey - r + r * 2); dc.SelectObject(&BluePen); dc.Ellipse(ex - r, ey - r, ex - r + r * 2, ey - r + r * 2); paintdc.BitBlt(0, 0, rect.Width(), rect.Height(), &dc, 0, 0, SRCCOPY); dc.SelectObject(pOldPen); dc.SelectObject(pOldBitmap); ReleaseDC(&dc); DeleteDC(dc); #endif CDialogEx::OnPaint(); } }
void CDBPickView::DrawWaveforms() { CWaitCursor wc; this->pRTDisplay->Critical.Lock(); RECT rc; CDC MemDC; CDC *pDC=GetDC(); CBitmap Bitmap1; CalculateWindowsSize(); rc.left=rc.top=0; rc.right=MaxX; rc.bottom=MaxY; Bitmap1.CreateCompatibleBitmap(pDC,rc.right,rc.bottom); MemDC.CreateCompatibleDC(pDC); ReleaseDC(pDC); CBitmap *poldBMP=MemDC.SelectObject(&Bitmap1); CBrush WhiteBrush(RGB(255,255,255)); CBrush GrayBrush(RGB(192,192,192)); CBrush BlueBrush(RGB(0,0,128)); CPen WhitePen(PS_SOLID,1,RGB(255,255,255)); CPen DarkPen(PS_SOLID,1,RGB(0,0,0)); CPen BluePen(PS_SOLID,1,RGB(0,0,255)); CPen YellowPen(PS_SOLID,1,RGB(255,255,0)); CPen WhitePen2(PS_SOLID,2,RGB(255,255,255)); CPen GrayPen2(PS_SOLID,2,RGB(128,128,128)); CPen *oldPen=MemDC.GetCurrentPen(); CFont *oldFont=MemDC.GetCurrentFont(); CBrush *oldBrush=MemDC.GetCurrentBrush(); MemDC.SetBkMode(TRANSPARENT); MemDC.FillRect(&rc, &BlueBrush); MemDC.SelectObject(CFont::FromHandle((HFONT)GetStockObject(ANSI_VAR_FONT))); MemDC.SelectObject(&DarkPen); MemDC.MoveTo(0,0); MemDC.LineTo(0,MaxY); DrawTimePanel(&MemDC); for(int i=0; i<WaveformInfo.GetSize(); ++i) { DrawWindow(i,&MemDC); } MemDC.SelectObject(poldBMP); MemDC.SelectObject(oldPen); MemDC.SelectObject(oldBrush); MemDC.SelectObject(oldFont); MemDC.DeleteDC(); this->pRTDisplay->Critical.Unlock(); ScreenBitmapCriticalSection.Lock(); if(Bitmap.m_hObject!=NULL) { Bitmap.DeleteObject(); } HGDIOBJ pBmp=Bitmap1.Detach(); Bitmap.Attach(pBmp); ScreenBitmapCriticalSection.Unlock(); InvalidateRect(NULL,FALSE); }
void CPreview::DrawPreviewBitmap() { if(!bContinue) return; MaxX=width(); MaxY=height(); QPixmap tmpBitmap(MaxX, MaxY); QPainter DC(&tmpBitmap); QRect rc=rect(); x1=4; x2=MaxX-4; y1=4; y2=MaxY-4; xw1=1; xw2=MaxX; yw1=0; yw2=MaxY; QBrush WhiteBrush(QColor(255,255,255)); QBrush GrayBrush(QColor(192,192,192)); QBrush BlueBrush(QColor(0,0,255)); QPen WhitePen(QColor(255,255,255)); QPen DarkPen(QColor(0,0,0)); QPen BluePen(QColor(0,0,255)); QPen YellowPen(QColor(255,255,0)); QPen WhitePen2(QColor(255,255,255),2); QPen GrayPen2(QColor(128,128,128),2); //******************************************************************** DC.setPen(BluePen); DC.fillRect(rc, BlueBrush); // DC.SelectObject(CFont::FromHandle((HFONT)GetStockObject(ANSI_VAR_FONT))); int xl=(int)((pDisplay->t1 - pDisplay->tB1)*(x2-x1)/(pDisplay->tB2-pDisplay->tB1)+x1+0.5); int xr=(int)((pDisplay->t2 - pDisplay->tB1)*(x2-x1)/(pDisplay->tB2-pDisplay->tB1)+x1+0.5); DC.setPen(WhitePen2); DC.moveTo(xw1,MaxY-yw2); DC.lineTo(xw2,MaxY-yw2); DC.moveTo(xw1,MaxY-yw2); DC.lineTo(xw1,MaxY-yw1); DC.setPen(GrayPen2); DC.moveTo(xw2,MaxY-yw1); DC.lineTo(xw2,MaxY-yw2); DC.moveTo(xw2,MaxY-yw1); DC.lineTo(xw1,MaxY-yw1); DrawWaveform(DC); DC.setPen(WhitePen2); DC.moveTo(xl,MaxY-y1); DC.lineTo(xr,MaxY-y1); DC.lineTo(xr,MaxY-y2); DC.lineTo(xl,MaxY-y2); DC.lineTo(xl,MaxY-y1); //******************************************************************** ScreenBitmapCriticalSection.lock(); Bitmap=tmpBitmap; bDrawBitmap=TRUE; ScreenBitmapCriticalSection.unlock(); repaint(FALSE); }