VC菜鸟之路03_利用MFC绘制动态矩阵图——03
来源:互联网 发布:安全员模拟考试软件 编辑:程序博客网 时间:2024/05/21 01:52
继续,接下来需要做的是对鼠标点击的响应。我需要当鼠标点击客户区时,判断出鼠标的位置然后找到鼠标对应的输入输出,并且对鼠标锁对应的输入输出线的交点上做标记(画圆)。
流程很简单,首先还是遍历找到鼠标锁对应的输入输出,然后找到其交点,以交点为圆心,画一个圆。需要注意的是,因为输出只能对应一个输入,因此在同一输出线上,只能同时有一个圆。因此找到交点后首先需要判断这条输出线上是否有其他圆,有话就对此进行擦除。我采用的方法是定义一维动态数组,数组中存放输出线上的交点坐标,每次画圆之后保存输出线上的坐标点,下次画圆之前首先擦除这次保存的坐标点。另外,因为窗口的切换或者最小化都会导致客户区的重绘,因此每次绘图后需要将数据保存,在下次显示时重绘。代码如下:
void CMy123View::OnLButtonDown(UINT nFlags, CPoint point)
{
CFormView::OnLButtonDown(nFlags, point);
CRect rect(XLeft,YTop,XRight,YBotton);//定义画布大小
CDC* pDC=GetDC();
pDC->SetROP2(R2_NOTXORPEN);//设置二次绘图消除效果
CPen pen(PS_SOLID,2,RGB(255,0,0));//定义一个画笔
CPen* pOldPen=pDC->SelectObject(&pen);//选中画笔
CBrush* pOldBrush = (CBrush*)pDC-> SelectStockObject(NULL_BRUSH);//设置画刷背景为空
if ( rect.PtInRect( point ) )//判断鼠标是否在画布范围内
{
for( j=1;j<=N_InPut;j++)//遍历
{
CRect rc_x(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);
if(rc_x.PtInRect(point))
{
for( i=1;i<=N_OutPut;i++ )
{
CRect rc_y(XLeft,
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);
if(rc_y.PtInRect(point))
{
//pDC->SelectObject(&open);
pDC->Ellipse(m1[i],n1[i],m2[i],n2[i]);
int X0=XLeft+((XRight-XLeft)/N_Max*j);
int Y0=YTop+((YBotton-YTop)/N_Max)*(i+1);
int X1=X0-((XRight-XLeft)/(N_Max*3));
int Y1=Y0-((XRight-XLeft)/(N_Max*3));
int X2=X0+((XRight-XLeft)/(N_Max*3));
int Y2=Y0+((XRight-XLeft)/(N_Max*3));
m1[i]=X1;
n1[i]=Y1;
m2[i]=X2;
n2[i]=Y2;//保留此次绘图坐标
pDC->Ellipse(X1,Y1,X2,Y2);//画圆
}
}
}
}
}
ReleaseDC(pDC);注销pDC
}
上面是鼠标点击相应函数。重绘时需要在OnDraw()中加入以下代码:
for(i=1;i<N_Max;i++)
{
pDC->SetROP2(R2_NOTXORPEN);//定义二次绘图消除效果
CPen open(PS_SOLID,2,RGB(255,0,0));
CBrush* pOldBrush = (CBrush*)pDC-> SelectStockObject(NULL_BRUSH);
pDC->SelectObject(&open);
pDC->Ellipse(m1[i],n1[i],m2[i],n2[i]);//恢复
}
做到这一步,绘图方面基本上就完成了,剩下的就是功能函数了,效果图如下:
- VC菜鸟之路03_利用MFC绘制动态矩阵图——03
- VC菜鸟之路03_利用MFC绘制动态矩阵图——02
- VC菜鸟之路03_利用MFC绘制动态矩阵图
- 利用MFC绘制动态矩阵图
- MFC/VC++ 绘制正弦曲线
- VC++动态链接库(DLL)编程深入浅出之二(1)——非MFC dll
- 菜鸟之路-03
- 利用MATLAB 绘制矩阵色块图
- 菜鸟之路_触摸常量池
- 利用VC绘制对数坐标系
- 利用VC绘制对数坐标系
- MFC中绘制动态曲线
- MFC中绘制动态曲线
- MFC中绘制动态曲线
- vc游戏--03--绘制位图
- MFC之绘制线条
- 菜鸟Android学习之路03——线性布局
- vc动态曲线绘制方法
- wince EVC 博客
- fedora 12 root账号登陆
- linux bash中快速移动光标
- 4.5 小 结
- 学习C#类和接口、虚方法和抽象方法及值类型和引用类型的区别?
- VC菜鸟之路03_利用MFC绘制动态矩阵图——03
- 《T-SQL编程入门经典》读书笔记
- Oracle数据库中利用ASSM改善分段存储
- Oracle EBS 如何月结之应付(AP)对账详解
- 第9章 Linux防火墙配置
- 一天进步一点点
- Oracle 10g的自动段空间管理(ASSM)
- pb 制作登陆界面连接数据库
- 何时我们需要智能指针