返回列表 发帖

【教学视频】《C语言也能干大事》第四节:文件对话框及嵌入资源

《C语言也能干大事》已经录制第二版,不推荐初学者学习这里的旧版,因此请到下面的地址( http://www.rupeng.com/forum/forum-52-1.html )学习第二版。

教学视频录像(在线非清晰版):





如鹏电骡(verycd)下载站:http://www.verycd.com/topics/2800166/


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

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

(2)
课上练习:打开对话框,用户选择一个音乐文件,然后用PlaySound播放。
3)打开多个文件:
增加OFN_ALLOWMULTISELECT选项后测试一下。发现如果选择一个文件后显示的还是这个文件的路径,可是如果选择多个文件显示的就只有目录的路径,怎么回事?
调试一下,看看szFile在内存中的样子。调试的是发现内存中的样子是目录的路径然后加上各个文件名,中间用“\0”分割,现在明白为啥值显示目录的路径了吗?同学们举手回答。
大家明白这一点就可以了,有兴趣的可以课后来做多文件选择的处理。做播放器的时候经常需要这个功能,也就是播放列表。有一篇文章可以参考一下:http://xxkkff.blog.51cto.com/162016/26222
2GetSaveFileName

保存文件对话框

只要把上边函数换成GetSaveFileNameOFN本来是OpenFileName的简写,它SaveFileName也跑来凑热闹,吼吼。如果需要保存文件覆盖提示怎么办呢?看看OFN有选项吗?OFN_OVERWRITEPROMPT
3、对话框程序
1)创建一个对话框程序并运行
2)先打开dlg文件然后点击主菜单的【工具】→【资源编辑器】,也可以在文件上点右键选择【打开方式】→【ResourceEditor】。
外行看热闹、内行看门道,思考一下第一个打开方式的原理,很多软件都这么搞,支持外接软件
在资源编辑器中编辑对话框界面并且拖放控件上去
3)什么叫做“对话框程序”,和以前学的“窗口程序”有什么区别吗?
“对话框程序”是一种特殊的“窗口程序”,与“窗口程序”比起来学习难度比较小,最重要的是可以使用可视化的对话框编辑器。对话框程序能够完成大部分功能,但是有小部分功能还是要用“窗口程序”,对话框程序能完成的功能是“窗口程序”的一个子集,学习“对话框程序”中的知识点可以完全应用到“窗口程序”上去。让大家快乐学习,快速做出东西,所以咱们先学习“对话框程序”的开发。
4)常用控件介绍。RichEditUDC控件要是使用的话要加代码,后面会讲。
4、嵌入式资源
1)资源的概念。
word里边插入图片有:嵌入和链接两种方式。
web里边是连接方式。<img src="http://www.jsj321.com/log.gif"/>
为什么要有资源。把图片和EXE文件放到一起,一个文件夹底下。我更喜欢的方式,只要一个EXE文件,你把用到的所有图片、歌曲音乐、动画EXE里边去。这些东西就是资源。资源和代码区分开。EXE文件两部分:代码和资源。
2)惯例:所有资源的名字都是ID开头,并且大写,ID后边一般跟着一个资源类型的大写字母,对话框DBmp图片B、图标I。接着是下划线,最后是真正的名称。
5、对话框中图片、动画资源的应用(1)BitMap:在资源中加入BITMAP类型的资源,然后拖一个IMAGE控件过来,并且修改IMAGE控件的Type属性为BitMap,并且给资源一个名字(一般以IDB_开头,并且大写,这是规范,不是必须)并且在控件的Image属性中选择刚才添加的BITMAP资源。虽然可以直接选择,但是还是建议直接把图片拷贝到工程目录下,因为。。。jpg的格式怎么转换为bmp格式的呢?用画图工具(mspaint)。(2)动画:在资源中加入AVI类型的资源,然后拖一个Animation控件过来,在AVIClip属性中选择刚才添加的AVI资源,并且给资源一个名字(一般以IDV_开头,并且大写,这是规范,不是必须)。如果需要自动播放,则修改AutoPlay属性为True。AVI动画资源非常少,但是GIF动画非常多,可以用工具将GIF转换为AVI格式。注意很多电影的格式也是AVI后缀,但是那并不是咱们这里说的AVI动画。AVI格式是一个大杂烩。GIFAVI的工具:http://www.onlinedown.net/soft/7689.htm

注意:有同学反应“程序加入动画控件以后程序就运行不起来了,可以构建,但是点击运行却没反应”,请参考下面的文章:
程序编译没错,但运行无反应?
http://www.rupeng.com/forum/thread-601-1-3.html



这个软件有一个Bug,使用的时候必须在c盘下创建一个名字为“aa”的文件夹
课下作业:自己发挥,比如给女友做一个贺卡(下节课讲教大家怎么加音乐,当然是用PlaySound函数)
6、菜单资源
制作好菜单资源后,在对话框的Menu属性中选择刚才制作好的对话框。
7、只有控件、菜单,可以点击控件、菜单以后的动作怎么做呢?就要写代码了。

同学提问:
1BMP的图片不是很大吗,这么插入资源会不会使得最后编译的程序体积很大
答:对,确实会使得文件比较大,但是一般软件里嵌入的图片都是起到装饰作用,所以东西不会太多。而且你生成的EXE文件还可以压缩。
2IDB_TEST1 BITMAP DISCARDABLE "D:/My Documents/001.BMP"
刚才讲的是链接式的还是嵌入式的啊,为什么dialogs的代码里面会有这个bmp文件的路径啊  不是嵌入进去了吗?如果这个时候我吧 001.bmp挪走还会显示吗?
答:这个路径是编译时用到的,所以在编译的时候如果把图片挪走就会编译失败。但是一旦编译成功就不需要001.bmp了。建议把所有资源都放到工程目录下,这样可以随便移动工程。

GetOpenFileName
The GetOpenFileName function creates an Open common dialog box that lets the user specify the drive, directory, and the name of a file or set of files to open.

BOOL GetOpenFileName(
  LPOPENFILENAME lpofn   // address of structure with initialization
                         // data
);

Parameters
lpofn
Pointer to an OPENFILENAME structure that contains information used to initialize the dialog box. When GetOpenFileName returns, this structure contains information about the user's file selection.
Return Values
If the user specifies a filename and clicks the OK button, the return value is nonzero. The buffer pointed to by the lpstrFile member of the OPENFILENAME structure contains the full path and filename specified by the user.

If the user cancels or closes the Open dialog box or an error occurs, the return value is zero. To get extended error information, call the CommDlgExtendedError function, which can return one of the following values:

CDERR_FINDRESFAILURE CDERR_NOHINSTANCE
CDERR_INITIALIZATION CDERR_NOHOOK
CDERR_LOCKRESFAILURE CDERR_NOTEMPLATE
CDERR_LOADRESFAILURE CDERR_STRUCTSIZE
CDERR_LOADSTRFAILURE FNERR_BUFFERTOOSMALL
CDERR_MEMALLOCFAILURE FNERR_INVALIDFILENAME
CDERR_MEMLOCKFAILURE FNERR_SUBCLASSFAILURE


Remarks
Beginning with Windows 95 and Windows NT version 4.0, the default Open dialog box provides user-interface features that are similar to the Windows Explorer. You can provide an OFNHookProc hook procedure for an Explorer-style Open dialog box. To enable the hook procedure, set the OFN_EXPLORER and OFN_ENABLEHOOK flags in the Flags member of the OPENFILENAME structure and specify the address of the hook procedure in the lpfnHook member.

Windows 95 and Windows NT continue to support the old-style Open dialog box for applications that want to maintain a user-interface consistent with the Windows 3.1 or Windows NT 3.51 user-interface. To display the old-style Open dialog box, enable an OFNHookProcOldStyle hook procedure and ensure that the OFN_EXPLORER flag is not set.

To display a dialog box that allows the user to select a directory instead of a file, call theSHBrowseForFolder function.

Windows CE: Not all members of the OPENFILENAME structure are defined in Windows CE. For information about the defined members, see the reference topic for the OPENFILENAME structure.

QuickInfo
  Windows NT: Requires version 3.1 or later.
  Windows: Requires Windows 95 or later.
  Windows CE: Requires version 1.0 or later.
  Header: Declared in commdlg.h.
  Import Library: Use comdlg32.lib.
  Unicode: Implemented as Unicode and ANSI versions on Windows NT.

TOP

为什么我的新建对话框程序出来的都是.cpp的文件,一看全部是C++的语言的,不是C语言的呢?

TOP

sorry,白天公司工作比较忙,没有及时回复你的问题。“我发现建立的文件是cpp的,不是.c的”,没事,不管它,只不过是后缀换了而已。
C++完全兼容C的语法。
看着不顺眼你手动改过来也行,无大碍

TOP

TOP

前段时间忙,现在继续课程
课程真是不错

TOP

很好啊!但是我用了datepicker和monthview后就不能运行了,编译无错,请杨老师帮忙解决。

好了,看见杨老师的帖子能够运行了,是XP的问题。

TOP

交作业

改了dialog的字体属性为雅黑,9号

想弄个背景音乐,可最终以失败告终,唉~~!

作业截图

001.JPG

dlg001.rar (53.3 KB)

源码

TOP

作业

不会加音乐,想弄个音量控制来着..
未命名.jpg

TOP

为什么我的C-Free不能运行对话框呢?

刚看了老师的视频,我和视屏的的步骤来了,但在点击构建并运行时,怎么没见有个对话框出来呢?

TOP

我下载了附件dlg001,然后用cfree运行工程文件dlg001.cfp,
打开dlg001.dlg
构建并运行运行跳出

  无法找到程序"windres.exe"
您想手动定位到这个程序吗
是    否   取消

点击  否

跳出

无法找到程序"g++.exe"
您想手动定位到这个程序吗
是    否   取消

(不会发图片,只好这样了)
不知道这是什么原因导致,该怎么解决?

TOP

resed 资源编译器 和VISTA不兼容
怎么办呀 一运行就程序终止

TOP

图片不显示的问题

在控件中插入图片的时候,按步骤操作了 但是不能正常显示,图片是.bmp格式的,再选type类型的时候,控件中显示了问好图标 但是 IMAGE选项改了  
也不显示图片。
请问一下 是什么问题?

TOP

原帖由 小马_xiao 于 2009-6-25 11:15 发表
resed 资源编译器 和VISTA不兼容
怎么办呀 一运行就程序终止


换回XP吧,用非主流软件最麻烦了。

TOP

原帖由 conce 于 2009-7-9 21:26 发表
在控件中插入图片的时候,按步骤操作了 但是不能正常显示,图片是.bmp格式的,再选type类型的时候,控件中显示了问好图标 但是 IMAGE选项改了  
也不显示图片。
请问一下 是什么问题?


把你的图片和工程上传上来。

TOP

工程

就是这个  谢了

proj10.rar (162.84 KB)

TOP

好像你的bmp并不是真正的bmp图片,好像是jpg图片改后缀改出来的“假bmp”,我用mspaint重新另存为bmp格式就可以了。

TOP

原帖由 杨中科 于 2009-7-9 22:38 发表
好像你的bmp并不是真正的bmp图片,好像是jpg图片改后缀改出来的“假bmp”,我用mspaint重新另存为bmp格式就可以了。


o 我试试  我直接从网上下载的

TOP

是的 改了图片格式就可以了
但是 编译链接都不报错
为什么没有 运行结果

TOP

问题已解决  就是差个 库文件  手动加载 就好了

TOP

我也一直碰到这个问题…………试试看!

TOP

作业截图:
heka.gif

pro004.rar (411.98 KB)

TOP

我用转换软件转换的AVI怎么重影啊。。。。效果太差了。。。

TOP

请问如何把资源编缉器放到C-Frcc的工具栏上去呢,老大视频课程上说有写介绍的文章!
找来找去还是没有找到!

TOP

原帖由 wujiandong20 于 2009-7-19 08:35 发表
请问如何把资源编缉器放到C-Frcc的工具栏上去呢,老大视频课程上说有写介绍的文章!
找来找去还是没有找到!


用如鹏版C-Free就省得配了。http://www.rupeng.com/forum/thread-2487-1-1.html
如果你愿意自己配的话参考这篇文章:http://www.rupeng.com/forum/thread-275-1-1.html

TOP

恩 老师 楼上说的对  那个转换的效果很差  呵呵
坚持就是胜利~~~~~

TOP

那个资源管理器怎么配置呀?我的那个c-free4.1里没有呀?

TOP

原帖由 yangyiwing 于 2009-7-26 19:50 发表
那个资源管理器怎么配置呀?我的那个c-free4.1里没有呀?


用如鹏版C-Free就省得配了。http://www.rupeng.com/forum/thread-2487-1-1.html
如果你愿意自己配的话参考这篇文章:http://www.rupeng.com/forum/thread-275-1-1.html

TOP

请问杨老师,怎么用C-FREE外连接支持外接软件ResEd,为什么我可以用C-FREE打开ResEd,但是在ResEd中设计的对话框在C-FREE中运行却没有变化呢?
应该怎么设置啊?

TOP

原帖由 ab2947075 于 2009-7-28 14:27 发表
请问杨老师,怎么用C-FREE外连接支持外接软件ResEd,为什么我可以用C-FREE打开ResEd,但是在ResEd中设计的对话框在C-FREE中运行却没有变化呢?
应该怎么设置啊?

http://www.rupeng.com/forum/thread-3105-1-1.html

TOP

返回列表