2024年3月5日发(作者:)

文件种类

自述文件 P3

项目文件: P3

应用程序源文件和头文件: P3

资源文件 P3

预定义的文件 P4

上下敏感的帮助文件 P4

显示对话框的方法是使用CDialog类的成员函数DoModal P5

变量命名方法: P6

编译预处理命令: P7

MFC应用程序结构 P7

与设备描述表有关的常用函数 P8

常用的CDC类画图成员函数 P9

逻辑坐标到物理坐标的映像函数原型: P10

常用本输出操作函数 P10

消息处理 P12

不同消息类型的取值范围 P12

常用句柄 P12

获取设备描述表句柄的方法 P13

MFC的消息处理过程 P14

CView主要成员函数 P15

1

CDocument类主要函数 P16

CDialog主要函数 P16

I/O流类 P18

视频捕捉系统函数

P20

2

1.

自述文件:介绍了AppWizard创建的其它文件的内容和作用,并反映了对可选项所作的选择.

2.

项目文件:

 : 项目文件用于管理项目结构.

 :ClassWizard文件,包含用ClassWizard编辑现有类或增加新类的信息

3. 应用程序源文件和头文件:

 PRJNAME.h应用程序的应用类的头文件.

 应用程序的应用类的实现文件,包含应用类的具体实现代码和消息映射.

 MainFrama.h应用程序框架窗口类的头文件.

 应用程序框架窗口类的实现文件

 ChildFrm.h应用程序子框架窗口类的头文件.

 应用程序子框架窗口类的实现文件.

 PRJNADoc.h应用程序文档类的头文件

 应用程序文档类的实现文件

 PRJNAView.h应用程序视图类的头文件

 PRJNAView. cpp应用程序视图类的实现文件

4. 资源文件

3

 项目文件

 Resource.h资源头文件,包含标准MFC的资源,菜单、加速键和字符串表。

 应用程序的图表文件.

 应用程序的子窗口图表文件.

 位图文件,指定了支持工具条时,用于创建级联图像.

 2AppStudio尚未建立和编辑的资源的资源文件.

5. 预定义的文件

 STDAFX.h和

6. 上下敏感的帮助文件

 建立应用程序的帮助文件

 基于文档的应用程序的模板帮助文件

 用于描述打印命令和打印对话框

 帮助项目文件,告诉编译器rtf文件以及帮助文件所需的位图光标和图标.

 *.bmp生成帮助文件的位图文件

 .dsw工作区文件,将各个项目的详细信息组合在一个工作区中.调用C++源程序就调用它.

 .ncb非编译浏览器文件,存放Class View,ClassWizard工具条使用的详细信息.

4

.opt选项文件,存放定制的工作区选项代码.

对话框IDD_

控制条IDW_

框架相关资源IDR_

工具条或菜单ID_或IDM_

位图资源IDB_

消息框IDP_

编辑框IDC_

静态文本框IDC_STATIC

成员变量以m_开头

类以C开头

 显示对话框的方法

 是使用CDialog类的成员函数DoModal()

其方法是

CDialog dlg;

int retcode ; //声明一变量

retcode= dlg. DoModal();

 DoModal()的返回值表示了对话框的结束状态,当单击OK按钮时返回IDOK,表示接受从编辑框控件输入的数据,当单击CANCLE按钮时返回IDCANCLE,表示不接受从编辑框控件输入的数据。

5

 在注册对话框类时,系统会自动生成对话框类的头文件,在编写源代码时应在句柄函数前追加#include “*.h”

 常用函数:

Void COutTextView ::OnDraw(CDC*pDC)

{

COutTextDoc*pDoc=GetDocument();

ASSERT_VALID(pDoc);

}

变量命名方法:

a/ar 数组

b BULL布尔值

by BYTE无符号字符

c/ch char

d/dbl double

dw/w 无符号整数

f/fl float

fn 函数

L/l long

h 句柄

m 类的数据成员

n/i int

p 指针

6

s 字符串

sz “0”结束的字符串

x,y 无符号整数或坐标

编译预处理命令:

宏定义 #define 宏名 宏体 //宏名用大写字母表示

文件包含指令 #include <文件名> 或#include “文件名”

条件编译 #if …#else …#end if

行控制指令 #line

其他 #pragma #error

MFC应用程序结构

一个对话框应用程序由一个应用程序类和一个对话框类构成。

一个SDI应用程序由应用程序类,框架类,文档类和视图类构成。

一个MD应用程序由应用程序类,主框架类,子框架类,文档类和视图类构成。

应用程序类CXxxApp

功能:控制应用程序的所有对象。

 应用程序的初始化。

7

 创建主窗口。

 处理消息循环,从操作系统获取信息分发给程序窗口

 退出应用程序

 关闭应用。

文档类CXxxDoc

功能:存放程序数据并实现文件保存和装载。

视图类:CXxxView

功能:指定用户与文档间的交互形式。

主框架类CMainFrame

功能:管理应用程序窗口,显示标题栏,菜单栏,工具栏,控制栏和控制按钮。

与设备描述表有关的常用函数

 CDC*CWnd::GetDC();调用成功,返回客户区的显示器的设备描述表的指针,否则返回NULL

 int ReleaseDC(CDC*Pdc)用于释放指向的设备描述表,以便该设备描述表被其他申请调用。

 CDC* CWnd:BeginPaint(LPPAINTSTRUCT lpPaint)为在指定窗口中绘图作准备工作,并 把与绘图有关的消息填写到结构体PAINTSTRUCT中,调用成功,返回指定窗口的显示器设备描述表的指针,否则返回NULL

 BOOL CWnd::EndPaint(CONST PAINTSTRUCT *

8

lpPaint)用于结束指定窗口中的绘图过程。

 SelectObject()用于把画笔,画刷,字体,位图和区域对象选入指定的设备描述表中,用新对象代替旧对象。例如:

CPen* CDC::SelectObject(CPen* pPen)

 BOOL CDC::DeleteObject(HGDIOBJ hObject),hObject为画笔,画刷,字体,位图和区域的句柄,调用成功,返回TRUE,否则返回FALSE

常用的CDC类画图成员函数

1. 画点:

COLORREF SetPixel(POINT point,COLORREF crColor)

COLORREF SetPixel(int x,int y,COLORREF crColor)

调用成功,返回点的颜色(RGB)值。否则返回-1,

crColor-----点的RGB颜色

2. 画直线:

POINT LineTo(int x,int y);//参数为直线终点

POINT MoveTo(int x,int y);//参数为直线起点

返回点的坐标

3. 画矩形

BOOL Rectangle(LPCRECT lpRect)//参数为边界矩形

BOOL Rectangle(int x1,int y1, int x2,int y2)

绘制成功返回非0,否则返回0

9

4. 画弧

BOOL Arc(LPCRECT lpRect,POINT ptStart,POINT ptEnd)

绘制成功返回非0,否则返回0

5. 画椭圆和圆

BOOL Arc(LPCRECT lpRect)//参数为边界矩形

BOOL Arc(int x1,int y1, int x2,int y2)

绘制成功返回非0,否则返回0

6. 画饼

BOOL Pie(LPCRECT lpRect,POINT ptStart,POINT

ptEnd)

绘制成功返回非0,否则返回0

7. 画多边形

BOOL Polynts(LPPOINT lpPoints,int nCount)

lpPoints为多边形顶点数组地址

nCount为数组中的顶点数

绘制成功返回非0,否则返回0

逻辑坐标到物理坐标的映像函数原型:

Virtual int SetMapMode(int nMapMode)// nMapMode为映像方式代码

常用本输出操作函数

10

 DrawText()

visual int DrawText(LPCTSTR lpszString, int nCount,LPRECT lpRect,UINT nFormat);

int DrawText(const Cstring &str LPRECT lpRect,UINT

nFormat);

lpszString指向字符串的指针

nCount要显示的字符个数

str---- Cstring类字符串对象

nFormat-----字符串显示格式

功能:在指定的矩形区域内显示字符串,字符串的字体和颜色取当前设置。

 TextOut()

功能:在指定的坐标位置上输出字符串,字符串的字体和颜色取当前设置。

Virtual BOOL TextOut(int x,int y,LPCTSTR int nCount)

BOOL TextOut(int x,int y const Cstring &str )

lpszString指向字符串的指针

nCount要显示的字符个数

str---- Cstring类字符串对象

 SetTextColor()

Virtual COLORREF SetTextColor(COLORREF erColor)

 SetBKMode()

11

Int SetBKMode(int nBKMode)

消息处理

WM_ -------鼠标动作窗口消息

BM_ -------按钮控制消息

CM_ -------组合框控制消息

EM_ -------编辑框控制消息

LB_ -------列表框控制消息

SBM_ -------滚动条控制消息

不同消息类型的取值范围

系统消息(1) 0x0000----0x03FF

用户定义内部消息 0x0400-----0x07FF

系统消息(2) 0x8000-----0xBFFF

用户定义的外部消息 0Xc000-----0xFFFF

常用句柄

HWND 窗口句柄

HDC 设备环境句柄

HINSTANCE 当前实例句柄

HBITMAP 位图句柄

HCURSOR 光标句柄

HICON 图标句柄

12

HFONT 字体句柄

HPEN 画笔句柄

HBRUSH 画刷句柄

HMENU 菜单句柄

HFILE 文件句柄

获取设备描述表句柄的方法

之一:在处理WM_PAINT消息时,窗口过程首先调用BeginPaint函数,其功能是在准备绘制时,擦除无效区域的背景,该函数的返回值是设备描述表句柄。通常保存在一个hdc的变量中。PAINTSTRUCT为一结构在WINUSR.H头文件中定义,其结构变量名为ps形式如下:

case WM_PAINT:

hdc=BeginPain(hwnd,&ps);

EndPaint(hwnd,&ps);

return 0;

之二: 使用GetDC函数,并用ReleaseDC释放.形式如下:

Hdc=GetDC(hwnd);

ReleaseDC(hwnd,hdc);

备注:

GetDC不会使任何无效的区域变为有效,如果需要整个客户区变的有效,可调用函数;

13

ValidateRect(hwnd,NULL);

GetDC返回用于写入窗口客户区的设备描述表句柄,而GetWindowDC返回的是整个窗口的设备描述表句柄.

MFC的消息处理过程

1、 AfxWndProc()功能:接受消息,寻找消息所属Wnd对象,找到后调用AfxCallWndProc()。

2、AfxCallWndProc()

功能:存储消息待用,然后调用WindowProc()

3、WindowProc()功能:发送消息给OnWndMsg(),对返回的未处理的消息送给Def WindowProc()按标准窗口消息处理。

4、OnWndMsg()功能:通过搜索类和派生类中的消息映像,为窗口消息寻找一个消息处理函数,方法如下:

(a) 为WM_COMMAND消息,调用OnCommand()试将消息映射到制造通知的控件,消息被反射,如不成功,就调用OnCmdMsg()

(b) 为WM_NOTIFY消息,调用OnNotify()试将消息映射到制造通知的控件,消息被反射,如不成功,就调用OnCmdMsg()

(c) 找不到处理函数,将消息返回到WindowProc(),再送交Def WindowProc()处理。

14

CView主要成员函数

GetDocument()

函数原型CDocument* GetDocument() const

作用:得到文档对象的指针,进而存取实际的数据。

CView*pActivateView()

函数原型virtual void OnActivateView(BOOL bActivate,

CView*pActivateView,CView*pDeactivateView)

作用:一个视图被激活时,调用CView*pActivateView()

OnDraw()

函数原型virtual void OnDraw(CDC* pDC)

作用:窗口有变动时,OnDraw()执行,重新绘制窗口。

OnUpdate()

函数原型virtual void OnUpdate(CView* pSender,LPATAM|Hient,CObject*pHient)

作用:与视图联系的文档发生变化时,调用该函数通知视图,文档发生改变,该函数处理的事情是对文档的变化做出反映。

OnInitialUpdate()

函数原型virtual void OnInitialUpdate()

在显示之前被应用程序框架调用,执行初始化操作。

OnPreparePriting()

15

执行打印前,调用OnPreparePriting()

CDocument类主要函数

UpdateAllViews()

函数原型virtual void UpdateAllViews(

CView* pSender,LPATAM|Hient,CObject*pHient)

作用:调用UpdateAllViews()

通知文档所有视图,文档数据发生变化。

OnNewDocument()

作用:创建一个文档。

SetModifiedFlag()

函数原型 void SetModifiedFlag(BOOL

bModified=TRUE)

用TRUE作参数时,标志文档已被修改,关闭时提醒用户保存。

CDialog主要函数

CDialog::DoModal()调用模式对话框,后返回结果

CDialog::Create()调用无模式对话框。

CWnd::DoDataExchange()实现框架数据交换

CWnd::UpdateData()初始化对话框中的数据或重新获得对话框数据并使之有效。

CWnd::GetDlgItem()获取对话框指针

CWnd::GetDlgItemText()获取对话框指定控制的文本。

16

CWnd::GetDlgItemInt()获取对话框指定控制的文章或标题并拷贝到指定位置。

CWnd::SetDlgItemText()设定一个对话框的控制标题或正文。

CWnd::SetDlgItemInt()把对话框指定控制的文本设定用一个指定的整数串表示。

CWnd::GetCheckedRadioButton()获取指定组中的当前单选项按钮的ID号。

CWnd::SendDlgItemMessage()向一个指定的对话框控制发送一条消息。

CWnd::EnableWindow()控制控件 的可操作性。

CWnd::ShowWindow()控件可视/不可视切换。

CWnd::GetWindowText()查询除列表框外的其他控件的文本。

CWnd::GetWindowTextLengh()查询除列表框外的其他控件的文本长度。

CWnd::SetWindowText()改变除列表框外的其他控件的文本内容。

CWnd::SetFont()改变控件的字体。

CWnd::MoveWindow()移动控件。

CWnd::SetWindowPos()移动控件并改变Tab顺序。

CWnd::MessageBox()创建和显示消息框。

17

CWnd::AfxMessageBox()创建和显示全程消息框

I/O流类

输入流类 包含文件

Istream 通用输入流类和其他输入流基类 isotream.h

Ifstream 输入文件类 fstream.h

Istream_withassign cin的输入类 iostream.h

Istrstreamv 输入字符串流类 strstrea.h

输出流类

Ostream 通用输出流类和其他输出流基类 isotream.h

Ofstream 输出文件类 fstream.h

ostream_withassign cout,cerr,clog的输出类 iostream.h

ostrstreamv 输出字符串流类 strstream.h

i/o流类

iostream 通用i/o流类和其他i/o流基类 iostream.h

fstream i/o文件流类 fstream.h

strstrea i/o字符串流类 strstrea.h

stdiostrea 标准i/o文件的i/o类 stdiostr.h

库函数

数学函数库:#include “math.h”

字符串函数库: #include “string.h”

18

字符函数库 #include “ctype.h”

输入/输出函数库: #include “iostream.h”

动态存储分配函数库

如:calloc(),malloc(),free(),realloc().

ANSI标准建议在stdlib.h 而许多C编译要求用malloc.h

操纵符 setiosflags(),resetiosflags()在进行输入/输出时被嵌入到输入或输出链中,用来控制输入输出的格式,而不执行输入或输出的操作,通常不带参数的操纵符在iostream.h中定义,而带参数的操纵符在iomanip.h中定义.

头文件库: #include “fstream.h”

音频格式

PCM(Pulse Code Modulation)脉冲编码调制

优点音质好,缺点体积大

WAV 符合RIFF(Resource Interchange File Format)资源交互文件格式

MP3是MPEG(Moving Picture Experts Group)Audio

Layer-3的简称

WMA(Windows Media Audio)

19

视频捕捉系统函数

capCreateCaptureWindow//创建捕获窗口并获得窗口句柄

capDriverConnect(this->m_hWndCapture,0);//连接捕获窗口与捕捉设备(设备号0到9均可)

//capGetDriverDescription 获得机器上所安装的捕捉驱动程序的名字和版本号(暂时不用该函数)

//capGetStatus 得到捕捉窗口的当前状态

//capDriverGetCaps得到连接到当前捕捉窗口的硬件的性能

//capDlgVideoSource更新和显示视频源对话框(视频源对话框用于控制视频源输入频道的选择和一些影响视频图象被数字化的帧缓冲的参数选择),预览模式将数字化帧从捕捉设备传到系统内存,然后用图形设备接口函数来把这些帧显示到捕捉窗口上.当父窗口失去焦点时,应用程序会减少预览频率,而父窗口得到焦点时,应用程序会增加预览频率.因为预览操作比较消耗CPU资源,这一操作会减少系统的整体响应时间.

//capPreview发送给捕捉窗口来使预览模式有效或无效.

20

//capPreviewRate发送给捕捉窗口来设置预览模式夏帧的显示频率.

//capPreviewScale使预览模式的缩放有效或无效

//预览和缩放同时有效时,被捕捉的视频被拉伸到捕捉窗口的大小.设置预览模式有效自动会使叠加模式失效.或用函数CapOverlay使叠加模式有效.

capSetVideoFormat(this->m_hWndCapture,&this->m_InInfo,sizeof(BITMAPINFO));//设置视频数据输出格式

capPreviewRate(this->m_hWndCapture,40);//设置预览刷新率

//capDlgVideoFormat(this->m_hWndCapture);

capPreview(this->m_hWndCapture,TRUE);//驱动预览

capOverlay(m_hWndCapture, TRUE);//驱动覆盖方式

capSetCallbackOnFrame(this->m_hWndCapture,FrameCallBack);//设置预览回调函数

21

捕捉文件和缓存

AVICap会默认把窗口的数据保存在当前驱动器根目录下的名叫的文件里面.

capFileSetCaptureFile可以指定另一个路径和文件名,但不创建文件和不为文件申请空间.

capFileSaveAs将捕捉文件保存为另一个指定的文件.

capFileAlloc为文件预分配空间.

视频缓冲

capCaptureGetSetUp得到当前需要的视频缓冲区的个数,这个数值存放在CAPTUREPARMS结构中

wNumVideoRequested成员中,可用

capCaptureSetSetUp传给捕捉窗口来改变缓冲区的大小和布置。

22