C语言也能干大事板书(六)

本文介绍了使用C语言进行文件操作,包括结构体的初始化、使用ZeroMemory宏来清零结构体字段,以及如何打开文件对话框。讲解了GetOpenFileName函数的用法,包括文件类型过滤器和处理多文件选择。还提到了GetSaveFileName函数用于保存文件,并建议读者通过练习实现记事本和音乐播放器功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作业点评文件操作。自己动手写记事本。

RichEdit控件。LoadLibrary( "riched32.dll" );
参考资料:http://msdn.microsoft.com/en-us/library/bb787605(VS.85).aspx

5、给结构体所有字段置零

复习一下C语言中memset以及结构体的应用。C语言中声明一个结构体变量之后,在使用这个变量之前要首先用memset来把各个位清零。使用C语言内置的函数memset来完成:

memset(&s1,sizeof(s1),0);

在这里我们使用ZeroMemory“函数”,ZeroMemory其实并不是函数,其实是memset的宏定义

ZeroMemory其实就是memset,纸老虎而已,不是一个全新的函数。

6、打开文件对话框的使用

首先#include <commdlg.h>


OPENFILENAME ofn;


char szFile[MAX_PATH];


ZeroMemory(&ofn,sizeof(ofn));


ofn.lStructSize = sizeof(ofn);


ofn.lpstrFile = szFile;


ofn.lpstrFile[0] = TEXT('\0');


ofn.nMaxFile = sizeof(szFile);


ofn.lpstrFilter = TEXT("ALL\0*.*\0Text\0*.TXT\0");


ofn.nFilterIndex = 1;


ofn.lpstrFileTitle = NULL;


ofn.nMaxFileTitle = 0;


ofn.lpstrInitialDir = NULL;

ofn.hwndOwner = hwnd;//自学能力、探索能力、猜测能力


ofn.Flags = OFN_EXPLORER |OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;


if (GetOpenFileName(&ofn))


{


MessageBox(NULL,szFile,"",MB_OK);


}

               参数太多只能搞Struct。下面将对这段代码作解释:

1)、ZeroMemory的含义见上边

2char szFile[MAX_PATH];//定义一个长度为MAX_PATHchar数组。

MAX_PATH是系统定义的一个宏,260Windows操作系统文件路径的最大长度。

3ofn.lpstrFile = szFile;
//szFile是一个字符数组,那么szFile这个名字就代表这个字符数组的首地址

4)文件类型过滤器

*.*就表示所有文件

*.txt就表示所有文本文件

abc*.*就表示所有以abc开头的文件

abc*.txt就表示所有以abc开头的文本文件(txt

ofn.lpstrFilter = TEXT("ALL\0*.*\0Text\0*.TXT\0");用“\0”分割出几个段,每两段是一组过滤器,每组的第一个段代表过滤器的显示的值,而第二段表示真正的过滤器

5ofn.nFilterIndex = 2;默认选择第几个过滤器,是1开始的,不是0.这也是试验出来的。

6windows的一个惯例:结构体的指针类型别名一般是LP+结构体的名字

GetOpenFileName(&ofn)而不是GetOpenFileName(ofn),因为GetOpenFileName函数要的是OPENFILENAME的指针

7)用户关闭对话框,GetOpenFileName函数返回,返回值是BOOL,等于TRUE表示用户选择了文件,如果等于FALSE就表示用户选择了【取消】按钮

第三节

1GetOpenFileName

希望同学们不要只记我教的结果,而是要跟着我的思路进行思考,看解决问题的方式。否则就又变成“我教同学们学”的填鸭式教育了。


(2)课上练习:打开对话框,用户选择一个音乐文件,然后用MCIsendString播放,注意ShortPath的问题。如何让音乐文件跟着文件走,GetModuleFileNameGetCurrentDirectory

3)打开多个文件:

增加OFN_ALLOWMULTISELECT选项后测试一下。发现如果选择一个文件后显示的还是这个文件的路径,可是如果选择多个文件显示的就只有目录的路径,怎么回事?

调试一下,看看szFile在内存中的样子。调试的是发现内存中的样子是目录的路径然后加上各个文件名,中间用“\0”分割,现在明白为啥值显示目录的路径了吗?

大家明白这一点就可以了,有兴趣的可以课后来做多文件选择的处理。做播放器的时候经常需要这个功能,也就是播放列表。有一篇文章可以参考一下:http://xxkkff.blog.51cto.com/162016/26222 

2GetSaveFileName


保存文件对话框


只要把上边函数换成GetSaveFileNameOFN本来是OpenFileName的简写,它SaveFileName也跑来凑热闹,吼吼。如果需要保存文件覆盖提示怎么办呢?看看OFN有选项吗?OFN_OVERWRITEPROMPT

Mcisendstring播放音乐,配合GetOpenFileName实现播放器

GetShortPathName

mciSendString(“play ***”,"",0,NULL);

Mcisendstring更多用法(暂停、继续、录音、播放进度控制)参考

http://baike.baidu.com/view/1622810.htm?fr=ala0_1

http://msdn.microsoft.com/en-us/library/dd743572(VS.85).aspx

作业:提供打开、保存功能的记事本

作业:自己动手写播放器 http://so.rupeng.com/?keyword=C%E8%AF%AD%E8%A8%80+%E6%92%AD%E6%94%BE%E5%99%A8

更多控件用法 http://msdn.microsoft.com/en-us/library/bb773169(VS.85).aspx

VC就是全部、VC不是唯一:C-FreePelles CDev C++CodeBlocksC-Free使用演示(VistaWin7上资源编辑器可能有问题)。

学完第七节就可以开始从第一版11节开始继续学习了、第12节也是旧版的,不用看。第1110节中还有一些在第二版中没有讲的东西,有兴趣的可以去粗略的过一遍,当然不学第一版也能继续向后学。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值