由于特殊需要,我已将一个图标文件(*.ico)读入内在,但我现在要在窗口中画该图标,如何处理该内存块(当然是个完整的ICO文件内容)生成一个HCON句柄?多谢
解决方案 »
- 刚开始学MFC,有c++基础,但赶着做工程,问该先看什么
- tcp只要发送成功,就能推出接收成功吗?
- 使用CFileDialog保存文件,只弹出对话框确保存不了文件
- 如果不用从CSocket继承下来的OnRecieve函数,而用api来编写消息接收,怎么才能实现消息来了自动接收
- 如何判断新窗体已经打开
- 一个简单问题,但小弟不懂,回的请进来救命啊,问题一解决就给分,在线等待,急急急!!!!
- 谁能告诉我WabOpen()函数怎么用?最好有简单代码,要包括什么头文件?
- 特急!!救命!!CTypedPtrArray 在 Dll 中不能用,为什么?
- 想最底层地了解API的运行过程的朋友都进来看看
- angband, 愿和你交个朋友,共同探讨C++
- 对话框编辑问题
- 请教如何写日志文件,比如程序启动时,启动时间写入log文件
目标
从资源文件或直接从一个图标文件中装入一个图标,在应用程序中绘制。
策略
用三种不同的方法装入一个图标。第一种方法,使用一个称为LoadIcon( )的应用程序类
的成员函数,它从应用程序的资源中装入一个图标;第二种方法,用Window API 函数
LoadImage()直接从一个磁盘文件中装入一个图标;第三种方法,用Windows API 函数
ExtractIcon()从另一个应用程序的可执行文件中抽出一个图标。
步骤
1. 从应用程序的资源中装入一个图标
装入一个在应用程序资源中定义的图标,用:
HICON hicon;
hicon=AfxGetApp()->LoadIco(IDR_MAINFRAME);
2. 直接从一个.ico磁盘文件中装入一个图标
从一个.ico文件装入一个图标,使用下面的方法。本例从Wzd.ico装入一个图标。
hicon = (HICON)LoadImage(
NULL, // handle of the instance that contains
//the image
"Wzd.ico", // name or identifier of image
IMAGE_ICON, // type ofimage-
//can also be IMAGE_CURSOR or IMAGE_ICON
0,0, // desired width and height
LR_LOADFROMFILE); // load flags
3. 从一个DLL或.exe文件中装入一个图标
从另一个应用程序的可执行文件中抽取一个图标,可以用下面的方法。本例中抽取在
Wzd.exe中发现的第二个图标。
HINSTANCE hinst=AfxGetInstanceHandle();
hicon=ExtractIcon(hinst,"Debug\\wzd.exe",1);
要确定一个可执行文件或DLL文件有多少个图标,用a-1索引调用ExtractIcon(),图标数量返回到hIcon中。
4. 绘制一个图标
用下面的方法可以把一个图标绘制到任何窗口。这里的(0,0)是图标的左上角坐标。
pDC->DrawIcon(0,0,hicon);
5. 销毁一个图标
必须手工销毁任何一个装入的或者用LoadImage()装入或ExtractIcon()抽取的图标,以避免资源内存泄漏。
DestroyIcon(hicon);
For example, an application can use the LoadIcon function to load an icon for display on the screen. However, the application should use FindResource and LoadResource if it is loading the icon to copy its data to another application