火大!!这破服务器,老子连续几次提交都失败了!!垃圾!!垃圾!!!
接上回。。
接下来在蓝色矩形框内动态写入输入输出标识。代码如下:
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();
}