GDI编程之七、图形编程实例
来源:互联网 发布:自动加为好友淘宝 编辑:程序博客网 时间:2024/06/07 06:21
七、图形编程实例
l 在Win32程序中画线
1. 定义两个全局变量用于记录鼠标按下的(x,y)坐标。
int nOrginX;
int nOrginY;
2. 响应鼠标按下和鼠标抬起的消息:
在Swich中加入case WM_LBUTTONDOWN:
case WM_LBUTTONUP:
3. 在鼠标按下时记录鼠标按下的(x,y)坐标,查MSDN得知WM_LBUTTONDOWN
lParam的低字存放x坐标,高字存放y坐标,将其取出存入nOrginX,nOrginY。
case WM_LBUTTONDOWN:
nOrginX=lParam & 0x0000ffff;
nOrginY=lParam >> 16 & 0x0000ffff;
break;
4. 在鼠标抬起时画线:
case WM_LBUTTONUP:
HDC hdc;
hdc=GetDC(hwnd);
::MoveToEx(hdc,nOrginX,nOrginY,NULL);
::LineTo(hdc,LOWORD(lParam),HIWORD(lParam) );
::ReleaseDC(hwnd,hdc);
l 在MFC程序中画线:
1. 在CxxxView(其中xxx是你的工程名字)中响应鼠标按下和鼠标抬起的消息(因为只有CxxxView中才能接收到鼠标消息):
使用ClassWizard加入WM_LBUTTONDOWN,WM_LBUTTONUP的消息响应函数OnLButtonDown, OnLButtonUp。
2. 在CxxxView中添加成员变量CPoint m_ptOrigin,用于记录鼠标按下的(x,y)坐标。
CPoint是一个用于描述点的简单的类,它有两个成员变量可以存放点的(x,y)坐标。
3. 在鼠标按下时记录该点的坐标:
m_ptOrigin =point;其中point是调用OnLButtonDown传入的鼠标按下的点的坐标。
4. 在鼠标抬起时画线:
CClientDC dc(this);
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
其中CClientDC 是一个CDC的子类,在它的构造函数中调用了GetDC,析构函数中调用了ReleaseDC,简化了用户的操作。
l 实现橡皮筋功能:
5. 再定义一个成员变量,用于记录鼠标抬起的点,以便擦线。
CPoint m_ptEnd;
6. 在鼠标按下时记录该点的坐标:
m_ptOrigin=m_ptEnd=point;
7.使用ClassWizard加入WM_MOUSEMOVE的消息响应函数OnMouseMove。
在鼠标移动时判断鼠标左鍵是否按下,如果按下,就不断地擦去上一条线,画出鼠标按下点到鼠标移动的当前点之间的线。
if(MK_LBUTTON & nFlags)
{
CClientDC dc(this);
dc.SetROP2(R2_NOT);
dc.MoveTo(m_ptOrigin);
dc.LineTo(m_ptEnd);
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
m_ptEnd=point;
}
其中:
if (MK_LBUTTON & nFlags)
是判断鼠标左鍵是否按下。在调用OnMouseMove时,不仅为用户传来了坐标信息,还把鼠标左鍵是否按下,Shift鍵是否按下(详细信息可查MSDN)等信息放在UINT nFlags中传入OnMouseMove,用户可以检查相应位是否为1来判断相应键是否按下。
dc.SetROP2(R2_NOT);
该句设置逆转当前屏幕颜色的绘图模式。这种模式下,在屏幕上首次画出的线的是可见的,但在同一位置再画一遍时,线就不见了。这样可以方便的实现不断画线、擦线的效果。
- GDI编程之七、图形编程实例
- GDI编程之六、文本编程实例
- 有关c#高级编程之---图形编程GDI+
- GDI(GDI+) - 混合编程【实例】
- 高级GDI图形编程(1)
- 高级GDI图形编程(2)
- 高级GDI图形编程(3)
- GDI+ - 图形编程【初始化工作】
- GDI+ - 图形编程【输出文字】
- GDI+ - 图形编程【输出图片】
- GDI+ - 图形编程【双缓冲】
- VC.NET的GDI+编程入门教程之图形
- VC.NET的GDI+编程入门教程之图形
- C#学习之GDI + 图形编程基础(一)
- C#学习之GDI + 图形编程基础(二)
- Windows GDI和GDI+编程实例剖析
- Windows GDI和GDI+编程实例剖析
- Windows GDI和GDI+编程实例剖析
- rmq算法——ST HDU——1806
- stable_sort()与sort()的用法区别
- ZOJ-2102
- hdu 3657 最小割的活用 / 奇偶方格取数类经典题 /最小割
- MySQL 事务处理的理解
- GDI编程之七、图形编程实例
- 切换Fragment时改变ActionBar
- quarts任务调度快速上手
- 从零开始学android<AutoCompleteTextView随笔提示文本框.十九.>
- Linux Shell脚本编程学习笔记和实战
- 递归监听文件目录
- 数据结构笔记之查找
- Eclipse下单个文件中文乱码问题
- Android Studio设置字体 编码格式