硬汉嵌入式论坛

 找回密码
 立即注册
查看: 7271|回复: 52
收起左侧

R1:Road of VC++

[复制链接]

14

主题

207

回帖

254

积分

高级会员

积分
254
发表于 2016-10-10 12:05:11 | 显示全部楼层 |阅读模式
写在前面:
      一直想好好学习一种上位机,苦于时间上的不充裕和意志上的不坚定,时断时续,进阶龟速,常有今天学一点,又把昨天的忘了,故借此地整理琐碎自认为有价值内容。
      之所以在本论坛整理,原因也能说上几个:其一,近段时间计划学习安富莱资料,逛论坛频率会增加,在此开帖,便于更新;其二,在另外论坛挖了几个坑,没填上,不好意思在开挖了;其三,论坛说起来人气不够高(虽然有问必答,回复态度极佳),而这种些许安静别有一番乐趣,我还是一个喜欢安静的人啊。
      接触的少,仅就当前了解,安福莱代码的风格、编程思想、务实作风着实令我钦佩!

目录
B1-----Visual C++ 6.0完全自学手册
回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
 楼主| 发表于 2016-10-10 12:06:01 | 显示全部楼层
B1知识框架一览表     
      本书对Visual C++ 6.0的使用与开发进行了全面的介绍。首先介绍了Visual C++ 6.0的集成开发环境,C++语言的基本语法以及面向对象的程序设计,然后介绍了使用MFC类库开发Windows应用程序的方法,覆盖了从使用AppWizard、ClassWizard到用户界面的创建,对话框、控件的实现等内容;接着介绍了数据库编程技术,包括ODBC、ADO等内容;最后设计Visual C++ 6.0的高级编程,包括动态链接库、多媒体、多线程、网络通信、ActiveX控件、注册表、外壳扩展及联机帮助等内容。


C1:Visual C++入门
      本章是Visual C++ 6.0的入门知识,主要介绍了Visual C++ 6.0的发展过程与开发环境。
C2:Visual C++语言
      本章着重介绍了Visual C++最常用的语言语法。
C3:窗口与对话框
      对Visual C++ 6.0提供的人机交互功能--窗口、对话框进行说明介绍。
C4:控件
      对Visual C++ 6.0提供的人机交互的另一个重要组成部分--控件进行介绍。
C5:菜单、工具栏与状态栏
      对菜单、工具栏和状态栏等用户资源进行介绍。
C6:消息
      应用程序的绝大部分工作是进行消息处理,而使用Visual C++进行应用程序开发时,除了用户界面的定制之外,其他大部分工作就是编写各种消息处理函数。
      对Windows环境中的消息及消息机制、消息相应处理等内容进行介绍。
C7:文本、图形与打印
      介绍与应用程序窗口相关的文本处理、图形显示、打印与打印预览等内容。掌握如何在应用程序窗口中输出文本和绘制图形。
C8:文件操作
      数据的访问会涉及到文件的操作,介绍Visual C++ 6.0的基本文件操作,以及CArchive类与CFile类。
C9:数据库访问概述
      介绍数据库的基础知识、关系数据库的基础知识、数据库的SQL语言,以及Visual C++ 6.0的数据库访问技术、Access数据库的使用方法。
C10:ODBC编程
      介绍使用ODBC技术进行数据库编程的方法,主要包括ODBC基础、ODBC API编程和MFC ODBC编程。
C11AO编程
      介绍使用DAO技术进行数据库应用程序开发。
C12:OLE DB编程
      介绍一种较新的、高性能、基于COM数据库技术,主要讲述OLE DB的层次结构、对象及实现接口、OLE DB API和MFC OLE DB类及OLE DB模版的内容。
C13:ADO编程
      为了简化对OLE DB的操作,微软提供了ADO,实现了对OLE DB的封装。介绍ADO的基础知识和两种开发ADO应用程序的方法。
C14:动态链接库
      动态链接库是运行时才进行链接并能够共享的函数库。介绍动态链接库的相关知识,并详细介绍在Visual C++ 6.0下动态链接库的开发、调试和使用方法。
C15:多媒体编程
      介绍多媒体的主要类型及其基本知识,介绍Visual C++ 6.0实现多媒体功能的开发方法。
C16:多线程编程
      Windows是多任务操作系统,而线程为多任务编程提供了更广阔的空间,通过多任务与多线程技术,用户能够在同一时间执行多个应用程序,而每个应用程序在同一时刻又可以执行多个线程。
C17:网络通信
      介绍Windows网络编程基础,并对Windows Sockets网络通信应用程序设计进行详细的讲解。
C18:Active控件
      Active控件是OLE和OCXInternet上的扩展,支持广泛的OLE功能,可自行定义以满足多种软件的需要。介绍ActiveX控件的相关概念,并详细说明在Visual C++ 6.0中进行ActiveX控件开发的方法。
C19:注册表、外壳扩展与帮助
      介绍注册表访问、为Windows资源浏览器添加特殊功能的外壳扩展及为用户提供的帮助。
【2016-10-11 20:39:28 】
回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
 楼主| 发表于 2016-10-10 12:06:26 | 显示全部楼层
1.jpg

2.jpg
3.jpg


【注】编辑过程中出现了错误,所以改为在DOC中编辑,最后上传图片,保证更新成功率。
回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
 楼主| 发表于 2016-10-10 12:06:51 | 显示全部楼层
1.jpg
2.jpg
3.jpg
4.jpg
5.jpg



【PS】昨天晚上上传后发现有一张图片顺序不对,打算调整,结果陷入编辑--登陆界面--编辑--登陆界面的循环,可能和笔记本设置有关吧,还好今天能够在公司更改过来,强迫症。2016-10-14 08:41:32
回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
 楼主| 发表于 2016-10-10 12:08:20 | 显示全部楼层
1.jpg

2.jpg

3.jpg

4.jpg

5.jpg

6.jpg

7.jpg

【2016-10-16 13:48:29】
回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
 楼主| 发表于 2016-10-10 12:09:49 | 显示全部楼层
C4:控件
1.在应用程序中,使用控件主要的目的是为了向用户提供信息或者获取用户的输入信息。
2.标准空间列表
01.jpg
02.jpg
3.创建控件
利用对话框模板编辑器
打开控件工具栏,选中所需控件,将其拖动到对话框模板上,或者在对话框模板上单击。
使用时,只需要构造对话框实例对象,然后调用该对象的Create或者DoModual成员函数即可,系统将会自动创建相应的控件,并将其放置到对话框窗口中。
手动添加控件
首先是在框架类或对话框类中构造一个控件对象,然后调用该控件的类的Create函数完成创建。
如果将控件对象添加到窗口类中,则应该在该框架窗口的OnCreate成员函数中调用控件的Create函数,而如果用户将控件对象添加到对话框类中,则应该在该对话框类的OnInitDialog成员函数中调用控件的Create函数。
4.添加控件历程P86
5.标签、文本框和按钮
标签(Static Text),一般用于显示信息,且信息不会改变,如果需要显示动态信息,则需要修改其ID默认值。
文本框(Edit Box),一般用于接收输入的字符。
按钮(Button),一般用于执行某项时间过程,如处理文本框内容、退出应用程序等。
综合例程P88
改变标签的颜色例程P89
限制文本框中的字符输入P90
图标按钮与位图按钮P92
6.选项组、复选框和单选按钮
选项组(Group Box),一般用于说明和修饰,通常包含一些复选框或单选按钮的组合。
复选框(Check Box),一般可以用一个布尔变量来表示。
单选按钮(Radio Button),一般表示互斥的选择,通常需要多个控件组合使用。
综合例程P94
7.列表、列表框和下拉列表框
列表框(List Box),以列表的形式显示数据。
列表控件(List Control),与列表框类似,用于显示一些数据信息或分散的对象。
有四种风格显示视图:Icon(图标)、Small Icon(小图标)List(列表)Report(报告)
下拉列表框(Combo Box),提供了快速选项,方便与用户进行交互。
综合例程P96
删除列表中的多条记录P99
列表框添加位图背景P100
8.树控件
树控件(Tree Control),用于显示具有一定层次结构的数据。
综合例程P102
构建系统目录树P104
9.选项卡控件
选项卡控件(Tab Control),一般用于在一个窗口中,由一组标签来控制多组信息的显示,实现与用户的交互。
综合例程及分析P106
10.微调按钮、滑块和进度条
微调按钮(Spin),一般用于在一定范围内改变数值,通常与文本框控件联合使用。
滑块(Slider),一般用于让用户选择一个离散数据或一个连续的数值区间。
进度条(Progress),一般用于显示各种操作的工作进度情况。
综合例程P109
2016-10-17 23:04:29
回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
 楼主| 发表于 2016-10-10 12:10:37 | 显示全部楼层
C5:菜单、工具栏与状态栏
一、菜单
1.菜单是图形界面的重要特征之一,是用户与应用程序交互最常见操作,菜单可实现应用程序提供的所有功能。
2.菜单可分为两种:
①普通菜单,通常位于应用程序窗口的标题栏下,实现应用程序的总体功能控制;
②浮动菜单,具有当单击鼠标右键时在单击位置弹出的一组菜单命令。
3.菜单组成元素:主菜单、菜单命令图标、菜单命令、快捷键、级联菜单命令、分隔符、带有“...”符号。
4.菜单的一般实现过程:
①定制菜单资源模板:使用Visual C++提供的菜单模板编辑器,定制所需的菜单资源。
②将菜单资源载入应用程序:通常由应用程序自动完成。
③添加菜单命令的消息相应函数:为菜单命令添加消息相应函数,实现菜单功能。
普通菜单实现过程P113
5.浮动菜单(右键弹出菜单)的实现过程:
①定制浮动菜单模板:使用菜单模板编辑器定制,与普通菜单的定制相同。
②在适当的位置添加载入并显示菜单:需要手动添加相应的代码,实现菜单资源的载入与显示。
③添加菜单命令的消息相应函数:与普通菜单的添加方法相同。
创建例程并定制浮动菜单P119
6.通常,菜单命令都是文本内容,并且样式也十分普通,而Visual C++的MFC类库提供了CMenu类,能够方便的修改菜单项,制作出图形化的菜单。
菜单图形化例程P122
二、工具栏
1.工具栏为用户提供了实现快捷操作的常用功能按钮,与主菜单的菜单命令存在对应关系。
2.工具栏由一系列的按钮和分隔符组成,通过CToolBar类实现,父类为CControlBar。
3.工具栏的所有按钮图形均以位图形式保存在ToolBar资源中,要将工具栏按钮与主菜单命令关联在一起,只需将工具栏上的按钮ID属性与菜单命令的ID属性设置为一致即可。
4.工具栏实现例程P124
为工具栏添加控件例程P126
为工具栏添加下拉箭头按钮P128
三、状态栏
1.状态栏一般位于应用程序的最下面,可以为用户动态的显示提示信息。通常使用应用程序向导自动创建的工程中,都会添加状态栏。
2.状态栏的子窗口可以分为两类:
①状态信息行:用于显示提示信息字符串,一般在状态栏最左边;
②状态行指示器:用于显示一些状态信息,一般排列在状态栏的右边。
3.状态栏的实现P130
【2016-10-18 21:51:21】
回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
 楼主| 发表于 2016-10-10 12:12:00 | 显示全部楼层
C6:消息
1.所有的消息都是通过消息名称来访问的,消息名称定义如下:
#define  消息名称  整型标识
用户可自定义消息名称,并利用自定义的消息来发送通知或传递数据。
2.在执行必要的初始化之后,就进入消息循环,直到应用程序被终止。
消息循环就是应用程序依次查询消息队列中的每一条消息,对其进行解释、分析、处理的过程。
操作系统会维护一个或多个消息队列,所有产生的消息都会被放入或者插入其中,操作系统会在队列中取出每一条消息,根据消息的接收窗口句柄,将该消息发送给拥有该句柄的应用程序的消息循环,并将控制权交给应用程序。
3.消息类型
①标准消息:以WM_为前缀的消息(除了WM_COMMAND),如窗口创建(WM_CREATE)、窗口关闭(WM_CLOSE)、窗口移动(WM_MOVE)、鼠标和键盘的操作等消息;
②命令消息:以WM_COMMAND为消息名称,在消息中包含有命令的标识符ID,用于区分具体命令的来源是菜单、工具栏还是快捷键等;
③通知消息:以WM_COMMAND为消息名称,是Windows窗口的控件或子窗口发送给父窗口的通知消息,在消息中包含有控件通知代码,用以区分具体的控件通知消息。
4.Windows将每个事件都封装成一个称为消息的结构体MSG中,并将其传递给应用程序。
typedef struct tagMSG{
HWND hwnd;     //接收消息的窗口句柄
UINT message;      //消息标识符
WPARAM wParam;     //消息参数
LPARAM lParam;     //消息参数
DWORD time;     //指定消息发送的时间
POINT pt;     //指定光标位置
}MSG;


5.在MFC应用程序中对消息的相应处理采用的是消息映射机制,也就是消息与其处理函数的一一对应关系的解析机制。
消息映射的实现包括
①在类的定义中添加一行宏调用
class XXApp : public CWinApp
{
//...
DECLARE_MESSAGE_MAP();     //宏调用
}
②在类的实现中添加消息映射
应用程序向导自动生成了消息映射
BEGIN_MESSAGE_MAP(XXXApp,CWinApp);     //消息映射表开始
    ON_COMMAND(ID_APP_ABOUT, OnAppAbout);     //消息映射入口项
    //基于文件的标准文档命令
    ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)
    ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)
    //标准文档设置命令
    ON_COMMAND(ID_FILE_PRINT, CWinApp::OnFilePrintSetup)
END_MESSAGE_MAP()     //消息映射表结束
6.消息响应函数
①在类的定义中添加该消息响应函数的函数声明,需要以afx_msg关键字开头
afx_msg void OnAppAbout();
②在类的实现中添加该消息响应函数的函数体
void XXXApp::OnAppAbout()
{
//...
}


7.添加消息响应函数的方法:
①使用MFC ClassWizard添加--P136
②在ClassView选项卡中添加--P137
③在类的头文件和实现文件中手动添加--P138


8.标准消息
①键盘消息--P139
②鼠标消息--P140
③窗口消息--P141
④定时消息--P143
9.命令消息
当用户选择一个菜单命令,单击一个工具栏按钮,或者按下一些快捷键时,就会产生相应的命令消息WM_COMMAND,每个菜单命令、工具栏按钮或快捷键都有一个标识符ID,消息响应函数就是通过这些标识符来确定要处理的命令消息。
①命令消息映射的一般形式     ON_COMMAND(ID_XXX, OnXXX)
其中,ID_XXX为该命令消息响应函数对应的菜单、工具栏按钮或快捷键标识ID,而OnXXX就是消息响应函数,其名称一般与对应标识相同。
②一个常用命令消息映射     ON_COMMAND_UPDATE_UI,用于将一个特定的更新命令消息映射到类的成员函数,如使菜单无效命令、禁止工具栏按钮等。
更新用户接口状态消息响应函数用法--P144
10.通知消息
当用户单击一个按钮、在文本中输入一些字符或是选择下拉列表框中的项目时,就会产生相应的控件通知消息WM_COMMAND,每个按钮、文本框等控件都有一个标识符ID。
控件通知消息映射形式
ON_XXX(ID_YYY, OnXxxxYyy);
其中,ON_XXX为控件的消息映射宏名,ID_YYY为该控件的标识符,而OnXxxYyy就是控件通知消息响应函数,其名称一般是对应的消息映射宏名与标识符的组合。
11.自定义消息
自定义消息基本步骤
①定义消息
#define WM_CUSTOMMSG (WM_USER + 100)
其中,WM_CUSTOMMSG是自定义的消息标识,需从WM_USER+10开始,以免与系统定义的其他消息冲突。
②声明消息响应函数,在类的定义中声明,如
class CMainFrame:public CMDIFrameWnd
{
     //...
    afx_msg LONG OnCustommsg(WPARAM wParam, LPARAM lParam);
}
③实现消息响应函数,如
LONG CMainFram::OnCustommsg(WPARAM wParam, LPARAM lParam)
{
     //.....
    return 0;
}
④添加消息映射,如
BEGIN_MESSAGE_MAP(CMainFram, CMDIFrameWnd)
    ON_MESSAGE(WM_CUSTOMMSG, OnCustommsg)
END_MESSAGE_MAP()
【注】如果用户需要定义一个整个系统中唯一的消息,可以调用RegisterWindowMessage函数定义消息
static UINT WM_CUSTOMMSG = RegisterWindowMessage("User");
并可使用ON_REGISTERED_MESSAGE宏指令替代ON_MESSAGE,其他同上。

消息传递
操作系统将消息传递给应用程序方式:
①POST(邮寄)方式,使用PostMessage函数,不等待该消息处理完毕就返回
②SEND(发送)方式,使用SendMessage函数,必须等待该消息处理完毕后才能返回
一般形式
LONG result =  SendMessage(m_hWnd, WM_CUSTOMMSG, 0, 0);
自定义消息例程--P147
【2016-10-19 21:57:04】
回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
 楼主| 发表于 2016-10-10 12:12:38 | 显示全部楼层
C7:文本、图形与打印
1.图形用户界面(Graphical User Interface, GUI)
图形设备接口(Graphical Device Interface, GDI)与设备驱动程序实现了设备无关性的图形,即显示硬件与应用程序的分离。
2.设备环境(Device Context, DC),也叫设备上下文,或者设备描述表,实际上就是一种数据结构,实现了设备无关性。
3.MFC类库提供了设备环境类CDC,封装了Windows的DC,父类是CObject。MFC还提供了几个CDC派生类CClientDC、CPaintDC、CMetafileDC、CWindowDC.
4.CDC类对象使用方式
①在视图类OnDraw成员函数中使用
②在视图串口以外的窗口使用
③在OnDraw与OnPaint以外的消息响应函数中使用
5.文本函数
①使用CDC类成员函数TextOut可以在指定位置显示文本
②调用CDC类成员函数DrawText可以在指定的矩形区域内显示指定格式的文本
③调用CDC类成员函数ExtTextOut可以用当前选择的字体,在指定的矩形区域内显示字符串
④调用CDC类成员函数TabbedTextOut可以在指定位置显示字符串,并用指定制表间距扩展Tab制表符
6.文本属性函数
①调用CDC类成员函数SetTextAlign可以设置文本的对齐方式,调用GetTextAlign可以获取当前文本对齐方式
②调用CDC类成员函数SetTextCharacterExtra可以设置字符间距,调用GetTextCharacterExtra可以获取当前字符间距
③调用CDC类成员函数SetBkMode可以设置文本背景模式,调用GetBkMode可以获取当前文本背景模式
④调用CDC类成员函数SetTextColor可以设置文本的颜色,调用GetTextColor可以获取当前文本的颜色
⑤调用CDC类成员函数SetBkColor可以设置文本的背景颜色,调用GetTextColor可以获取当前文本的背景颜色
⑥调用CDC类成员函数GetTextMetrics获取当前使用字体字符属性,调用GetTextExtent函数获取字符串的宽度和高度
7.字体
库存字体
①SYSTEM_FONT:系统字体
②SYSTEM_FIXED_FONT:固定系统字体
③OEM_FIXED_FONT:与OEM有关的固定字体
④ANSI_FIXED_FONT:ANSI固定系统字体
⑤ANSI_VAR_FONT:ANSI可变系统字体
⑥DEVICE_DEFAULT_FONT:与设备有关默认字体
库存字体函数
①调用CDC类成员函数SelectStockObject直接选用库存函数
②调用CFont类的成员函数CreateFont可以创建逻辑字体。自定义字体不是创建一种新的字体,而是创建一种逻辑字体,逻辑字体是一种字体属性的列表,如高度、宽度、字符集和字样等
③使用CreateFontIndirect创建字体
8.绘图函数
①点线函数
调用CDC类成员函数SetPixel可以绘制一个点,调用GetPixel可以获取点的颜色,调用GetCurrentPosition可以获取位置
调用CDC类成员函数MoveTo和LineTo可以绘制直线,MoveTo确定直线起点,LineTo在当前点与起点间画线
调用CDC类成员函数Arc和ArcTo可以绘制弧线
调用CDC类成员函数Polyline和PolylineTo可以绘制弧线
②形状函数
调用CDC类成员函数Rectangle可以绘制一个矩形,调用RoundRect可以绘制一个圆角矩形
调用CDC类成员函数Elicpse可以绘制一个椭圆
调用CDC类成员函数Pie可以绘制一个扇形
调用CDC类成员函数Polygon可以绘制一个多边形
③填充函数
FillRec函数使用指定的画刷填充一个矩形区域
FrameRect函数用于绘制矩形的边框
FillSolidRect函数用于使用指定颜色填充矩形区域
InvertRect函数在指定区域内显示当前颜色的相反色
④位图函数
PatBit函数使用光栅操作码在指定矩形区域创建一个位图模式
BitBit用于从指定设备环境中复制一个位图
StretchBit函数用于从指定设备环境中复制一个位图,并进行缩放操作,以适应目标区域
9.画笔(Pen)与画刷(Brush)
①调用CDC类成员函数SelectStockObject可方便的使用画笔和画刷
②调用CPen类成员函数CPen、CreatePen、CreatePenIndirect可以创建画笔
③调用CBrush类成员函数CBrush、CreateSolidBrush、CreateHatchBrush、CreatePatternBrush、CreateBrushIndirect等可以创建画刷
10.坐标系统
①调用CDC类成员函数SetMapMode可以指定新的映像模式,调用GetMapMode函数可以获取当前的映像模式
②MM_ANISOTROPIC和MM_ISOTROPIC映像模式允许用户自定义逻辑单位,为了控制这两个模式下的坐标系,MFC引入了视口(Viewport)和逻辑窗口(Window)。视口就是应用程序窗口的有效输出区域,用的是设备坐标;而为了在视口内能使用GDI函数,需要在其上设置逻辑窗口,调用CDC类成员函数SetViewportExt和SetViewportOrg可以设置视口,调用SetWindowExt和SetWindowOrg可以设置逻辑窗口
③在MM_ANISOTROPIC映像模式下,可以设置X轴和Y轴的长度,并且其单位长度可以不同;
在MM_ISOTROPIC映像模式下,可以设置X轴和Y轴的长度,并且其单位长度保持相同
11.打印,默认情况调用视图类OnDraw函数完成打印工作
①CPrintInfo实现打印及打印预览功能
②CPageSetupDialog实现打印页面设置
打印实现例程--P183
【2016-10-24 22:55:38】
回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
 楼主| 发表于 2016-10-10 12:13:02 | 显示全部楼层
C8:文件操作
1.Visual C++ 6.0支持以下两种文件类型
文本文件,又称为ASCII字符文件,每一个字节存放一个ASCII字符
二进制文件,内存中数据原样存放到磁盘
一个标准的Visual C++ 6.0文件是一个字节流或二进制流,这样的文件称之为流式文件。
2.文件函数
文件的打开,FILE *fopen(const char *filename, const char *mode)
文件的关闭,int fclose(FILE *stream)
文件单个字符的读写
int fputc(int c, FILE *stream)     
int fgetc(FILE *stream)
文件一组字符的读写
size_t fread(void *buffer, size_t size, size_t count, FILE *stream)     
size_t fwrite(const void *buffer, size_t size, size_t count, FILE *stream)
文件的定位
定位到文件开头void rewind(FILE * stream)
定位到任何位置int fseek(FILE *stream, long offset, int origin)
返回当前的位置long ftell(FILE *stream)
3.Visual C++ 6.0MFC提供的CFile类中封装了对文件的操作,从CFile类派生了CStdioFile类用于操作文本文件,派生了CMemFile用于操作内存文件。
文件的打开和关闭
XXX.Open(LPCTSTR lpszFileName, UINT nOpenFlag, CFileException *pError = NULL)
XXX.Close()
文件的读写
XXX.Read(void *lpBuf, UINT nCount)
XXX.Write(const void *lpBuf, UINT nCount)
文件的定位
XXX.Seek(LONG lOff, UINT nForm)
XXX.SeekToBegin()
XXX.SeekToEnd()
XXX.GetPosition()
文件的状态信息
XXX.GetStatus(CFileStatus &rStatus)
XXX.PASCAL GetStatus(LPCTSTR lpszFileName, CFileStatus &rStatus)
XXX.SetStatus(LPCTSTR lpszFileName, const CFileStatus &status)
文件的异常操作由CFileException类用于支持处理
4.串行化(Serialization)也叫序列化,是一种对对象进行文件IO操作的机制。
串行化的基本思想是,一个对象能够将状态信息存储到文件或其他存储介质中,也可读取预先存储对象的状态信息,并动态建立该对象。
MFCCObject类提供支持对串行化的操作。
自动实现串行化例程--P198
手动实现串行化例程--P200
5.MFC提供了CArchive类,实现了运算符的重载,通过与CFile类的配合,不仅实现了对简单类型如intfloat等的文件读写,还实现了对可串行化对象的文件读写。
①CArchive函数CArchive(CFile *pFile, UINT nMODE, int nBufSize=4096, void *lpBuf=NULL)
调用CArchive类成员函数IsLoading可以判断CArchive对象是否处于读状态,调用IsStoring函数可以判断CArchive对象是否处于写状态
读写操作函数
调用CArchive类成员函数ReadWrite可以读写指定字节数的缓冲区内容
调用CArchive类成员函数ReadStringWriteString可以读写字符串
调用CArchive类成员函数ReadObjectWriteObject可以执行对象的Serialize函数实现读写
调用CArchive类成员函数ReadClassWriteClass可以读写一个CRuntimeClass指明类对象
调用CArchive类成员函数SerializeClass可以根据CArchive的读写状态直接进行读写操作

应用例程--P206
6.①临时文件扩展名“.tmp”,操作方法与常规文件一样,只是其文件名是调用API函数GetTempFileName获取的
UINT GetTempFileName(LPCTSTR lpPathName, LPCTSTR lpPrefixString, UINT uUnique, LPCTSTR lpTempFileName)
文件查找函数
XXX.FindFile(LPCTSTR pstrName=NULL, DWORD dwUnused=0)
XXX.FindNextFile()
复制文件
XXX.CopyFile(LPCTSTR lpExistingFileName, LPCTSTR lpNewFileName, BOOL bFaillfExists)
创建新目录
XXX.CreateDirectory(LPCTSTR lpPathName, LPSECURITY_ATTRIBUTES lpSecurityAttributes)
删除现有文件
XXX.DeleteFile(LPCTSTR lpFileName)
对现有文件或目录重命名
XXX.MoveFile(LPCTSTR lpExistingFileName, LPCTSTR lpNewFileName)
文件删除到回收站
XXX.SHFileOperation(LPSHFILEOPSTRUCT lpFileOp)
配置文件以“*.ini”为扩展名,可称之为初始化文件(Initialization File)或概要文件(Profile),一般用来存储程序的状态信息。
格式
[SECTION]     //
KEY=VALUE  //关键字=
调用GetPrivateProfileStringGetPrivateProfileInt函数可以从INI文件中读取信息
DWORD GetPrivateProfileString(LPCTSTR lpAppName, LPCTSTR lpKeyName, LPCTSTR lpDefault, LPTSTR lpReturnedString, DWORD nSize, LPCTSTR lpFileName)
UINT GetPrivateProfileInt(LPCTSTR lpAppName, LPCTSTR lpKeyName, INT nDefault, LPCTSTR lpFileName)
调用WritePrivateProfileString函数可以将信息写入INI文件
BOOL WritePrivateProfileString(LPCTSTR lpAppName, LPCTSTR lpKeyName, LPCTSTR lpString, LPCTSTR lpFileName)
回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
 楼主| 发表于 2016-10-10 12:13:24 | 显示全部楼层
Reserve
回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
 楼主| 发表于 2016-10-10 12:13:50 | 显示全部楼层
Reserve
回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
 楼主| 发表于 2016-10-10 12:14:15 | 显示全部楼层
Reserve
回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
 楼主| 发表于 2016-10-10 12:14:39 | 显示全部楼层
Reserve
回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
 楼主| 发表于 2016-10-10 12:15:04 | 显示全部楼层
Reserve
回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
 楼主| 发表于 2016-10-10 12:15:57 | 显示全部楼层
Reserve
回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
 楼主| 发表于 2016-10-10 12:17:01 | 显示全部楼层
Reserve
回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
 楼主| 发表于 2016-10-10 12:17:25 | 显示全部楼层
Reserve
回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
 楼主| 发表于 2016-10-10 12:19:52 | 显示全部楼层
Reserve
回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
 楼主| 发表于 2016-10-10 12:20:23 | 显示全部楼层
Reserve
回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
 楼主| 发表于 2016-10-10 12:20:56 | 显示全部楼层
Reserve
回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
 楼主| 发表于 2016-10-10 12:21:36 | 显示全部楼层
Reserve
回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
 楼主| 发表于 2016-10-10 12:22:08 | 显示全部楼层
Reserve
回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
 楼主| 发表于 2016-10-10 12:23:31 | 显示全部楼层
Reserve
回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
 楼主| 发表于 2016-10-10 12:25:26 | 显示全部楼层
Reserve
回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
 楼主| 发表于 2016-10-10 12:25:52 | 显示全部楼层
Reserve
回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
 楼主| 发表于 2016-10-10 12:26:35 | 显示全部楼层
Reserve
回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
 楼主| 发表于 2016-10-10 12:27:00 | 显示全部楼层
Reserve
回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
 楼主| 发表于 2016-10-10 12:27:24 | 显示全部楼层
Reserve
回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
 楼主| 发表于 2016-10-10 12:27:48 | 显示全部楼层
Reserve
回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
 楼主| 发表于 2016-10-10 12:28:10 | 显示全部楼层
Reserve
回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
 楼主| 发表于 2016-10-10 12:29:14 | 显示全部楼层
Reserve
回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
 楼主| 发表于 2016-10-10 12:29:36 | 显示全部楼层
Reserve
回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
 楼主| 发表于 2016-10-10 12:30:02 | 显示全部楼层
Reserve
回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
 楼主| 发表于 2016-10-10 12:30:37 | 显示全部楼层
Reserve
回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
 楼主| 发表于 2016-10-10 12:32:03 | 显示全部楼层
Reserve
回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
 楼主| 发表于 2016-10-10 12:32:30 | 显示全部楼层
Reserve
回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
 楼主| 发表于 2016-10-10 12:33:20 | 显示全部楼层
Reserve
回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
 楼主| 发表于 2016-10-10 12:33:50 | 显示全部楼层
Reserve
回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
 楼主| 发表于 2016-10-10 12:34:23 | 显示全部楼层
Reserve
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-3 09:27 , Processed in 0.580270 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表