《MFC Windows程序设计》读书笔记

2020-04-14 01:06

《MFC Windows程序设计》读书笔记 重剑无锋 原创

MFC Windows程序设计读书笔记

第1章. Hello MFC

Windows应用程序必须至少要有一个APP类和对象,以及一个窗口类

1.3.1 应用程序对象 CWinApp

APP对象是全局对象,必须

APP类的InitInstance()虚函数中创建窗口对象,显示之、更新之 1. 创建窗口对象,就自动调用窗口对象的构造函数 2. 显示窗口对象,使之在屏幕上可见

3. 更新窗口对象,就会自动发出WM_PAINT消息,通过消息映射,调用窗口对象的

OnPaint()过程

4. 返回TRUE,表示继续;返回FALSE,程序结束

m_pMainWnd是应用程序对象(CWinAPP及其子类)的数据成员,用于存储对应窗口对象的指针,m_nCmdShow也是它的数据成员,其值通常是SW_SHOWNORMAL,表示窗口处于既不是最大、也不是最小的状态,用于传递给显示窗口的函数,指定窗口的显示状态。

1.3.2 MFC如何使用应用程序对象

在CWinApp theApp;这条语句时,构造函数构造这个全局的应用程序对象,在构造函数中,调用了WinMain()函数,程序就开始从这里执行起走了。

1.3.3 框架窗口对象 CFrameWnd

virtual BOOL Create( LPCTSTR lpszClassName,

// 基于WNDCLASS的类名称,设为null将创建主窗口

// 窗口标题栏文本

// 尺寸,rectDefault是静态成员 // 父窗口指针 // 窗口的菜单 // 扩展样式

// 在文档/视图结构中使用的结构

LPCTSTR lpszWindowName,

DWORD dwStyle = WS_OVERLAPPEDWINDOW, // 样式 const RECT& rect = rectDefault, CWnd* pParentWnd = NULL, DWORD dwExStyle = 0, );

WS_OVERLAPPEDWINDOW = WS_OVERLAPPED |

第1页 共 55页

LPCTSTR lpszMenuName = NULL,

CCreateContext* pContext = NULL

《MFC Windows程序设计》读书笔记 重剑无锋 原创

WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX

1.3.4 绘制窗口

WM_PAINT消息的处理函数:OnPaint()负责绘制窗口。 CPaintDC dc(this);

CPaintDC只存在于OnPaint函数中,它的构造函数调用::BeginPaint(),它的析构函数调用::EndPaint(),所以,推荐在栈上创建CPaintDC对象,如果用new创建,则必须显示地用delete删除之。

在窗口客户区显示文本:

dc.DrawText(文本内容,字符数(或-1),矩形区,输出选项);

1.3.5消息映射

消息映射是将消息与消息处理函数映射起来的表。 ? 消息映射的方法: 1、在头文件中: Afx_msg void OnPaint(); DECLARE_MESSAGE_MAP() 2、源文件中:

BEGIN_MESSAGE_MAP(当前类名,父类名) ON_WM_PAINT() END_MESSAGE_MAP()

从上面的代码可以知道:消息映射跟类的其他成员一样,可以通过继承来传递 ? 鼠标左键的消息映射函数原型是:

Afx_msg void OnLButtonDown(UINT nFlags,CPoint point); nFlags 表示虚拟键的状态,取值是以下值的相加(或): MK_CONTROL. MK_LBUTTON MK_MBUTTON MK_RBUTTON MK_SHIFT

例:if ( nFlag & MK_LBUTTON != 0 )

point是设备坐标,可以用CDC::DPtoLP()转换成逻辑坐标。 ? 自定义消息映射

第2页 共 55页

// 一般要放到最后一行

《MFC Windows程序设计》读书笔记 重剑无锋 原创

在头文件中:

#define WM_MYMESSAGE WM_USER+0X100 在源文件中:

ON_MESSAGE(WM_MYMESSAGE , OnMyMessage) 函数原型是:

Afx_msg LRESULT OnMyMessage(WPARAM wParam , LPARAM lParam);

1.3.6 消息映射的工作方式

说明消息映射的几个宏,是如何转换为代码的,以及其执行过程。 了解而已

1.3.7 Windows字符集,_T()宏

“Hello” L(“Hello”)

// 从ANSI字符组成该字符串 // 使用Unicode

// 如果预定义了预处理程序符号_UNICODE,编译器使用Unicode // 字符,否则,使用ANSI字符

_T(“Hello”)

第2章. 在Windows中绘图

2.1 Windows GDI

DC是一种数据结构,它包含了所有GDI需要的关于显示平面的描述信息,也包括相连的物理设备和各种各样的状态信息。

2.1.1 MFC设备描述表

? CDC

CDC* pDC = GetDC(); ReleaseDC(pDC); ? CPaintDC

只存在于OnPaint()函数中 CPaintDC dc(this); 或

CPaintDC* pDC = new CPaintDC(this); // 在堆上创建,手工删除 delete pDC;

// 在栈上创建,自动析构

第3页 共 55页

《MFC Windows程序设计》读书笔记 重剑无锋 原创

? CClientDC 客户区DC ? CWindowDC 客户区和非客户区DC

构造CClientDC或CWindowDC时,传递NULL参数,获得整个屏幕的DC ? CMetaFileDC

用于向GDI元文件画图的DC

2.1.2 设备描述表属性

属性 默认值 Set 文本颜色 Black SetTextColor 背景颜色 White SetBkColor 背景模式 OPAQUE SetBkMode 映射模式 MM_TEXT SetMapMode 绘图模式 R2_COPYPEN SetROP2 当前位置 0,0 MoveTo 当前画笔 BLACK_PEN SelectObject 当前画刷 WHITE_BRUSH SelectObject 当前字体 SYSTEM_FONT SelectObject dc.SetBkMode(TRANSPARENT); // 背景透明 SelectObject可以选入的对象(即所有的GDI对象): CPen,CBrush,CBitmap,CFont,CPalette,CRgn

Get GetTextColor GetBkColor GetBkMode GetMapMode GetROP2 GetCurrentPosition SelectObject SelectObject SelectObject 2.1.3 绘图模式

绘图模式表示:如何将像素点输出到逻辑显示平面上。 CDC::SetROP2()

即:Set Raster Operation to

默认模式是R2_COPYPEN,表示将像素点复制到显示平面上。

例:

dc.SetROP2(R2_NOT);

// 底色反转

2.1.4 映射模式

映射模式用于确定从逻辑坐标到设备坐标的转换方式。 应当密切关注不同映射模式下y的坐标。

第4页 共 55页

《MFC Windows程序设计》读书笔记 重剑无锋 原创

2.1.6 坐标转换

CDC::LPtoDP(); CDC::DPtoLP();

// 逻辑坐标→设备坐标 // 反之

2.1.7 移动原点

CDC::SetWindowOrg(); CDC::SetViewOrg();

// 设置窗口原点

// 设置视口原点

2.1.8 坐标系小结

设备坐标系:举例长短以像素点来计算

逻辑坐标系:原点可以在任何位置,有映射模式、缩放因子、坐标轴方向的不同 用户坐标值:窗口客户区的设备坐标值 屏幕坐标值:原点定于屏幕左上角的设备坐标 CWnd::ClientToScreen(); CWnd::ScreenToClient();

2.1.9 获取设备信息

CDC::GetDeviceCaps(); 可用参数:

HORZSIZE:物理屏幕的宽度(毫米); VERTSIZE:物理屏幕的高度(毫米); HORZRES:屏幕的宽度(像素); VERTRES:屏幕的宽度(像素); PLANES: 位平面数;

BITSPIXEL:每个像素点的位的数目 ??

2.2 用GDI画图

2.2.3 GDI画笔和CPen类

? 创建画笔的三个方法: 1、CPen pen(PS_SOLID , 1 , rgb(...)) ; 2、CPen pen ;

pen.CreatePen(PS_SOLID , 1 , rgb(...)) ;

第5页 共 55页


《MFC Windows程序设计》读书笔记.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:3-4岁敏感期

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: