22
C++ 程程程程程程 MFC 程程 2

C++ 程序设计教程 MFC 简介 2. 1.RuntimeClass 执行期类型识别 1) CRuntimeClass struct CRuntimeClass { LPCSTR m_lpszClassName; CRuntimeClass* m_pBaseClass; static CRuntimeClass*

Embed Size (px)

Citation preview

Page 1: C++ 程序设计教程 MFC 简介 2. 1.RuntimeClass 执行期类型识别 1) CRuntimeClass struct CRuntimeClass { LPCSTR m_lpszClassName; CRuntimeClass* m_pBaseClass; static CRuntimeClass*

C++ 程序设计教程

MFC简介 2

Page 2: C++ 程序设计教程 MFC 简介 2. 1.RuntimeClass 执行期类型识别 1) CRuntimeClass struct CRuntimeClass { LPCSTR m_lpszClassName; CRuntimeClass* m_pBaseClass; static CRuntimeClass*

1.RuntimeClass 执行期类型识别

1) CRuntimeClass

struct CRuntimeClass {

LPCSTR m_lpszClassName;

CRuntimeClass* m_pBaseClass;

static CRuntimeClass* pFirstClass;

CRuntimeClass* m_pNextClass;

};

CObject

m_pBaseClass

m_pNextClass

CCmdTarget

m_pBaseClass

m_pNextClass

CWnd

m_pBaseClass

m_pNextClass

NULL

Page 3: C++ 程序设计教程 MFC 简介 2. 1.RuntimeClass 执行期类型识别 1) CRuntimeClass struct CRuntimeClass { LPCSTR m_lpszClassName; CRuntimeClass* m_pBaseClass; static CRuntimeClass*

2.Serialize 串行化 CArchivevoid CMyDoc::Serialize(CArchive& ar)

{

if ( ar.IsStoring() )

ar << (WORD)m_sizeDoc;

else // loading

ar >> (WORD&)m_sizeDoc;

}

Page 4: C++ 程序设计教程 MFC 简介 2. 1.RuntimeClass 执行期类型识别 1) CRuntimeClass struct CRuntimeClass { LPCSTR m_lpszClassName; CRuntimeClass* m_pBaseClass; static CRuntimeClass*

3.Message Mapping 消息映射1) DECLARE_MESSAGE_MAP()

2) BEGIN_MESSAGE_MAP()

ON_COMMAND(……)

END_MESSAGE_MAP()

3) CWinApp

InitInstance()

Run()

ExitInstance()

Page 5: C++ 程序设计教程 MFC 简介 2. 1.RuntimeClass 执行期类型识别 1) CRuntimeClass struct CRuntimeClass { LPCSTR m_lpszClassName; CRuntimeClass* m_pBaseClass; static CRuntimeClass*

4. MFC 类的层次结构class CObject

class CCmdTarget : public CObject

class CWinThread : public CCmdTarget

class CWinApp : public CWinThread

class CMyWinApp : public CWinApp

class CWnd : public CCmdTarget

class CView : public CWnd

class CMyView : public CView

class CFrameWnd : public CWnd

class CMainFrame : public CFrameWnd

class CDocument : public CCmdTarget

class CMyDoc : public CDocument

Page 6: C++ 程序设计教程 MFC 简介 2. 1.RuntimeClass 执行期类型识别 1) CRuntimeClass struct CRuntimeClass { LPCSTR m_lpszClassName; CRuntimeClass* m_pBaseClass; static CRuntimeClass*

1. CObject 1) 一般诊断 AssertValid 2) 运行期识别 RuntimeClass 3) 串行化 Serialize 4) 动态创建 DECLARE_DYNAMIC/IMPLEMENT_DYNAM

IC 2. CCmdTarget : public CObject 1) 消息发送

BEGIN_MESSAGE_MAP(CMyView,Cview)ON_COMMAND(ID_FILE_OPEN,OnFileOpen)

END_MESSAGE_MAP() 2) 等待光标 3) 支持自动化 Idispatch COM

Page 7: C++ 程序设计教程 MFC 简介 2. 1.RuntimeClass 执行期类型识别 1) CRuntimeClass struct CRuntimeClass { LPCSTR m_lpszClassName; CRuntimeClass* m_pBaseClass; static CRuntimeClass*

3. CWinApp : public CWinThread 1) 获取应用程序的信息。

2) 支持注册表 RegistryKey

3) 支持文档 Document Template

4. CWnd : public CCmdTarget 1) 注册新窗口类。

2) 创建和使用窗口 Create, CreateEx;

5. CFrameWnd : public CWnd 标题栏、系统菜单、边框、最小 / 最大化

Page 8: C++ 程序设计教程 MFC 简介 2. 1.RuntimeClass 执行期类型识别 1) CRuntimeClass struct CRuntimeClass { LPCSTR m_lpszClassName; CRuntimeClass* m_pBaseClass; static CRuntimeClass*

6. CView : public CWnd 1) 显示 / 打印的处理 OnDraw()

2) 与用户进行交互操作 ( 鼠标 / 键盘 )

OnLButtonDown/OnLButtonUp

OnKeyDown … …

3) 系统重画 Invalidate(); UpdateWindow()

7. CDocument : public CCmdTarget 1) 文档的输入 / 输出。 OpenDocument/SaveDocument

2) 数据的保存和更新;

3) View 的维护。

Page 9: C++ 程序设计教程 MFC 简介 2. 1.RuntimeClass 执行期类型识别 1) CRuntimeClass struct CRuntimeClass { LPCSTR m_lpszClassName; CRuntimeClass* m_pBaseClass; static CRuntimeClass*

GDI基础知识 GDI(图形设备接口) GDI是一个可执行程序 GDI是一个抽象的绘图程序接口,程序通过它访问图形设备驱动

DC( device context )(设备上下文)是绘图图形函数的集合。

CDC类包含了绘图所需要的所有成员函数。

Page 10: C++ 程序设计教程 MFC 简介 2. 1.RuntimeClass 执行期类型识别 1) CRuntimeClass struct CRuntimeClass { LPCSTR m_lpszClassName; CRuntimeClass* m_pBaseClass; static CRuntimeClass*

CDC类的派生类

派生类名称 说明CClientDC 提供对窗口客户区域的图形访问CMetaFileDC 创建独立于设备的图元文件CPaintDC 在 CMainFrame中的 OnPaint()内

使用的 DC

CWindowDC 在整个窗口画图的 DC

Page 11: C++ 程序设计教程 MFC 简介 2. 1.RuntimeClass 执行期类型识别 1) CRuntimeClass struct CRuntimeClass { LPCSTR m_lpszClassName; CRuntimeClass* m_pBaseClass; static CRuntimeClass*

§ 与设备环境 DC有关的常用函数 1 ) GetDC() CDC* CWnd::GetDC()

在 CWnd 的派生类中获取 DC 指针 2) ReleaseDC() int ReleaseDC(CDC* pD

C) 释放 GetDC 得到的 CDC 对象

3) BeginPaint() 为指定窗口的画图作准备

4) EndPaint() 结束绘图

5) SelectObject() 将一个图形对象选入设备环境 DC.

Page 12: C++ 程序设计教程 MFC 简介 2. 1.RuntimeClass 执行期类型识别 1) CRuntimeClass struct CRuntimeClass { LPCSTR m_lpszClassName; CRuntimeClass* m_pBaseClass; static CRuntimeClass*

§ GDI对象

图形类

CGdiObject

CBrush

CPen

CFont

CBitmap

CPalette

CRgn

Page 13: C++ 程序设计教程 MFC 简介 2. 1.RuntimeClass 执行期类型识别 1) CRuntimeClass struct CRuntimeClass { LPCSTR m_lpszClassName; CRuntimeClass* m_pBaseClass; static CRuntimeClass*

§GDI对象的用法void CTestView::OnDraw(CDC* pDC)

{

… …

CPen pen(PS_SOLID,1,RGB(0,0,0));

// 构造画笔对象// 选择新设备环境的同时,保存旧的绘图对象到设备环境 CPen* pOldPen = pDC->SelectObject(&pen);

… …

pDC->SelectObject(pOldPen);// 恢复}

Page 14: C++ 程序设计教程 MFC 简介 2. 1.RuntimeClass 执行期类型识别 1) CRuntimeClass struct CRuntimeClass { LPCSTR m_lpszClassName; CRuntimeClass* m_pBaseClass; static CRuntimeClass*

§4 GDI对象类 CPen 类构造函数

CPen( );

CPen( int nPenStyle, int nWidth, COLORREF crColor );throw( CResourceException );

CPen( int nPenStyle, int nWidth, const LOGBRUSH* pLogBrush, int nStyleCount = 0, const DWORD* lpStyle = NULL );throw( CResourceException );

Page 15: C++ 程序设计教程 MFC 简介 2. 1.RuntimeClass 执行期类型识别 1) CRuntimeClass struct CRuntimeClass { LPCSTR m_lpszClassName; CRuntimeClass* m_pBaseClass; static CRuntimeClass*

PS_SOLID   Creates a solid pen.

PS_DASH   Creates a dashed pen. Valid only when the pen width is 1 or less, in device units.

PS_DOT   Creates a dotted pen. Valid only when the pen width is 1 or less, in device units.

PS_DASHDOT   Creates a pen with alternating dashes and dots. Valid only when the pen width is 1 or less, in device units.

PS_DASHDOTDOT   Creates a pen with alternating dashes and double dots. Valid only when the pen width is 1 or less, in device units.

PS_NULL   Creates a null pen.

Page 16: C++ 程序设计教程 MFC 简介 2. 1.RuntimeClass 执行期类型识别 1) CRuntimeClass struct CRuntimeClass { LPCSTR m_lpszClassName; CRuntimeClass* m_pBaseClass; static CRuntimeClass*

§CBrush 类

CBrush 的构造函数CBrush( );

CBrush( COLORREF crColor );throw( CResourceException );

CBrush( int nIndex, COLORREF crColor );throw( CResourceException );

CBrush( CBitmap* pBitmap );throw( CResourceException );

Page 17: C++ 程序设计教程 MFC 简介 2. 1.RuntimeClass 执行期类型识别 1) CRuntimeClass struct CRuntimeClass { LPCSTR m_lpszClassName; CRuntimeClass* m_pBaseClass; static CRuntimeClass*

HS_BDIAGONAL   Downward hatch (left to right) at 45 degrees

HS_CROSS   Horizontal and vertical crosshatch

HS_DIAGCROSS   Crosshatch at 45 degrees

HS_FDIAGONAL   Upward hatch (left to right) at 45 degrees

HS_HORIZONTAL   Horizontal hatch

HS_VERTICAL   Vertical hatch

Page 18: C++ 程序设计教程 MFC 简介 2. 1.RuntimeClass 执行期类型识别 1) CRuntimeClass struct CRuntimeClass { LPCSTR m_lpszClassName; CRuntimeClass* m_pBaseClass; static CRuntimeClass*

填充效果

HS_VERTICAL  HS_CROSS

Page 19: C++ 程序设计教程 MFC 简介 2. 1.RuntimeClass 执行期类型识别 1) CRuntimeClass struct CRuntimeClass { LPCSTR m_lpszClassName; CRuntimeClass* m_pBaseClass; static CRuntimeClass*

§CFont 类BOOL CreateFont( int nHeight, int nWidth, int nEscapement, int nOrientation, int nWeight, BYTE bItalic, BYTE bUnderline, //  下划线BYTE cStrikeOut, //  删除线BYTE nCharSet, BYTE nOutPrecision,BYTE nClipPrecision, BYTE nQuality, BYTE nPitchAndFamily, 

     LPCTSTR lpszFacename );

Page 20: C++ 程序设计教程 MFC 简介 2. 1.RuntimeClass 执行期类型识别 1) CRuntimeClass struct CRuntimeClass { LPCSTR m_lpszClassName; CRuntimeClass* m_pBaseClass; static CRuntimeClass*

ApplicationEscapement

nHeightOrientation

Page 21: C++ 程序设计教程 MFC 简介 2. 1.RuntimeClass 执行期类型识别 1) CRuntimeClass struct CRuntimeClass { LPCSTR m_lpszClassName; CRuntimeClass* m_pBaseClass; static CRuntimeClass*

§CFont 类BOOL CreateFontIndirect(const LOGFONT* lpLogFont );

typedef struct tagLOGFONT { // lf LONG lfHeight;       LONG lfWidth; 

      LONG lfEscapement;      LONG lfOrientation;LONG lfWeight;  BYTE lfItalic;   BYTE lfUnderline;BYTE lfStrikeOut; BYTE lfCharSet; BYTE lfOutPrecision; BYTE lfClipPrecision; BYTE lfQuality;  BYTE lfPitchAndFamily; TCHAR lfFaceName[LF_FACESIZE]; } LOGFONT; 

Page 22: C++ 程序设计教程 MFC 简介 2. 1.RuntimeClass 执行期类型识别 1) CRuntimeClass struct CRuntimeClass { LPCSTR m_lpszClassName; CRuntimeClass* m_pBaseClass; static CRuntimeClass*