您的位置:首页 > 编程语言 > C语言/C++

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: