单文档上作图
1>对消息的响应
由于view覆盖在Frame上,所以那些对窗口的操作只能被view捕获。
通过向导添加的消息函数都为我们做了些什么?
a.在头文件:两个宏之间 //{{AFX_MSG(CDrawView) 加了一个消息原函数的声明;
……
//}}AFX_MSG
b.在源文件中:1. BEGIN_MESSAGE_MAP(CDrawView, CView)通过这两个宏,将消息与消息函数关联起来;
//{{AFX_MSG_MAP(CDrawView)
ON_WM_LBUTTONDOWN()
……
//}}AFX_MSG_MAP
// Standard printing commands
END_MESSAGE_MAP()
2.响应消息的函数的具体实现部分
MFC对消息的处理方式:消息映射 主要涉及到WindowProc 和 OnWndMsg 两个函数
2>作图
首先获取DC句柄。这有非常多种方法:
a. 可以直接使用API函数(HDC hdc ; hdc = ::GetDC(m_hwnd);(m_hwnd是与该类相关的窗口句柄,凡是从CWnd所派生出 来的类中都有一个数据成员保存与该C++类相关的窗口句柄));
b.MFC中提供的CDC类,需要自己显示调用GetDC和ReleaseDC
c.继承CDC的CClientDC和CWindowDC两个类,这些类都可以直接查阅msdn
其次是画笔,画刷的使用。把一个画笔选到设备描述附表使用SelectObject类,记得要把就旧的画刷选回设备描述符表……
特别介绍了位图画刷(CBitmap)与透明画刷(GetStockObject)
最后介绍的是如何画连续的线,通过每一小段画一条线最后可以连成一条曲线,SetROP2()可以设置像素模式。
3>内存访问模型,只有在内存中存在一席之地,才可以被访问。静态成员变量需要在类的外部初始化
本文详细介绍了MFC框架下视图类CDrawView如何响应消息及绘图操作。包括消息函数的添加过程,消息映射机制以及绘图所需的设备上下文获取方法。此外还涉及了画笔、画刷的使用技巧以及绘制连续线条的方法。
1094

被折叠的 条评论
为什么被折叠?



