回 帖 发 新 帖 刷新版面

主题:MFC学习进阶06

   这一次我们主要的任务是“创建和管理运用程序资源”,前面我们已经初步了解了一下资源,用自己的话来描述就是,凡是运用程序要用到数据就叫资源。我们还初步了解了怎么把资源嵌入程序框架中,还记不记得有Skeleton.rc和Resource.h这两个文件。

   我们下面的任务是:
1。了解资源的类型(我想用的地方不一样,类型就不同吧!估计不同类型的资源数据
类型不同才这样分的)
2。如何创建资源脚本。(资源脚本难道就是包含资源数据的文件,那么Skeleton.rc也是哟??)
3。如何使用资源。(这当然是我们最关心的)

书上先介绍了资源的任务,看看资源是干吗的?

我曾听到过这样的一句话“程序就是数据和算法”。书上说这个数据包括两个部分,一个是程序启动后,传递给运用程序的(是我们看得最明显的); 另一部分是在创建运用程序的过程当中,用来构建图形用户界面的,如菜单,图标等等。(也是哈,按照时间的先后分)这个另一部分就是指的资源了。

资源是被链入运用程序当中的,但我们有时候看不见资源,只有一个exe文件,这是因为资源已经被链入可执行文件中去了,也就是说,资源被编译为二进制文件,像源文件一样被链接为可执行文件.有时候是编译到DLL中了.

资源是怎么被编译的呢?其过程如下:
资源(RC,BMP,JCO)------资源编译器-------编译过的资源文件(.RES)-----------链入运用程序中
     注意:.RC的文件是资源脚本文件,所有的资源都是在其中定义,资源也支持预编译,如:#DEFINE和#INCLUDE
在MFC实践中,是在一个叫RESOURCE.H的文件中定义资源常量.任何与资源有关的文件都引用这个文 件

有的人会奇怪,为什么一定要编译进去?原因有二.
1.如果不编译,资源文件被破坏,程序就会瘫痪.
2.编译后速度会很快

进入第二个主题:资源类型
需要提出的是:WIN32和MFC依赖的是相同的资源.
主要有:加速键,位图,光标,图标,菜单,对话框,字符串表

下面一一介绍这些资源:
1.加速键
加速键就是我们常说的快捷键,用户可以定义一个和菜单命令绑定的键来创建加速键.清单如下:
IDR_MYAPP ACCELERATIONS //ACCELERATION是加速键列表标识,不同的资源是不同的标识
BEGIN
"X", ID_EDIT_CUT, VIRTKEY,CONTROL //ID_EDIT_CUT是标准菜命令"剪切"的标识符
"C", ID_EDIT_COPY, VIRTKEY,CONTROL //"C"表示组合基本键,CONTROL表示另一个
"V", ID_EDIT_PASTE, VIRTKEY,CONTROL //VIRTKEY表示这是一个对应关系
END(这里我们要能举一反三,要了解shift要怎么表示,还有些什么命令?)

2.位图
位图最多是用来为 工具栏的按钮 存贮图像.与加速键不同的是位图是从外部文件存取.下面是一个定义位图资源的例子.
IDR_MYIMAGE BITMAP "MyImage.bmp"//用了IDR_MYIMAGE(IDR_MYIMAGE是在Resource.h 中定义的标识符) 标识资源,BITMAP标识资源是一个位图,文件名为"MyImage.bmp"

3.光标
 光标是一个简单的可替换的鼠标,其实就是一个小的位图,不同的是光标有一个热点用来标识其位 置.光标也是要一个独立的文件(.CUR)中.下面是一个光标的定义:
IDR_MYAPP CURSOR "MyApp.cur"
其含义跟位图的差不多.

4.图标
图标是用来标识最小化了的应用程序的一个小位图,其大小为所欲为32*32或16*16.图标存入一个独立文件(.ICO)中.下面是一个图标的定义:
IDR_MYAPP ICON "MyApp.ico"

5.菜单
菜单包含一系列命令,每一个菜单命令都有一个标识符与之对应,如上面我们看到的ID_EDIT_CUT等,在资源脚本中定义的菜单有时是作为菜单模板存储的.下面是一个菜单模板的例子:
IDR_MYAPP MENU//MENU表明这是个菜单资源
BEGIN
POPUP"&File" //POPUP用来标识子菜单
BEGIN
MENUITEM "&New\tCtrl+N", ID_FILE_NEW //MENTITEM标识菜单项
MENUITEM "&Open...\tCtrl+O", ID_FILE_OPEN  
MENUITEM "&Save\tCtrl+S", ID_FILE_SAVE,GRAYED //GRAYED标识菜单开始为灰色
MENUITEM "Save&As...", ID_FILE_SAVE_AX,GRAYED//GRAYED开始不能用
MENUITEM SEPARATON  //SEPARATON 表明此菜单项作为上下菜单的分界线
MENUITEM "E&xit", ID_APP_EXIT
END
POPUP"&Help"
BEGIN
MENUITEM "About MyApp...", ID_APP_ABOUT
END
END

菜单项的命名格式:
其格式为菜单名加上每一项的加速键.&用来指定在项目的哪一个字母下加下划线,也决定了与"ALT"绑定的键."\t"用于向加速文本中插入标签.菜单项属性选择可以为菜单项指定初使状态,以下是菜单的属性:
CHECKED 菜单项被选中时显示一选中标记,只对菜单项有效.
GRAYED  置不活动状态
INACTIVE 不更改菜单项内文本,使菜单项的顶端菜单为不活动状态

以上定义的菜单项其实不用再在Resource.h中定义了,因为这些都在AfxRes.h中定义过了,这个文件同Resource.h一起包含到资源脚中了.

6.对话框
对话框是比较复杂的,这里只给出一个直观的代码.
IDD_ABOUTBOX DIALOG 0,0,217,55
VAPTION "About MyApp"
STYLE DS_MODALFRAME|WS_POPUP|WS_CAPTION|WS_SYSMENU
FONT 8,"MS Sans Serif"
BEGIN
ICON IDR_MYAPP,IDC_STATIC,11,17,20,20
LTEXT "MyApp version .0",
                      IDC_STATIC,40,10,119,8,SS_NOPREFIX
LTEXT "Copyright(c) 1998 Michael Morrison",
                       IDC_STATIC,40,25,119,8
DEFPUSHBUTTON "OK",IDOK,178,7,32,14,WS_GROUP
END
我的体会是DIALOG肯定是表明这是一个对话框资源,VAPTION是用来标识对话框标题的,STYLE是用来干什么的,我猜不出来了,FONT标识字体,ICON 标识图标,后面的数字表示大小的吗?LTEXT表示左对齐的显示文本,DEFPUSHBUTTON标识确定按钮,以上是我的看法.错误的请提出来.

7.字符串表
字符串表我们在前面介绍过,它主要用来让字符串与应用程序分离.具体的请看上一次的.写一个简单的吧:
STRINGTABLE
BEGIN
AFX_IDS_APP_TITLE "MyApp"
END
这次就到这儿了,现在我会少量多次.好,拜!





回复列表 (共238个回复)

181 楼

试题8 我军特工探知了敌军的信息加密方式,但尚未获得密钥。已知敌军所有的信息都是码值在1-
127之内的ASCII字符。敌军以5个字符为单位加密信息。设p0p1p2p3p4是5个待加密的字符,敌军
将这5个字符与另外9个密钥k0,?k8混合起来产生对应的5个整数型密文e0,?e4。已知这9个密
钥也是码值在1-127间的ASCII字符。其混合原则如下:
 [img]f:\3.bmp[/img]
我军特工以生命为代价换来了一小串明文和对应的密文。你的任务是找到密钥,并破解另一组被我军
截获的敌军密文。
输入:第一行是一串大于10个字符的明文。第二行是明文中前5个字符对应的密文,分别是用空格分
开的5个整数;第三行是明文中第6个到第10个字符对应的密文,分别是用空格分开的5个整数。然
后是一个空行。后续的每一行都是用空格分开的5个整数,代表需要你破解的5个密文字符。
输出:按顺序给出输入文件中需要你破解的密文对应的明文。
备注:已知10个明文字符和对应的密文就足以找到密钥。
示例
输入:
John Q. Crackjack
30096 28880 32662 34217 36518
22426 23187 28934 27877 29942
34391 35683 39956 40657 45237
33044 30700 34923 37133 38330
37200 37645 43055 43698 47491
32574 30389 35225 36978 38050
输出:
Squeamish ossifrage.

182 楼

编程爱好者群:34214559

183 楼

说得好啊,不提问,不回答那么来的探讨啊,那么的进步呢

184 楼

不问不答那来的探讨

185 楼

ding

186 楼

顶!!!

187 楼

非常好

188 楼

进阶的一个捷径,
http://www.msup.com.cn/edm/c/c.html

189 楼

看来楼主很喜欢VC++了,我其实也很喜欢,只是还是初学,只懂一点点!我想请问一个问题.
我想做一个学生管理系统,但不知道从何着手!想请教一下!谢谢了!

190 楼

我没看懂,555555555555555555————

我来回复

您尚未登录,请登录后再回复。点此登录或注册