VC橡皮筋绘图技术的实现
来源:互联网 发布:c语言手册 编辑:程序博客网 时间:2024/04/30 07:54
在我们在使用微软的绘图程序时。当要画一条直线,先用鼠标确定起始位置,然后鼠标在屏幕上来回移动时,我们会发现,这条直线就像橡皮筋一样,随着鼠标在屏幕中的位置,长短和终点都随之变化。我们在编制自己的程序时,有时也需实现类似的功能,本文将通过简单的编程实例,并说明实现原理。
一。实现原理:
利用了WINDOWS绘图模式中的“异或”的绘图特性。即在屏幕上用异或的模式画图形,然后再用异或的模式,在相同的位置重新画一次此图形,则就会在屏幕上擦出掉上一次所绘制的内容。
具体在程序中,
1。当按下鼠标左键时,用异或的绘图模式在屏幕上画图形。
2。当鼠标移动后,先用异或的绘图模式擦掉上次绘制的图形。然后在新的位置绘制图形。
3。当鼠标左键被抬起时。在最终的位置用正常的颜色重新绘制图形。结束。
二。编程举例:本文举一个画直线的例子,其他画矩形和圆弧的实现方法完全相同,读者可自行编制。
1。用VC6.0生成一个基于单文档的程序。
2。在view类中添加如下变量:
CPoint OriginPos; // 绘图的起始点
CPoint TargetPos; // 绘图的目标点
bool m_bDrawing; // 是否在绘图状态
3。用ClassWizard在view类中添加
WM_LBUTTONDOWN
WM_LBUTTONUP
WM_MOUSEMOVE
消息响应函数。具体程序如下:
void CXv003View::OnLButtonDown(UINT nFlags, CPoint point)
{
m_bDrawing = true;
OriginPos = point; T
argetPos = point;
CView::OnLButtonDown(nFlags, point);
}
void CXv003View::OnLButtonUp(UINT nFlags, CPoint point)
{
if (!m_bDrawing )
return;
m_bDrawing = false;
CClientDC ClientDC(this);
ClientDC.DPtoLP(&point);
ClientDC.SelectStockObject(NULL_BRUSH);
CPen pen, *oldPen;
pen.CreatePen(PS_SOLID,1,RGB(255,0,0));
oldPen = ClientDC.SelectObject(&pen);
ClientDC.SetROP2( R2_COPYPEN );
ClientDC.MoveTo(OriginPos.x,OriginPos.y);
ClientDC.LineTo(TargetPos.x,TargetPos.y);
ClientDC.SelectObject(oldPen);
CView::OnLButtonUp(nFlags, point);
}
void CXv003View::OnMouseMove(UINT nFlags, CPoint point)
{
if ( !m_bDrawing )
return;
CClientDC ClientDC(this);
ClientDC.DPtoLP(&point);
ClientDC.SelectStockObject(NULL_BRUSH);
CPen pen, *oldPen;
pen.CreatePen(PS_SOLID,1,RGB(255,0,0));
oldPen = ClientDC.SelectObject(&pen);
ClientDC.SetROP2(R2_NOT);
ClientDC.MoveTo(OriginPos.x,OriginPos.y);
ClientDC.LineTo(TargetPos.x,TargetPos.y);
TargetPos = point;
ClientDC.MoveTo(OriginPos.x,OriginPos.y);
ClientDC.LineTo(TargetPos.x,TargetPos.y);
ClientDC.SelectObject(oldPen);
CView::OnMouseMove(nFlags, point);
}
编译执行。此程序在VC6.0上,和winxp下调试通过。
- VC橡皮筋绘图技术的实现
- VC橡皮筋绘图技术的实现
- VC橡皮筋绘制技术的实现
- 橡皮筋技术的实现
- VC++的GDI绘图函数:SetROP2 橡皮筋绘图技术中的应用
- VC++的GDI绘图函数:SetROP2 橡皮筋绘图技术中的应用
- 【VC6.0】直线的橡皮筋绘图技术
- VC++ MFC橡皮筋技术
- 利用橡皮筋技术实现的画图
- OpenGL橡皮筋技术与拾取技术的实现
- VC的内存绘图防止屏幕闪烁技术的实现
- VC的内存绘图防止屏幕闪烁技术的实现
- VC的内存绘图防止屏幕闪烁技术的实现
- 双缓冲技术绘图原理及简单的VC实现
- 双缓冲技术绘图原理及简单的VC实现
- VC 绘图,使用双缓冲技术实现
- VC 绘图,使用双缓冲技术实现
- VC 绘图,使用双缓冲技术实现
- 如何使程序只运行一个实例
- Customer Exit 和 User Exit 的不同之处
- VC的内存绘图防止屏幕闪烁技术的实现
- 在opencms中加入struts
- 如何让自定义的基于CStatic的控件响应鼠标移动的消息
- VC橡皮筋绘图技术的实现
- 在jboss中运行opencms
- DELPHI超级Internet控件集--INDY_DELPHI - STUDIO
- VC提示框编程
- Myeclipse使用中问题解决和使用技巧
- 一些个有趣的网站
- 8*8矩阵的z扫描
- c++指针和引用的使用浅谈
- 一些个有趣的网站