设为首页 加入收藏

TOP

3.3.1 使用位图资源
2013-10-07 00:05:18 来源: 作者: 【 】 浏览:63
Tags:3.3.1 使用 位图 资源

3.3.1  使用位图资源

本节将先介绍一下资源文件的知识,然后重点介绍位图资源的使用。由于资源的使用方法大同小异,所以熟悉位图资源的使用就能大概了解其他资源的使用。

1.为什么要使用资源

在一个Windows应用程序.EXE文件中,除了必要的程序代码数据之外,还有各种资源文件。Windows程序预定义的资源文件类型有:

(1)图标:小位图图形。它可用做应用程序的图标,使用.ICO作为扩展名。
(2)光标:表示鼠标指针的位图。
(3)字符串:Windws允许将一个字符串表作为一种资源放到程序中,并且通过标志符来访问它们。
(4)位图:标准的位图。它可以是单色、4位、8位、16位或32位格式的像素矩阵。
(5)声音:大部分Windows程序至少都可以通过.WAV文件来使用声音。
(6)对话框:对话框在Windows中也很常用,设计者可以让对话框作为一种资源,而不是在外部装载的东西。
(7)图元文件:它们允许将一个图像操作作为一个序列记录在一个文件中,然后再回放它。

把资源文件同代码编译在一起是一个非常好的想法:(1)同时含有代码和资源数据的.EXE文件更容易分配;(2)把.WAV,.BMP,.ICO等文件放在程序的外部而非编译进.EXE中,可能会由于外部的删除,转移或者更名而导致程序无法运行。

2.资源的集成和处理过程

以前需要使用一个外部资源编译器,如RC.EXE将所有的资源编译到一起。而现在可以使用Visual Studio C++(www.cppentry.com) 6.0来轻松完成这些工作。在Visual Studio C++(www.cppentry.com) 6.0中,按快捷键“CTRL+R”,既可以弹出如图3-6所示的【Insert Resource】对话框,在对话框中可以选择相应的资源类型,单击New按钮则可以添加一个新资源;或者通过“Import”导入已经存在的资源;或者通过“Custom”创建一种新的资源类型。每当通过该对话框添加了一个新资源时,系统都会将新资源的相关信息集成到工程的资源文件中。当编译工程时,Visual Studio C++(www.cppentry.com) 6.0会一起编译所有的资源文件,从而形成了一个资源数据库,最后附加在.EXE文件的后部。
在程序运行过程中,可以访问资源数据库,并且可以从程序本身(而不是作为一个单独的文件从磁盘中)装载资源数据。

图3-6  【Insert Resource】对话框

3.如何使用位图资源

明白了资源的相关知识以后,这里将通过一个程序实例讲解位图资源的使用。

步骤1:打开Visual Studio C++(www.cppentry.com) 6.0,按照第1章中介绍的步骤,利用【App Wizard】创建一个名为BitMap的Win32 Application工程,并将Winows应用程序的类型设置为:A typical “Hello World!” application。
步骤2:按快捷键CTRL+R将弹出如图3-6所示的【Insert Resource】对话框。在对话框的ResourceType中选择类型为Bitmap,然后单击Import按钮,这时将弹出如图3-7所示的【Import Resource】对话框。

图3-7  【Import Resource】对话框


步骤3:在【Import Resource】对话框中选择一个需要插入的位图,选择Bitmap.bmp文件,然后单击Import按钮,这时会弹出导入结果提示框。如果导入位图大于256色,导入提示框将提示该位图无法正常显示,这时可以忽略它。
步骤4:导入Bitmap.bmp后,在Visual Studio C++(www.cppentry.com) 6.0开发环境的左侧可以看到如图3-8所示的资源视图。新导入的位图在Bitmap目录下展开为IDB_BITMAP1。

图3-8  资源视图


步骤5:用鼠标右键单击【IDB_BITMAP1】,选择弹出菜单中的【Properties】,弹出如图3-9所示的【Bitmap Proprerties】对话框。在该对话框中可以编辑该位图资源的相关属性。由于导入的图为一个统计图,这里定义位图的ID为:IDB_TONGJI。

图3-9  【Bitmap Proprerties】对话框

步骤6:保存工程,然后展开工程的源码文件,找到Resource.h文件。如果前面的操作都正确的话,在Resource.h文件中应该有类似下面的代码:

#define IDB_TONGJI                   132     //把资源同一符号标志符关联起来  

经过前面6步的操作,位图资源已经导入到了工程中。下一步将通过在程序中添加代码来实现位图的装入和显示。
步骤7:展开Bitmap.cpp文件,在程序的主窗口处理过程WndProc()函数的开始部分定义变量:
 HBITMAP hbmp;          //定义位图对象
HDC srchdc;           //定义源设备对象

然后在WndProc()函数中找到对WM_PAINT消息的处理代码如下:

case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
RECT rt;
GetClientRect(hWnd, &rt);
DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER); //打印出Hello World!
EndPaint(hWnd, &ps);
break;

参考本章前面的介绍,WM_PAINT消息通知Windows应用程序进行窗口重画,因此在这里可以添加位图的显示代码,在上面代码段的第二句代码和第三句代码之间添加如下代码。

 hbmp = LoadBitmap( hInst, (LPCTSTR)IDB_TONGJI);  //装载位图资源
srchdc = CreateCompatibleDC(hdc);     //创建源设备并返回句柄
SelectObject(srchdc, hbmp);       //将位图对象选入源设备环境
BitBlt(hdc,0,0,403,230,srchdc,0,0,SRCCOPY);   //将位图复制到目标设备句柄
DeleteObject(hbmp);          //删除位图句柄
DeleteObject(srchdc);        //删除源设备句柄
步骤8:编译整个工程文件,运行程序。程序的运行结果如图3-10所示。
图3-10  位图资源使用实例程序运行结果

本实例的源码在本书光盘文件中,如果需要进一步了解,可以参考光盘中的工程。
本节主要讲解的是位图资源的导入和使用,实际上其他资源,如图标,光标,音乐等的使用方法和位图资源大同小异,所以不再阐述。

【责任编辑:雪花 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇3.2.3 Windows程序分析 下一篇3.3 高级Windows编程

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: