文件对话框

 板书:
1、作业点评:CALF的程序满足了所有要求,而且对do...whileswitch...caseC语言的语法用的很好,注意了很多细节问题。因此给100分。
2同学问题:怎么给程序添加图标
把一个ico图标放到工程下;使用ResEd在工程下新建一个资源文件(工程),然后点击【工程】→【资源】,添加一个ICON类型的资源,
文件名选择刚才的ico图标,然后保存这个资源文件,保证这个资源的ID为最小(一般设置为0就可以)。在C-Free里的OtherFiles中点右键,选择“添加文件到文件夹”,将rc文件加入,重新编译即可。

注意:有的同学反应添加图标以后程序还是没有图标,有可能是操作不当,有可能是工具的Bug。因此如果没有效果的话不要在这里浪费太多时间,因为这并不是关键点,不要在这浪费太多时间。

3结构体及指针(这部分内容具体请参考C语言的教材)
struct MyStruct
{

int f1;


int f2;

}//最常用的定义结构体的方式。
typedef int MYInt; //使用typedef定义类型别名
typedef MyStruct JSJ321Struct; //结构体别名的声明
typedef MyStruct *PMyStruct;//PMyStructMyStruct指针的声明。
typedef struct MyStruct
{

int f1;


int f2;

} JSJ321Struct;//MyStruct的定义和定义MyStruct的别名为JSJ321Struct结合到了一起。

typedef struct MyStruct
{

int f1;


int f2;

} *PMyStruct;//MyStruct的定义和定义MyStruct的指针别名PMyStruct的定义结合到了一起。

typedef struct MyStruct
{

int f1;


int f2;

} JSJ321Struct ,*PMyStruct;// MyStruct的定义和定义MyStruct的别名为JSJ321Struct以及定义MyStruct的指针别名PMyStruct的定义结合到了一起。
4最普通的结构体声明。
MyStruct s1;
5、给结构体所有字段置零
复习一下C语言中memset以及结构体的应用。C语言中声明一个结构体变量之后,在使用这个变量之前要首先用memset来把各个位清零。使用C语言内置的函数memset来完成:
memset(&s1,sizeof(s1),0);
在这里我们使用ZeroMemory“函数”,ZeroMemory其实并不是函数,看一下ZeroMemory的定义:
#define ZeroMemory RtlZeroMemoryZeroMemory其实编译的时候会宏展开为RtlZeroMemory
#define RtlZeroMemory(d,l) RtlFillMemory((d),(l),0)// RtlZeroMemory又是RtlFillMemory的一个宏定义,而且是带参数的宏定义。
#define RtlFillMemory(d,l,f) memset((d), (f), (l))
// RtlFillMemory
其实是memset的宏定义

ZeroMemory其实就是memset,纸老虎而已,不是一个全新的函数。
6、打开文件对话框的使用

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.Flags = OFN_EXPLORER |OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;


if (GetOpenFileName(&ofn))


{


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


}

         下面将对这段代码作解释:
1)、ZeroMemory的含义见上边
2char szFile[MAX_PATH];//定义一个长度为MAX_PATHchar数组。
MAX_PATH是系统定义的一个宏,260Windows操作系统文件路径的最大长度。
3ofn.lpstrFile = szFile;
//szFile
是一个字符数组,那么szFile这个名字就代表这个字符数组的首地址
这是一个指针的应用,把接收选择文件名的数组的地址传递到GetOpenFileName函数中。
4ofn.lpstrFile[0] = TEXT('/0');效果等价于ZeroMemory(szFile,sizeof(szFile)/sizeof(char));
5文件类型过滤器
*.*就表示所有文件
*.txt就表示所有文本文件
abc*.*就表示所有以abc开头的文件
abc*.txt就表示所有以abc开头的文本文件(txt
ofn.lpstrFilter = TEXT("ALL/0*.*/0Text/0*.TXT/0");用“/0”分割出几个段,每两段是一组过滤器,每组的第一个段代表过滤器的显示的值,而第二段表示真正的过滤器
6ofn.nFilterIndex = 2;默认选择第几个过滤器,是1开始的,不是0.这也是试验出来的。
7windows的一个惯例:结构体的指针类型别名一般是LP+结构体的名字
GetOpenFileName(&ofn)而不是GetOpenFileName(ofn),因为GetOpenFileName函数要的是OPENFILENAME的指针
8)只要用户还没关闭对话框,那么GetOpenFileName函数是停住的,同步模式的PlaySound以及getcharscanf是一样的。
用户关闭对话框,GetOpenFileName函数返回,返回值是BOOL,等于TRUE表示用户选择了文件,如果等于FALSE就表示用户选择

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值