C语言也能干大事第四节

来源:互联网 发布:chm 软件 编辑:程序博客网 时间:2024/06/05 01:51

注意:

有同学反应添加控件以后程序编译没报错,但是运行没有反应,请看此贴:《【常见问题】程序编译不报错,为什么点击运行无反应? 》http://www.rupeng.com/forum/thread-601-1-3.html

解决方法:

WinMain一开始加入LoadLibrary(TEXT("Comctl32.dll"));

以后讲“动态链接库”的时候会解释原因,现在可以认为“Comctl32.dll”是包含编辑框、IP地址、日历等控件的一个库文件,程序要使用这些控件就要先引用“Comctl32.dll”,一般程序启动时会自动引用“Comctl32.dll”,但是有的版本的windows不知怎么的不会自动引用,所以LoadLibrary(TEXT("Comctl32.dll"));就是在程序启动的时候手动引用。

 

一、      上节回顾

1.       GetOpenFileName

(1)       

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

 

(2)      课上练习

打开对话框,用户选择一个音乐文件,然后用PlaySound播放。

 

(3)      打开多个文件

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

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

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

 

2.       GetSaveFileName

保存文件对话框:

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

 

二、      对话框程序

1.       创建对话框

A.        创建一个对话框程序并运行;

B.        先打开dlg文件然后点击主菜单的【工具】【资源编辑器】,也可以在文件上点右键选择【打开方式】ResourceEditor】。

外行看热闹、内行看门道!思考一下第一个打开方式的原理,很多软件都这么搞,支持外接软件。在资源编辑器中编辑对话框界面并且拖放控件上去。

2.       什么叫做对话框程序,和以前学的窗口程序有什么区别吗?

对话框程序是一种特殊的窗口程序,与窗口程序比起来学习难度比较小。最重要的是可以使用可视化的对话框编辑器。对话框程序能够完成大部分功能,但是有小部分功能还是要用窗口程序。对话框程序能完成的功能是窗口程序的一个子集。学习对话框程序中的知识点可以完全应用到窗口程序上去。让大家快乐学习,快速做出东西,所以咱们先学习对话框程序的开发。

常用控件介绍。RichEditUDC控件要是使用的话要加代码,后面会讲。

3.       嵌入式资源

(1)      资源的概念

word里边插入图片有:嵌入和链接两种方式。

web里边是连接方式:<img src="http://www.jsj321.com/log.gif"/>

为什么要有资源?把图片和EXE文件放到一起,一个文件夹底下。我更喜欢的方式是,只要一个EXE文件,你把用到的所有图片、歌曲音乐、动画EXE里边去。这些东西就是资源,资源和代码区分开。EXE文件两部分:代码和资源。

(2)      惯例

所有资源的名字都是ID开头,并且大写,ID后边一般跟着一个资源类型的大写字母,对话框DBmp图片B、图标I。接着是下划线,最后是真正的名称。

4.       对话框中图片、动画资源的应用

(1)      BitMap

在资源中加入BITMAP类型的资源,然后拖一个IMAGE控件过来,并且修改IMAGE控件的Type属性为BitMap。给资源一个名字(一般以IDB_开头,并且大写,这是规范,不是必须)并且在控件的Image属性中选择刚才添加的BITMAP资源。虽然可以直接选择,但是还是建议直接把图片拷贝到工程目录下,因为。。。

jpg的格式怎么转换为bmp格式的呢?用画图工具(mspaint)。

 

(2)      动画:

在资源中加入AVI类型的资源,然后拖一个Animation控件过来,在AVIClip属性中选择刚才添加的AVI资源,并且给资源一个名字(一般以IDV_开头,并且大写,这是规范,不是必须)。如果需要自动播放,则修改AutoPlay属性为TrueAVI动画资源非常少,但是GIF动画非常多,可以用工具将GIF转换为AVI格式。注意很多电影的格式也是AVI后缀,但是那并不是咱们这里说的AVI动画。AVI格式是一个大杂烩。GIFAVI的工具:http://www.onlinedown.net/soft/7689.htm

 

(3)      课下作业

自己发挥,比如给女友做一个贺卡(下节课讲教大家怎么加音乐,当然是用PlaySound函数)

 

(4)      菜单资源

制作好菜单资源后,在对话框的Menu属性中选择刚才制作好的对话框。

 

7、只有控件、菜单,可以点击控件、菜单以后的动作怎么做呢?就要写代码了。

 

5.       同学提问

(1)      BMP的图片不是很大吗,这么插入资源会不会使得最后编译的程序体积很大

答:对,确实会使得文件比较大,但是一般软件里嵌入的图片都是起到装饰作用,所以东西不会太多。而且你生成的EXE文件还可以压缩。

 

(2)      IDB_TEST1 BITMAP DISCARDABLE "D:/My Documents/001.BMP"

刚才讲的是链接式的还是嵌入式的啊,为什么dialogs的代码里面会有这个bmp文件的路径啊  不是嵌入进去了吗?如果这个时候我吧 001.bmp挪走还会显示吗?

答:这个路径是编译时用到的,所以在编译的时候如果把图片挪走就会编译失败。但是一旦编译成功就不需要001.bmp了。建议把所有资源都放到工程目录下,这样可以随便移动工程。

原创粉丝点击