第四章 简单绘图
07-05-21 manday
一,MFC消息映射机制
1,ClassWizard:
视图类窗口始终在框架类窗口之上。所以,所有的操作都只能在视类窗口捕获。
2,消息映射机制:【与消息循环不同!!!】
在每个能处理消息的类中定义一个消息和消息函数静态对照表,即消息映射表。在该表中,消息和消息处理函数的指针是成对出现的。当有消息需要处理时,os只需要查该表就能找到相应的处理函数对其处理。
07-05-23 wednesday
二,绘制线条
1,利用SDK全局函数实现:
获得设备描述表::getDC(m_hWnd),移动到线条起点MoveToEx(),画线LineTo(),释放设备描述表::ReleaseDC(m_hWnd,hdc)。
2,利用MFC的CDC类实现:【该类封装了所有与绘图相关的操作,提供成员m_hDC保存DC句柄】
这里用getDC,ReleaseDC没有::,表示局部函数???yyy【在哪里定义???】
pDC->要用“->”而不是“.”,因为其为指针???yyy
3,利用MFC的CClientDC类实现:【派生于CDC类,不需显式地释放资源】
dc不用“->”而是“.”,因为其是类。还有GetParent()函数。可以划到视类窗口和工具栏
【响应函数在视类中,怎么能响应框架类中的左键点击消息???】
4,利用MFC的CWindowDC类实现:【派生于CDC类,不需显式地释放资源,用GetParent()函数可以划到视类窗口和工具栏,标题栏,菜单栏】用GetDesktopWindow()函数还可以在桌面画线。
【后两个函数怎么划的线不是真正的鼠标控制的位置???】
5,彩色线条
CPen类。
构造GDI对象,用SelectObject函数选入设备表。该函数返回原来的画笔指针。
三,画刷绘图
1,简单画刷CBrush类
2,位图画刷
3,透明画刷用GetStockObject函数获得透明画刷句柄,由句柄转为透明画刷对象。转化函数FromHandle
【CBrush::FromHandle()与CBrush.FromHandle()的区别???】
//静态成员函数和静态成员变量,可以用“类::函数名”的形式直接调用,而无需先定义一个该类的对象!!!【因为静态……属于类本身,在类加载时即为他们分配了空间,所以可以如前所说的来访问,而非静态……属于对象,故必须先对象化后引用。】
四,绘连续线条
WM_MOUSEMOVE的响应函数OnMouseMove
五,绘扇形效果的线条
SetROP2函数。