MFC Diary - Visual C++ 基础框架2
2011-11-25 09:45
323 查看
1. Windows 消息映射
MFC 中一On 打头的成员函数(比如OnKeyDown,OnLButtonUp 等等)都是应用程序框架响应的各种Windows事件 是需要调用的函数,而且在Windows框架中
这些函数大多数都不是虚函数(如OnKeyDown),因此需要话费更多的精力编程。
MFC 的消息映射体系:
当用户在视图窗口中按下鼠标左键时,Windows会自动发送WM_LBUTTONDOWN消息给该窗口,如果你需要对WM_LBUTTONDOWN消息有所反应的话,
在视图类中必须包含相应的相应函数
1>> void CMyView::OnLButtonDown(UINT nFlags, CPoint point) {}
2>> 函数原型:afx_msg void OnLButtonDown(UINT nFlags, CPoint point)
afx 表明声明的函数是针对消息映射的函数。
3>> 加入消息映射宏:
BEGIN_MESSAGE_MAP(CMyView, CView)
ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()
4>> 在CPP文件加上如下声明
DECLARE_MESSAGE_MAP()
2. 试图数据控制
类成员函数初始化
CMyView::CMyView:m_rect(0, 0, 200, 200) {//在构造函数中对成员函数初始化
}
常用的绘图类
CRect, CPoint, CSize
>> CPoint + CSize
>> CPoint - CSize
>> CPoint - CPoin+t
>>CRect +CPoint
>>CRect - CPoint
判断一个点是否在矩形内
CRect rc;
if (rc.PtInRect(point)) { }
判断一个点是否在椭圆内
CRgn rgn;
rgn.CreateEllipticRgnIndirect(m_rect);
if (rgn.PtInRegion(point)) {}
为什么CRect 和 LPRECT 可以通用
由于CRect类定义了重载操作符LPRECT()
3. MFC Window 坐标映射模式
3.1 MM_TEXT 模式
3.2 固定比例 映射
x值向右递增,y向下递减
3.3 可变比例 映射模式
MM_ISOTROPIC and MM_ANISOTROPIC
4. 设备坐标 和 逻辑坐标
CDC提供了LPtoDP 和 DPtoLP函数用来在逻辑坐标和设备坐标之间转换
CClientDC dc(this);
dc.SetMapMode(MM_LOG...);
dc.LPtoDP(rect);
if (rect.PtInRect(point)) {}
P107
P70
4.1 Scroll View
CScrollView 中的ScrollView 和 SetViewPointOrg (设置原点)
CScrollView 可以响应系统窗口发出两个消息WM_HSCROLL, WM_VSCROLL,从而实现窗口滚动的控制。
对于CScrollView 框架的应用,你可以采用Class View 增加你需要实现的消息,关于虚拟函数请参考CSrollView 头文件。
MFC采用消息机制 和 虚拟函数机制来实现整体框架。
4.2 常规的Window 消息 (通用的)
WM_CREATE
WM_CLOSE
WM_QUERYENDSESSION
WM_DESTORY
MFC 中一On 打头的成员函数(比如OnKeyDown,OnLButtonUp 等等)都是应用程序框架响应的各种Windows事件 是需要调用的函数,而且在Windows框架中
这些函数大多数都不是虚函数(如OnKeyDown),因此需要话费更多的精力编程。
MFC 的消息映射体系:
当用户在视图窗口中按下鼠标左键时,Windows会自动发送WM_LBUTTONDOWN消息给该窗口,如果你需要对WM_LBUTTONDOWN消息有所反应的话,
在视图类中必须包含相应的相应函数
1>> void CMyView::OnLButtonDown(UINT nFlags, CPoint point) {}
2>> 函数原型:afx_msg void OnLButtonDown(UINT nFlags, CPoint point)
afx 表明声明的函数是针对消息映射的函数。
3>> 加入消息映射宏:
BEGIN_MESSAGE_MAP(CMyView, CView)
ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()
4>> 在CPP文件加上如下声明
DECLARE_MESSAGE_MAP()
2. 试图数据控制
类成员函数初始化
CMyView::CMyView:m_rect(0, 0, 200, 200) {//在构造函数中对成员函数初始化
}
常用的绘图类
CRect, CPoint, CSize
>> CPoint + CSize
>> CPoint - CSize
>> CPoint - CPoin+t
>>CRect +CPoint
>>CRect - CPoint
判断一个点是否在矩形内
CRect rc;
if (rc.PtInRect(point)) { }
判断一个点是否在椭圆内
CRgn rgn;
rgn.CreateEllipticRgnIndirect(m_rect);
if (rgn.PtInRegion(point)) {}
为什么CRect 和 LPRECT 可以通用
由于CRect类定义了重载操作符LPRECT()
3. MFC Window 坐标映射模式
3.1 MM_TEXT 模式
3.2 固定比例 映射
x值向右递增,y向下递减
3.3 可变比例 映射模式
MM_ISOTROPIC and MM_ANISOTROPIC
4. 设备坐标 和 逻辑坐标
CDC提供了LPtoDP 和 DPtoLP函数用来在逻辑坐标和设备坐标之间转换
CClientDC dc(this);
dc.SetMapMode(MM_LOG...);
dc.LPtoDP(rect);
if (rect.PtInRect(point)) {}
P107
P70
4.1 Scroll View
CScrollView 中的ScrollView 和 SetViewPointOrg (设置原点)
CScrollView 可以响应系统窗口发出两个消息WM_HSCROLL, WM_VSCROLL,从而实现窗口滚动的控制。
对于CScrollView 框架的应用,你可以采用Class View 增加你需要实现的消息,关于虚拟函数请参考CSrollView 头文件。
MFC采用消息机制 和 虚拟函数机制来实现整体框架。
4.2 常规的Window 消息 (通用的)
WM_CREATE
WM_CLOSE
WM_QUERYENDSESSION
WM_DESTORY
相关文章推荐
- Visual C++开发技术大全----MFC基础
- 深入剖析MFC基础框架——跟踪MFC单文档程序的执行过程
- 转帖:在MFC框架基础上实现系统托盘与用户的交互
- 深入剖析MFC基础框架——跟踪MFC单文档程序的执行过程:
- VS2010 C++ MFC框架学习笔记5 - C++面向对象编程基础1
- 【MFC】程序框架及基础知识
- MFC框架基础分析
- mfc 文档/视图框架:一(基础知识)
- VS2010 C++ MFC框架学习笔记4 - C++面向对象编程基础2
- MFC Diary - Visual C++ 基础框架1
- 孙鑫MFC笔记教程(3)--MFC应用程序框架
- Python基础-项目-day5 Web框架
- 帮助java初学者建立基础知识框架
- MFC 框架技术简单研讨
- 【Visual C++】游戏开发笔记二十二 游戏基础物理建模(四) 粒子系统模拟(一)
- Mybatis基础框架学习(六)
- 微软基础类库MFC概述
- tensorflow框架基础之Session
- 如何写MVC基础框架
- ssm框架基础配置