MFC绘制函数

/////////////////////////////////////////////////////////////////////////////
// CX_SelfView construction/destruction
//void DrawHMI(CDC *pDC, int NodeNum, CRect rect, int type, BOOL MasterNet, BOOL SlaveNet,int nParent = View)
void DrawHMI(CDC *pDC, int NodeNum, CRect rect, int type, WORD MasterNet, WORD SlaveNet,int nParent = View)
{
 bool bTwinkleA= false;
 bool bTwinkleB= false;
 int left,right,top,bottom;
 char text[10];
 left = rect.left;
 right = rect.right;
 top = rect.top;
 bottom = rect.bottom;
 HGDIOBJ hPen1,hPen2,hOldPen;
 HGDIOBJ hBrush,hBrushnet,hOldBrush;
 HGDIOBJ hFont,hOldFont;
 COLORREF OldColor,OldBkColor;
 hBrush = CreateSolidBrush(RGB(0,0,255));
 hBrushnet = CreateSolidBrush(RGB(128,128,128));
 int wide = right-left;
 int cross = bottom-top;
 OldBkColor = pDC->SetBkColor(RGB(0,0,255));
 OldColor = pDC->SetTextColor(RGB(0,0,0)); 
 pDC->Rectangle(left+wide/8,top,right-wide/8,bottom-cross*2/5);
 int top1 = bottom-cross*2/5;
 pDC->Rectangle(left+wide/3,top1,right-wide/3,top1+cross/16);
 top1+=cross/16;
 pDC->Rectangle(left+wide/5,top1,right-wide/5,top1+cross/10);
 top1+=cross/10; 
 hOldBrush = pDC->SelectObject(hBrush);
 pDC->Rectangle(left+wide/8+wide/10,top+cross/10,right-wide/8-wide/10,bottom-cross/2);
 pDC->Rectangle(left,top1,right,bottom); 
 hFont= (HGDIOBJ)CreateFont(15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "TRUE TYPE FONTS");
 hOldFont=pDC->SelectObject(hFont);
 sprintf(text,"%d",NodeNum);
 rect.left = rect.left;
 rect.top = rect.top+cross/8;
 rect.right = rect.right;
 rect.bottom = rect.bottom;
 pDC->SetBkColor(RGB(255,255,255));
 pDC->SetTextColor(RGB(255,0,0));
 pDC->DrawText(text,strlen(text),&rect,DT_CENTER);
 /*
 if (MasterNet) hPen1=(HGDIOBJ)CreatePen(PS_DOT,0,RGB(255,0,0));
 else hPen1 = (HGDIOBJ)CreatePen(PS_SOLID,2,RGB(255,0,0));
 if (SlaveNet) hPen2 = (HGDIOBJ)CreatePen(PS_DOT,0,RGB(255,0,0));
 else hPen2 = (HGDIOBJ)CreatePen(PS_SOLID,2,RGB(255,255,13));
 */
 if (MasterNet == 0xff) hPen1=(HGDIOBJ)CreatePen(PS_DOT,0,RGB(255,0,0));
 else hPen1 = (HGDIOBJ)CreatePen(PS_SOLID,2,RGB(255,0,0));

/* else if((MasterNet==0) && (g_incount%2==0)) 
 {
  hPen1=NULL;
 }
 else 
 {
  hPen1 = (HGDIOBJ)CreatePen(PS_SOLID,2,RGB(255,0,0));
 }
*/
 if (SlaveNet == 0xff) hPen2 = (HGDIOBJ)CreatePen(PS_DOT,0,RGB(255,0,0));
 else hPen2 = (HGDIOBJ)CreatePen(PS_SOLID,2,RGB(255,255,13));
 
 if(MasterNet==1)
 {
  bTwinkleA = true;
 }
 else
 {
  bTwinkleA = false;
 }
 if(SlaveNet==1)
 {
  bTwinkleB = true;
 }
 else
 {
  bTwinkleB = false;
 }
 
 /*
 bTwinkleA = true;
 bTwinkleB = true;
 */
 hOldPen = pDC->SelectObject(hPen1);
 if(type==0)
 {
  CRect rect1;
  pDC->SelectObject(hOldBrush);
  hOldBrush = pDC->SelectObject(hBrushnet);
  pDC->MoveTo((left+right)/2-3,top);
  if(bMultLev)  //5行
  {
   
   if(bTwinkleA && (g_incount%2==0))
   {
//    pDC->LineTo((left+right)/2-3,top-47+2);
    pDC->LineTo((left+right)/2-3,top-47+2+8); 
   }
   else if(!bTwinkleA)
   {
//    pDC->LineTo((left+right)/2-3,top-47+2);
    pDC->LineTo((left+right)/2-3,top-47+2+8); 
   }
   
//   pDC->LineTo((left+right)/2-3,top-47+2); 
   /*
   rect1.top    =top-47+2-3 ;
   rect1.bottom =top-47+2+3 ;
   */
   rect1.top    =top-47+2-3+8 ;
   rect1.bottom =top-47+2+3+8 ;
  }
  else
  {
   
   if(bTwinkleA && (g_incount%2==0))
   {
//    pDC->LineTo((left+right)/2-3,top-60+2);
    pDC->LineTo((left+right)/2-3,top-47+2); 
   }
   else if(!bTwinkleA)
   {
//    pDC->LineTo((left+right)/2-3,top-60+2);
    pDC->LineTo((left+right)/2-3,top-47+2); 
   }
  
//   pDC->LineTo((left+right)/2-3,top-60+2);
//   rect1.top    =top-60+2-3 ;
//   rect1.bottom =top-60+2+3 ;
   
   rect1.top    =top-47+2-3 ;
   rect1.bottom =top-47+2+3 ;
  }
  rect1.left   =(left+right)/2-3-3;
  rect1.right  =(left+right)/2-3+3 ;
        pDC->Rectangle(&rect1);
  
  pDC->SelectObject(hOldPen);
     hOldPen = pDC->SelectObject(hPen2); 
  pDC->MoveTo((left+right)/2+3,top);
  if(bMultLev)
  {
   if(bTwinkleB && (g_incount%2==0))
   {
//    pDC->LineTo((left+right)/2+3,top-32+2);
    pDC->LineTo((left+right)/2+3,top-32+2+3);
   }
   else if(!bTwinkleB)
   {
//    pDC->LineTo((left+right)/2+3,top-32+2);
    pDC->LineTo((left+right)/2+3,top-32+2+3);
   }
   /*
   rect1.top    =top-32+2-3 ;
   rect1.bottom =top-32+2+3 ;
   */
   rect1.top    =top-32+2-3+3 ;
   rect1.bottom =top-32+2+3+3 ;
  }
  else
  {
   if(bTwinkleB && (g_incount%2==0))
   {
    pDC->LineTo((left+right)/2+3,top-35+2);
   }
   else if(!bTwinkleB)
   {
    pDC->LineTo((left+right)/2+3,top-35+2);
   }
   rect1.top    =top-35+2-3 ;
   rect1.bottom =top-35+2+3 ;
  }
  rect1.left   =(left+right)/2+3-3;
  rect1.right  =(left+right)/2+3+3 ;
   
        pDC->Rectangle(&rect1);
 }
 pDC->SelectObject(hOldPen);
 DeleteObject(hPen1);
 DeleteObject(hPen2);
 pDC->SetBkColor(OldBkColor); 
 pDC->SetTextColor(OldColor);
 pDC->SelectObject(hOldBrush);
 DeleteObject(hBrush);
 DeleteObject(hBrushnet);
 
 pDC->SelectObject(hOldFont);
 DeleteObject(hFont);
// DeleteObject(hOldPen);
// DeleteObject(hOldBrush);
// DeleteObject(hOldFont);
}
//void DrawXCU(CDC* pDC,int NodeNum,CRect rect,int texttype,int linetype,int xcutype,BOOL MasterNet,BOOL SlaveNet,int nParent = View)
void DrawXCU(CDC* pDC,int NodeNum,CRect rect,int texttype,int linetype,int xcutype,WORD MasterNet,WORD SlaveNet,int nParent = View)
{
 bool bTwinkleA= false;
 bool bTwinkleB= false;
 HGDIOBJ hPen1,hPen2,hOldPen;
 HGDIOBJ hBrushtop,hBrushleft,hBrushforce,hBrushclient,hBrushnet,hOldBrush;
 COLORREF OldBkColor;
 int left,right,top,bottom;
 char text[10];
 left = rect.left;
 right = rect.right;
 top = rect.top;
 bottom = rect.bottom;
 int wide = right-left;
 int cross = bottom-top;
 COLORREF old_tClr = pDC->SetTextColor(RGB(0,0,0));
 hBrushtop    = CreateSolidBrush(RGB(0,0,128));
 hBrushleft   = CreateSolidBrush(RGB(0,128,128));
 switch(xcutype)
 {
 case XCU_MAIN:
  hBrushforce  = CreateSolidBrush(RGB(0,255,0));
  hBrushclient = CreateSolidBrush(RGB(0,255,0));
  break;
 case XCU_TRACE:
  hBrushforce  = CreateSolidBrush(RGB(0,0,255));
  hBrushclient = CreateSolidBrush(RGB(0,0,255));
  break;
 case XCU_INIT:
  hBrushforce  = CreateSolidBrush(RGB(255,255,0));
  hBrushclient = CreateSolidBrush(RGB(255,255,0));
  break;
 case NODE_OFFLINE:
  hBrushforce  = CreateSolidBrush(RGB(255,0,0));
  hBrushclient = CreateSolidBrush(RGB(255,0,0));
  break;
 default:
  break;
 }
 hBrushnet    = CreateSolidBrush(RGB(128,128,128));
 CPoint pts[4];
 pts[0].x = left+wide/4;
 pts[0].y = top;
 pts[1].x = right;
 pts[1].y = top;
 pts[2].x = right-wide/4;
 pts[2].y = top+cross/4;
 pts[3].x = left;
 pts[3].y = top+cross/4;
 hOldBrush = pDC->SelectObject(hBrushtop);
    pDC->Polygon(pts, 4);//画上面的阴影
 pDC->SelectObject(hOldBrush);
 DeleteObject(hBrushtop);
 pts[0].x = right;
 pts[0].y = bottom-cross/4;
 pts[3].x = right-wide/4;
 pts[3].y = bottom;
 hOldBrush = pDC->SelectObject(hBrushleft);
 pDC->Polygon(pts, 4);//画左边的阴影
 pDC->SelectObject(hOldBrush);
 DeleteObject(hBrushleft);
 
    hOldBrush = pDC->SelectObject(hBrushforce);
 pDC->Rectangle(left,top+cross/4,right-wide/4,bottom);//画正面方块
 pDC->SelectObject(hOldBrush);
 DeleteObject(hBrushforce);
    hOldBrush = pDC->SelectObject(hBrushclient);
 
 RECT r1 = rect;
 sprintf(text,"%d",NodeNum);
 rect.left = rect.left+9;
 rect.top = rect.bottom;
 rect.right = rect.right;
 rect.bottom = rect.bottom + 40;
 OldBkColor = pDC->SetBkColor(RGB(192,192,192));
 if(texttype==XCU_TEXT) pDC->DrawText(text,strlen(text),&rect,DT_CENTER);
 else if(texttype==XCU_TEXTCENTER) {
  r1.top +=15;r1.bottom +=15;
  pDC->DrawText(text,strlen(text),&r1,DT_CENTER);
 }
 pDC->SelectObject(hOldBrush);
 DeleteObject(hBrushclient);
 /*
 if (MasterNet) hPen1 = (HGDIOBJ)CreatePen(PS_DOT,0,RGB(255,0,0));
 else hPen1 = (HGDIOBJ)CreatePen(PS_SOLID,2,RGB(255,0,0));
 if (SlaveNet) hPen2 = (HGDIOBJ)CreatePen(PS_DOT,0,RGB(255,0,0));
 else hPen2=(HGDIOBJ)CreatePen(PS_SOLID,2,RGB(255,255,13));
 */
 if (MasterNet == 0xff) hPen1=(HGDIOBJ)CreatePen(PS_DOT,0,RGB(255,0,0));
 else hPen1 = (HGDIOBJ)CreatePen(PS_SOLID,2,RGB(255,0,0));
 if (SlaveNet == 0xff) hPen2 = (HGDIOBJ)CreatePen(PS_DOT,0,RGB(255,0,0));
 else hPen2 = (HGDIOBJ)CreatePen(PS_SOLID,2,RGB(255,255,13));
 
 if(MasterNet==1)
 {
  bTwinkleA = true;
 }
 else
 {
  bTwinkleA = false;
 }
 if(SlaveNet==1)
 {
  bTwinkleB = true;
 }
 else
 {
  bTwinkleB = false;
 }
    OldBkColor = pDC->SetBkColor(RGB(255,255,255));
 if(linetype==XCU_LINE)
 {
  hOldPen=pDC->SelectObject(hPen1);
  hOldBrush = pDC->SelectObject(hBrushnet);
  pDC->MoveTo((left+right)/2-4,top);
  CRect rect1;
  
  if( nParent == View )
  {
   if( bMultLev )
   {
    if(bTwinkleA && (g_incount%2==0))
    {
//     pDC->LineTo((left+right)/2-4,rect.top-87+2);
     pDC->LineTo((left+right)/2-4,rect.top-87+2+10+10); //change by hhs at 20130716
    }
    else if(!bTwinkleA)
    {
//     pDC->LineTo((left+right)/2-4,rect.top-87+2);
     pDC->LineTo((left+right)/2-4,rect.top-87+2+10+10); //change by hhs at 20130716
    }
    /*
    rect1.top    =rect.top-87+2-3 ;
    rect1.bottom =rect.top-87+2+3 ; 
    */
    rect1.top    =rect.top-87+2-3 +10+10;
    rect1.bottom =rect.top-87+2+3 +10+10;
   }
   else
   {
    if(bTwinkleA && (g_incount%2==0))
    {
//     pDC->LineTo((left+right)/2-4,rect.top-101+2);
     pDC->LineTo((left+right)/2-4,rect.top-87+2);
    }
    else if(!bTwinkleA)
    {
//     pDC->LineTo((left+right)/2-4,rect.top-101+2);
     pDC->LineTo((left+right)/2-4,rect.top-87+2);
    }
//    rect1.top    =rect.top-101+2-3 ;
//    rect1.bottom =rect.top-101+2+3 ;
    
    rect1.top    =rect.top-87+2-3 ;
    rect1.bottom =rect.top-87+2+3 ;
   }
  }
  else 
  {
   /*
   pDC->LineTo((left+right)/2-4,rect.top-101+2);
   rect1.top    =rect.top-101+2-3 ;
   rect1.bottom =rect.top-101+2+3 ;
   */
   pDC->LineTo((left+right)/2-4,rect.top-101+2+10+10-20);  //单xcu画面中画网络连接线A网
   rect1.top    =rect.top-101+2-3+10+10-20 ;
   rect1.bottom =rect.top-101+2+3+10+10-20 ;
  }
  
  rect1.left   =(left+right)/2-4-3;
  rect1.right  =(left+right)/2-4+3 ;
        pDC->Rectangle(&rect1);
  pDC->SelectObject(hOldPen);
  hOldPen = pDC->SelectObject(hPen2);
  pDC->MoveTo((left+right)/2+4,top);
  if(nParent == View)
  {
   if(bMultLev)
   {
    if(bTwinkleB && (g_incount%2==0))
    {
//     pDC->LineTo((left+right)/2+4,rect.top-72+2);
     pDC->LineTo((left+right)/2+4,rect.top-72+2+10+10-5); //hhs
    }
    else if(!bTwinkleB)
    {
//     pDC->LineTo((left+right)/2+4,rect.top-72+2);
     pDC->LineTo((left+right)/2+4,rect.top-72+2+10+10-5); //hhs
    }
//    rect1.top    =rect.top-72+2-3 ;
//    rect1.bottom =rect.top-72+2+3 ;
    
    rect1.top    =rect.top-72+2-3+10+10-5;
    rect1.bottom =rect.top-72+2+3+10+10-5;
   }
   else
   {
    if(bTwinkleB && (g_incount%2==0))
    {
//     pDC->LineTo((left+right)/2+4,rect.top-75+2);
     pDC->LineTo((left+right)/2+4,rect.top-72+2);
    }
    else if(!bTwinkleB)
    {
//     pDC->LineTo((left+right)/2+4,rect.top-75+2);
     pDC->LineTo((left+right)/2+4,rect.top-72+2);
    }
//    rect1.top    =rect.top-75+2-3 ;
//    rect1.bottom =rect.top-75+2+3 ;
    
    
    rect1.top    =rect.top-72+2-3 ;
    rect1.bottom =rect.top-72+2+3 ;
   }
  }
  else if(nParent == Station)
  {
//   pDC->LineTo((left+right)/2+4,rect.top-75+2);
//   rect1.top    =rect.top-75+2-3 ;
//   rect1.bottom =rect.top-75+2+3 ;
   pDC->LineTo((left+right)/2+4,rect.top-75+2+10+10-15);  //hhs
   rect1.top    =rect.top-75+2-3+10+10-5-15 ;
   rect1.bottom =rect.top-75+2+3+10+10-5-15 ;
  }
  
  rect1.left   =(left+right)/2+4-3;
  rect1.right  =(left+right)/2+4+3;
        pDC->Rectangle(&rect1);
 }  
 pDC->SelectObject(hOldPen);
 DeleteObject(hPen1);
 DeleteObject(hPen2);
// DeleteObject(hOldPen);
 pDC->SelectObject(hOldBrush);
 DeleteObject(hBrushnet);
// DeleteObject(hOldBrush);
 pDC->SetBkColor(OldBkColor);
 pDC->SetTextColor(old_tClr);
}
void DrawXCUHMI(CDC* pDC,int NodeNum,BYTE Type,RECT Rect,int nParent = View)
{
 switch(Type)
 {
 case 0: DrawXCU(pDC,NodeNum,Rect,XCU_TEXTCENTER,XCU_NOLINE,XCU_MAIN,0,0,nParent);break;
 case 1: DrawXCU(pDC,NodeNum,Rect,XCU_TEXTCENTER,XCU_NOLINE,XCU_TRACE,0,0,nParent);break;
 case 2: DrawXCU(pDC,NodeNum,Rect,XCU_TEXTCENTER,XCU_NOLINE,XCU_INIT,0,0,nParent);break;
 default:DrawHMI(pDC,NodeNum,Rect,1,0,0);break;
 }
}
时间: 2024-10-27 06:16:35

MFC绘制函数的相关文章

[游戏学习26] MFC 时间函数 画图形

>_<:这里第一次介绍MFC的时间函数,功能和Win32里的计时器类似. >_<:这里还介绍了MFC的图形绘制函数,和Win32有一点区别 >_<:ABC.h 1 #define EX 1 //该点左鼠标 2 #define OH 2 //该点右鼠标 3 4 class CMyApp : public CWinApp 5 { 6 public: 7 virtual BOOL InitInstance (); 8 }; 9 10 class CMainWindow : p

【MFC】MFC绘制动态曲线,用双缓冲绘图技术防闪烁

摘自:http://zhy1987819.blog.163.com/blog/static/841427882011614103454335/ MFC绘制动态曲线,用双缓冲绘图技术防闪烁 2011-07-14 10:34:54|  分类: 学习笔记 |  标签:双缓冲绘图技术  mfc  动态曲线   |举报 |字号 订阅 先上效果图 随着时间的推移,曲线向右平移,同时X轴的时间坐标跟着更新.一.如何绘制动态曲线. 所谓动画,都是一帧一帧的图像连续呈现在用户面前形成的.所以如果你掌握了如何绘制静

MFC绘制图片闪烁详解

用MFC如何高效地绘图             显示图形如何避免闪烁,如何提高显示效率是问得比较多的问题.     而且多数人认为MFC的绘图函数效率很低,总是想寻求其它的解决方案.     MFC的绘图效率的确不高但也不差,而且它的绘图函数使用非常简单,     只要使用方法得当,再加上一些技巧,用MFC可以得到效率很高的绘图程序.     我想就我长期(呵呵当然也只有2年多)使用MFC绘图的经验谈谈     我的一些观点.     1.显示的图形为什么会闪烁?             我们的

MFC 绘制坐标系

主要讨论映射模式:MM_ANISOTROPIC,MM_ISOTROPIC.及相关方法的应用. 1,先建立一个MFC单文档,过程不再赘述. 2,在View类中找到CMainFrame::PreCreateWindow函数,在其中设置默认窗口大小为400 pixel*300 pixel: 1 BOOL CTestView::PreCreateWindow(CREATESTRUCT& cs) 2 { 3 // TODO: 在此处通过修改 4 // CREATESTRUCT cs 来修改窗口类或样式 5

MFC 虚函数与消息映射区别

初学MFC添加函数时,总是纠结于是 Add  windows message handler or Add virtual function 说到底不理解MFC中虚函数与消息处理函数的设计区别 本人理解:虚函数是层层继承的,子类Add virtual function只是去改写相应功能.虚函数一般都是程序框架必须调用的,子类没有改写就会默认调用基类的. 而消息映射只在相应类中添加自己感兴趣的处理函数,不存在继承性.所以没必要把windows消息映射函数设计成虚函数.有需要时程序才会执行这些操作.

怎样绘制函数y=x^4的图像

利用描点法绘制函数图像的方法并不局限于某个函数,而是可适用于绘制任何一个函数的图像.下面以函数y=x3为例,详细介绍利用几何画板绘制点的方法绘制函数图像. 具体的操作步骤如下: 1.执行“绘图”—“定义坐标系”命令,新建坐标系,并将原点坐标的标签设为O. 2.选中坐标系的x轴,执行“构造”—“轴上的点”命令,构造点B. 3.选中点B,执行“度量”—“横坐标”命令,度量出点B的横坐标xB. 4.选中点B的横坐标xB,执行“度量”—“计算”命令,在弹出的新建计算对话框中计算出xB3的值. 5.依次选

怎样用几何画板绘制函数y=x^4的图像

利用描点法绘制函数图像的方法并不局限于某个函数,而是可适用于绘制任何一个函数的图像.下面以函数y=x3为例,详细介绍利用几何画板绘制点的方法绘制函数图像. 具体的操作步骤如下: 1.执行"绘图"-"定义坐标系"命令,新建坐标系,并将原点坐标的标签设为O. 2.选中坐标系的x轴,执行"构造"-"轴上的点"命令,构造点B. 3.选中点B,执行"度量"-"横坐标"命令,度量出点B的横坐标xB.

OpenGL 3D图形常用绘制函数

本文整理了一些opengl常用的绘制函数,api等,以作参考. GLUT 工具箱函数     GLUT工具箱提供几种图形3维图形的函数: void glutWireSphere(GLdouble radius,GLint slices, GLint stacks);  丝状球 void glutSolidSphere(GLdouble radius,GLint slices, GLint stacks); 实心球 void glutWireCube(GLdouble size); 丝状立方体 v

Unreal engine 4 C++ 一些调试用的绘制函数

UE4中提供了很多预定义的调试绘制函数,在做调试的时候还是比较方便的.可以在场景里绘制点.线.圆.球.箭头.椎体.胶囊.甚至样条线.字符串.网格等等,基本上该有的都有了.比较赞的是,你能控制线条的厚度,调试的时候就比较直观了. 要使用这些函数,只需要包含DrawDebugHelpers.h 头文件即可.下面介绍几个主要的绘制函数: 1.绘制点 ENGINE_API void DrawDebugPoint(const UWorld* InWorld, FVector const& Position