void CComputer::draw(CClientDC &dc) { if (visible){ if ((isAttacker)||(underAttack)){ originalPen = dc.SelectObject(&redPen); dc.SetTextColor(red); }else{ originalPen = dc.SelectObject(&bluePen); dc.SetTextColor(black); } }else{ originalPen = dc.SelectObject(&whitePen); dc.SetTextColor(white); } originalFont = dc.SelectObject(&captionFont); dc.SetBkMode(TRANSPARENT); dc.Rectangle(x1,y1,x2,y2); if (textPosition == 0){//oben dc.TextOut(x1-4*borderWidth,y1-(borderWidth+captionTextSize),name); }else{//rechts unten dc.TextOut(x2+3*borderWidth,y2+borderWidth-captionTextSize,name); } drawDataText(dc); dc.SelectObject(&originalFont); dc.SelectObject(&originalPen); }
void CListSelector::draw(CClientDC &dc, int orgX, int orgY, int width, int height) { list<CSelectorItem>::iterator iter; int y0 = orgY; int y1 = orgY; int x0 = orgX; int x1 = orgX + width; //dc.Rectangle(orgX,orgY,orgX + width,orgY + height); int size=this->itemList.size(); //dc.LineTo(x1,y1); int count=9; int start=4; int isNeedBreak=FALSE; int j=0; for(int i= -4 + focusIndex ; i<= 4 + focusIndex; i++) { y0 = orgY + (j)*40; y1 = y0 + 40; CRect rect2(x0, y0+1, x1, y1); dc.Rectangle(&rect2); if(i==focusIndex) { CBrush *p=new CBrush(); p->CreateSolidBrush(RGB(200,0,000)); dc.FillRect(&rect2,p); dc.SetTextColor(RGB(255,255,255)); delete p; }else{ dc.SetTextColor(RGB(0,0,0)); } int index = 0; if(i<0){ index = (size*0X100000 + i) % size ; }else{ index=i % size ; } CString str(itemList[ index ].getValue().c_str()); dc.DrawText(str,&rect2,DT_CENTER|DT_VCENTER|DT_SINGLELINE); j++; } }
void CComputer::eraseDataText(CClientDC &dc) { dc.SetTextColor(white); originalFont = dc.SelectObject(&dataFont); drawDataText(dc); dc.SelectObject(&originalFont); }
STDMETHODIMP CMyCom1::DrawOffset(unsigned long m_pDC, unsigned long m_pOffset, double m_Scale, unsigned long m_pGraphInfo, BOOL scale_flag, BOOL m_active_flag) { AFX_MANAGE_STATE(AfxGetStaticModuleState()) // TODO: Add your implementation code here CClientDC * pDC = (CClientDC*) m_pDC; GraphInfo * pGraphInfo; //设置 if ( m_pGraphInfo != NULL ) { pGraphInfo = (GraphInfo*)m_pGraphInfo; m_GraphInfo.SetGraphInfo(*pGraphInfo); } else pGraphInfo = &m_GraphInfo; //计算偏移量 if ( m_pOffset != NULL ) { CPoint * offset = (CPoint *)m_pOffset; OffsetRgn((unsigned long)offset); } //设置激活标志 isActive = m_active_flag; double scale = 0; m_scale_flag = scale_flag; if ( m_scale_flag ) scale = m_Scale; else scale = 1; CFont * sysFont = pDC->SelectObject(&(pGraphInfo->font)); CPen * pen = new CPen( pGraphInfo->normal_penStyle, pGraphInfo->normal_linewidth, pGraphInfo->normal_linecolor ); //构造画笔 CPen * sysPen = pDC->SelectObject(pen); CBrush * normalBrush = new CBrush( pGraphInfo->normal_regioncolor ); //普通显示的画刷 CBrush * activeBrush = new CBrush( pGraphInfo->active_regioncolor ); //激活后的画刷 CBrush * blackBrush = new CBrush( BLACKBRUSHCOLOR ); CRgn outRgn; outRgn.CreateRectRgn(0, 0, 5, 5); CRect smallRect; //判断是否激活了,如果激活,添加outRect if ( isActive ) //激活 { if ( m_scale_flag ) //如果是在modelview区域 { //选中后,在外边画一个方框 outRgn.CombineRgn(&upRgn, &downRgn, RGN_OR); outRgn.GetRgnBox(&outRect); outRect.InflateRect(5, 5); pDC->MoveTo(outRect.left, outRect.top); pDC->LineTo(outRect.right, outRect.top); pDC->LineTo(outRect.right, outRect.bottom); pDC->LineTo(outRect.left, outRect.bottom); pDC->LineTo(outRect.left, outRect.top); //画出upRgn, downRgn, 和连线 //pDC->FillRgn(&upRgn, normalBrush); CRect upRect; upRgn.GetRgnBox(upRect); pDC->Rectangle(upRect); pDC->MoveTo(upPoints[2]); pDC->LineTo(upPoints[5]); pDC->MoveTo(topPoint); pDC->LineTo(bottomPoint); pDC->MoveTo(leftPoint); pDC->LineTo(rightPoint); pDC->FillRgn(&downRgn, normalBrush); inRect.SetRect(upPoints[0].x, upPoints[0].y, upPoints[2].x, upPoints[2].y); pDC->SetTextColor(pGraphInfo->textcolor); pDC->DrawText(m_name, inRect, TEXTOUTFOMAT); //|DT_END_ELLIPSIS); //在矩形的角上,画四个小矩形,5*5象素 smallRect.SetRect(outRect.left, outRect.top, outRect.left+5, outRect.top+5); pDC->FillRect(smallRect, blackBrush); smallRect.SetRect(outRect.right-5, outRect.top, outRect.right, outRect.top+5); pDC->FillRect(smallRect, blackBrush); smallRect.SetRect(outRect.right-5, outRect.bottom-5, outRect.right, outRect.bottom); pDC->FillRect(smallRect, blackBrush); smallRect.SetRect(outRect.left, outRect.bottom-5, outRect.left+5, outRect.bottom); pDC->FillRect(smallRect, blackBrush); } else //如果是在comview区域 { //选中后,在外边画一个方框 downRgn.GetRgnBox(&outRect); outRect.InflateRect(5, 5); pDC->MoveTo(outRect.left, outRect.top); pDC->LineTo(outRect.right, outRect.top); pDC->LineTo(outRect.right, outRect.bottom); pDC->LineTo(outRect.left, outRect.bottom); pDC->LineTo(outRect.left, outRect.top); //画出downRgn pDC->FillRgn(&downRgn, normalBrush); //在矩形的角上,画四个小矩形,5*5象素 smallRect.SetRect(outRect.left, outRect.top, outRect.left+5, outRect.top+5); pDC->FillRect(smallRect, blackBrush); smallRect.SetRect(outRect.right-5, outRect.top, outRect.right, outRect.top+5); pDC->FillRect(smallRect, blackBrush); smallRect.SetRect(outRect.right-5, outRect.bottom-5, outRect.right, outRect.bottom); pDC->FillRect(smallRect, blackBrush); smallRect.SetRect(outRect.left, outRect.bottom-5, outRect.left+5, outRect.bottom); pDC->FillRect(smallRect, blackBrush); } } else //未激活 { if ( m_scale_flag ) //如果是在modelview区域 { //画出upRgn, downRgn, 和连线 //pDC->FillRgn(&upRgn, normalBrush); CRect upRect; upRgn.GetRgnBox(upRect); pDC->Rectangle(upRect); pDC->MoveTo(upPoints[2]); pDC->LineTo(upPoints[5]); pDC->MoveTo(topPoint); pDC->LineTo(bottomPoint); pDC->MoveTo(leftPoint); pDC->LineTo(rightPoint); pDC->FillRgn(&downRgn, normalBrush); inRect.SetRect(upPoints[0].x, upPoints[0].y, upPoints[2].x, upPoints[2].y); pDC->SetTextColor(pGraphInfo->textcolor); pDC->DrawText(m_name, inRect, TEXTOUTFOMAT); //|DT_END_ELLIPSIS); } else //如果是在comview区域 { //画出downRgn pDC->FillRgn(&downRgn, normalBrush); } } //释放 pDC->SelectObject(sysFont); pDC->SelectObject(sysPen); delete(pen); delete(normalBrush); delete(activeBrush); delete(blackBrush); return S_OK; }
void CGameView::OnTimer(UINT_PTR nIDEvent) { // 심장소리 음악 if (!gv_min && gv_sec < 10 && !gv_timeDV){ // 분이 0이고 초가 10초 미만일 때 시간제한 음악 켬 StopSounds (gv_bgDV) ; PlaySounds (gv_timeDV) ; } CClientDC dc (this) ; CRect rect ; GetClientRect (&rect) ; CFont myFont, *pOldFont ; CString str; // Text 설정 Part myFont.CreateFont (25, 0, 0, 0, FW_BOLD, true, false, false, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH, gv_font) ; pOldFont =dc.SelectObject (&myFont) ; dc.SetBkColor (gv_bgColor) ; // 글자의 배경은 바탕과 같이 dc.SetTextColor (0x00FFFFFF & ~gv_bgColor) ; // 글자 색을 바탕화면의 반대 색으로 // 시간에 따른 출력부 if (!gv_scoreTF) { if (gv_min < 10 && gv_min) gv_minStr.Format (_T(" 0%d"), gv_min) ; else if (!gv_min) gv_minStr.Format (_T (" 00")) ; else gv_minStr.Format (_T (" %d"), gv_min) ; if (gv_sec < 10 && gv_sec) gv_secStr.Format (_T("0%d"), gv_sec) ; else if (!gv_sec) gv_secStr.Format (_T ("00")) ; else gv_secStr.Format (_T ("%d"), gv_sec) ; if (gv_csec < 10 && gv_csec) gv_csecStr.Format (_T("0%d"), gv_csec) ; else if (!gv_csec) gv_csecStr.Format (_T ("00")) ; else gv_csecStr.Format (_T ("%d"), gv_csec) ; str.Format (_T (" %s : %s : %s "), gv_minStr, gv_secStr, gv_csecStr) ; dc.SetTextAlign (TA_RIGHT) ; dc.TextOutW (rect.Width () -20, rect.top +45, str) ; // 초계산 if (--gv_csec < 0) { if (!gv_min && !gv_sec) OnSuccess () ; gv_csec =99 ; gv_sec-- ; pTimeDlg ->timeCtrl.StepIt () ; // 초가 줄때마다 실행 } if (gv_sec < 0 && gv_min) { gv_sec =59 ; gv_min-- ; } // 카운트 출력 str.Format (_T (" CLICK COUNT : %u "), gv_cnt) ; dc.TextOutW (rect.Width () -20, rect.top +20, str) ; // 점수 출력 dc.SetTextAlign (TA_CENTER) ; str.Format (_T (" Score : %u "), gv_point) ; dc.TextOutW (rect.Width () /2, rect.top +25, str) ; } else { while (gv_tempMin-- > 0) gv_tempSec +=60 ; // 분이 남아 있다면 초로 옮김 // 시간 감소 및 포인트 증가 if (gv_tempSec > 0) { // 초가 0보다 클때까지 gv_point+=3 ; gv_tempSec-- ; // 점수는 3증가 초는 1증감 pTimeDlg ->timeCtrl.StepIt () ; dc.SetTextAlign (TA_CENTER) ; str.Format (_T (" Score :%u "), gv_point) ; dc.TextOutW (rect.Width () /2 , rect.top +25, str) ; } } dc.SelectObject (myFont) ; myFont.DeleteObject () ; CView::OnTimer(nIDEvent); }