利用MFC绘制动态矩阵图

接着要做一个动态矩阵图,要求图能检测鼠标的位置做出相应改变,并能相应功能键。具体效果如下:

 

   好吧,我承认这图里的东西不是我做的,我的目标就是仿照这个做个新东西出来。当然也必须具备它的功能。

  下面开始吧,首先创建FormView,接着为view田间OnDraw函数,然后在OnDraw函数中添加初始化程序:

void CMy123View::OnDraw(CDC* pDC) 
{
 CPen pen(PS_SOLID,2,RGB(0,0,0));
  CPen* pOldPen=pDC->SelectObject(&pen);
  pDC->MoveTo(300,20);
  pDC->LineTo(900,20);
  pDC->LineTo(900,620);
  pDC->LineTo(300,620);
  pDC->LineTo(300,20);
 Draw(pDC);

 
}

  上面我初始化了一个矩形边框,并且调用了初始化绘图程序Draw(),当然这个是我单独写的一个,代码如下:

void Draw(CDC* pDC)
{
 Abscissa XLeft,XRight;
 Ordinate YTop,YBotton;
 XLeft=320,XRight=880;
 YTop=40,YBotton=600;
 int N_OutPut=8,N_InPut=8;
 int N_Max=max(N_InPut,N_OutPut)+2;
 
 for(int i=1;i<=N_OutPut;i++)
 {
  int Y_OutPut,X_OutPut;
  
  X_OutPut=XRight-((XRight-XLeft)/N_Max);
  Y_OutPut=YTop+((YBotton-YTop)/N_Max)*(i+1);
  pDC->MoveTo(X_OutPut,Y_OutPut);
  pDC->LineTo(XLeft+((XRight-XLeft)/N_Max),Y_OutPut);
  pDC->MoveTo(X_OutPut,Y_OutPut);
  pDC->LineTo(X_OutPut-(YBotton-YTop)/(N_Max*10),Y_OutPut+(YBotton-YTop)/(N_Max*10));
  pDC->MoveTo(X_OutPut,Y_OutPut);
  pDC->LineTo(X_OutPut-(YBotton-YTop)/(N_Max*10),Y_OutPut-(YBotton-YTop)/(N_Max*10));
  /*********************   创建矩形区域并设置背景色   ***********/
  CRect rc(XRight-(XRight-XLeft)/N_Max,
     Y_OutPut-(YBotton-YTop)/(2*N_Max)+1,
     XRight,
     Y_OutPut+(YBotton-YTop)/(2*N_Max)-1);
  CBrush brush(RGB(143,188,223));
  pDC->FillRect(rc,&brush);
  brush.DeleteObject();
 }
 for(int j=1;j<=N_InPut;j++)
 {
  int X_InPut,Y_InPut;
  X_InPut=XLeft+((XRight-XLeft)/N_Max*j);
  Y_InPut=YTop+(YBotton-YTop)/N_Max;
  pDC->MoveTo(X_InPut,Y_InPut+(YBotton-YTop)/(N_Max*10));
  pDC->LineTo(X_InPut,YBotton-((YBotton-YTop)/N_Max));
  pDC->MoveTo(X_InPut,Y_InPut+(YBotton-YTop)/(N_Max*10));
  pDC->LineTo(X_InPut-(XRight-XLeft)/(N_Max*10),Y_InPut);
  pDC->MoveTo(X_InPut,Y_InPut+(YBotton-YTop)/(N_Max*10));
  pDC->LineTo(X_InPut+(XRight-XLeft)/(N_Max*10),Y_InPut);
  /**************   创建矩形区域并设置背景色   *********/
  CRect rc(X_InPut-(XRight-XLeft)/(2*(N_Max))+1,
     YTop,
     X_InPut+(XRight-XLeft)/(2*(N_Max))-1,
     YTop+(YBotton-YTop)/N_Max);
  CBrush brush(RGB(143,188,223));
  pDC->FillRect(rc,&brush);
  brush.DeleteObject();
 }


}

 

  做到这一步基本上完成了整体布局,效果图如下:

 

  接下来我们继续。。。(未完待续)

原文

猜你喜欢

转载自blog.csdn.net/maigao1/article/details/78789767