MFC Diary - Visual C++ 基础框架2


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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值