VC菜鸟之路03_利用MFC绘制动态矩阵图——02

 火大!!这破服务器,老子连续几次提交都失败了!!垃圾!!垃圾!!!

  接上回。。

  接下来在蓝色矩形框内动态写入输入输出标识。代码如下:

  pDC->SetBkMode(TRANSPARENT);//设置背景色为透明
  pDC->DrawText(Str_In[j-1],rc,DT_CENTER|DT_SINGLELINE|DT_VCENTER);//Str_In[]为预先定义的字符串数组
  brush.DeleteObject();//注销画刷

  做完上面这部基本上整个图形背景就算完成了,界限来就是对鼠标的响应了。首先根据鼠标的位置对鼠标对应的输入输出信号标识做出改变。流程大概就是先获取鼠标在客户区的位置,然后判断与之对应的矩形框,确定后再变所对应矩形框中的背景色。代码如下:

  void CMy123View::OnMouseMove(UINT nFlags, CPoint point)
{
 CBrush brush1(RGB(0,51,205));
 CBrush brush(RGB(143,188,223));           
 CDC* pDC = GetDC();

 for( i=1;i<=N_OutPut;i++){
  /**********************定义横向区域*********************/
  CRect rect(XLeft,
       YTop+((YBotton-YTop)/N_Max)*(i+1)-(YBotton-YTop)/(2*N_Max),
       XRight,
       YTop+((YBotton-YTop)/N_Max)*(i+1)+(YBotton-YTop)/(2*N_Max)
   );
  /**********************鼠标矩形区域*********************/
  CRect rc(XRight-(XRight-XLeft)/N_Max,
   YTop+((YBotton-YTop)/N_Max)*(i+1)-(YBotton-YTop)/(2*N_Max)+1,
   XRight,
   YTop+((YBotton-YTop)/N_Max)*(i+1)+(YBotton-YTop)/(2*N_Max)-1);
  /**********************鼠标上下相邻矩形区域*************/
  CRect rc1(XRight-(XRight-XLeft)/N_Max,
   YTop+((YBotton-YTop)/N_Max)*(i)-(YBotton-YTop)/(2*N_Max)+1,
   XRight,
   YTop+((YBotton-YTop)/N_Max)*(i)+(YBotton-YTop)/(2*N_Max)-1);
  CRect rc2(XRight-(XRight-XLeft)/N_Max,
   YTop+((YBotton-YTop)/N_Max)*(i+2)-(YBotton-YTop)/(2*N_Max)+1,
   XRight,
   YTop+((YBotton-YTop)/N_Max)*(i+2)+(YBotton-YTop)/(2*N_Max)-1);
  /*******************判断鼠标所处区域*****************/
  if ( rect.PtInRect( point ) ) {  
   pDC->FillRect(rc,&brush1);
   pDC->SetBkMode(TRANSPARENT);//设置背景色为透明
   pDC->DrawText(Str_Out[i-1],rc,DT_CENTER|DT_SINGLELINE|DT_VCENTER);
   /*****************重绘鼠标相邻区域********************/
   if(2<=i&&i<=N_OutPut-1){
   
   pDC->FillRect(rc1,&brush);
   pDC->SetBkMode(TRANSPARENT);//设置背景色为透明
   pDC->DrawText(Str_Out[i-2],rc1,DT_CENTER|DT_SINGLELINE|DT_VCENTER);

  
   pDC->FillRect(rc2,&brush);
   pDC->SetBkMode(TRANSPARENT);//设置背景色为透明
   pDC->DrawText(Str_Out[i],rc2,DT_CENTER|DT_SINGLELINE|DT_VCENTER);
   }
   else if(i==1){
    pDC->FillRect(rc2,&brush);
    pDC->SetBkMode(TRANSPARENT);//设置背景色为透明
    pDC->DrawText(Str_Out[i],rc2,DT_CENTER|DT_SINGLELINE|DT_VCENTER);
   }
   else{
    pDC->FillRect(rc1,&brush);
    pDC->SetBkMode(TRANSPARENT);//设置背景色为透明
    pDC->DrawText(Str_Out[i-2],rc1,DT_CENTER|DT_SINGLELINE|DT_VCENTER);
   }
  
   }

  }
 for( j=1;j<=N_InPut;j++){
  /**********************定义横向区域*********************/
  CRect rect(XLeft+((XRight-XLeft)/N_Max*j)-(XRight-XLeft)/(2*(N_Max))+1,
     YTop,
     XLeft+((XRight-XLeft)/N_Max*j)+(XRight-XLeft)/(2*(N_Max))-1,
     YBotton);
  /**********************鼠标矩形区域*********************/
  CRect rc(XLeft+((XRight-XLeft)/N_Max*j)-(XRight-XLeft)/(2*(N_Max))+1,
     YTop,
     XLeft+((XRight-XLeft)/N_Max*j)+(XRight-XLeft)/(2*(N_Max))-1,
     YTop+(YBotton-YTop)/N_Max);
  /**********************鼠标上下相邻矩形区域*************/
  CRect rc1(XLeft+((XRight-XLeft)/N_Max*(j-1))-(XRight-XLeft)/(2*(N_Max))+1,
     YTop,
     XLeft+((XRight-XLeft)/N_Max*(j-1))+(XRight-XLeft)/(2*(N_Max))-1,
     YTop+(YBotton-YTop)/N_Max);
  CRect rc2(XLeft+((XRight-XLeft)/N_Max*(j+1))-(XRight-XLeft)/(2*(N_Max))+1,
     YTop,
     XLeft+((XRight-XLeft)/N_Max*(j+1))+(XRight-XLeft)/(2*(N_Max))-1,
     YTop+(YBotton-YTop)/N_Max);
  /*******************判断鼠标所处区域*****************/
  if ( rect.PtInRect( point ) ) {  
   pDC->FillRect(rc,&brush1);
   pDC->SetBkMode(TRANSPARENT);//设置背景色为透明
   pDC->DrawText(Str_In[j-1],rc,DT_CENTER|DT_SINGLELINE|DT_VCENTER);
   /*****************重绘鼠标相邻区域********************/
   if(2<=j&&j<=N_OutPut-1){
   
   pDC->FillRect(rc1,&brush);
   pDC->SetBkMode(TRANSPARENT);//设置背景色为透明
   pDC->DrawText(Str_In[j-2],rc1,DT_CENTER|DT_SINGLELINE|DT_VCENTER);

  
   pDC->FillRect(rc2,&brush);
   pDC->SetBkMode(TRANSPARENT);//设置背景色为透明
   pDC->DrawText(Str_In[j],rc2,DT_CENTER|DT_SINGLELINE|DT_VCENTER);
   }
   else if(j==1){
    pDC->FillRect(rc2,&brush);
    pDC->SetBkMode(TRANSPARENT);//设置背景色为透明
    pDC->DrawText(Str_In[j],rc2,DT_CENTER|DT_SINGLELINE|DT_VCENTER);
   }
   else{
    pDC->FillRect(rc1,&brush);
    pDC->SetBkMode(TRANSPARENT);//设置背景色为透明
    pDC->DrawText(Str_In[j-2],rc1,DT_CENTER|DT_SINGLELINE|DT_VCENTER);
   }
  
   }

  }
  ReleaseDC(pDC);
  brush1.DeleteObject();
  brush.DeleteObject();
 }

你可能感兴趣的:(VC菜鸟之路03_利用MFC绘制动态矩阵图——02)