从资源中加载特殊资源方法

原创 2007年10月13日 10:36:00

在资源中保存了GIF,PNG,ANI等等资源时怎样加载呢?

可以使用如下方法

加载动态图标(光标)的方法

注意再将光标导入到资源时候资源类型输入ANI

// 在一般mfc程序中使用
//HINSTANCE hInstance = AfxGetInstanceHandle();
// 如果是atlcom组件中使用
//HINSTANCE hInstance = _AtlBaseModule.GetModuleInstance();
HCURSOR LoadAniCursor(HINSTANCE hInstance, UINT nID)
...{
    HRSRC hRes 
= FindResource(hInstance, MAKEINTRESOURCE(nID), L"ANI");
    
if (hRes == NULL)
    
...{
        ATLTRACE(
"cannot find resource errcode: %d", GetLastError());
        
return NULL;
    }

    DWORD dwSize 
= SizeofResource(hInstance, hRes);
    HGLOBAL hGlob 
= LoadResource(hInstance, hRes);
    
if (hGlob == NULL)
    
...{
        ATLTRACE(
"cannot Load resource errcode: %d", GetLastError());
        
return NULL;
    }

    LPBYTE pBytes 
= (LPBYTE)LockResource(hGlob); 
    HCURSOR hCursor 
= (HCURSOR)CreateIconFromResource(pBytes, dwSize, FALSE, 0x00030000);
    
if (hCursor == NULL)
    
...{
        ATLTRACE(
"cannot create ani cursor errcode: %d", GetLastError());
        
return NULL;
    }

    UnlockResource(hGlob);
    FreeResource(hRes);
    
return hCursor;
}


//成功调用
SetCursor(hAniCursor);

 

上面的方法在非dll(包括ATL com Dll)的普通应用程序中使用是没有问题的。在dll中使用时某些ani(可能有alpha通道32位以上)的加载可能不成功。

 

另外介绍一种在MFC exe程序中使用的最简单的方法在加入ani 文件到资源中时候资源类型输入21( ATL_RT_ANICURSOR的值

加载的方法可以为:

  1.     HCURSOR hAniCur = ::LoadCursor(AfxFindResourceHandle(ATL_MAKEINTRESOURCE(IDR_ANI1),
  2.         ATL_RT_ANICURSOR), ATL_MAKEINTRESOURCE(IDR_ANI1)); 

GIF PNG  图片加载方法(使用了GDI+)

BOOL ImageFromIDResource(HINSTANCE hInstance, UINT nID, LPCTSTR sTR, Image * &pImg)
...{
    HRSRC hRsrc 
= ::FindResource (hInstance, MAKEINTRESOURCE(nID), sTR); // type
    if (!hRsrc)
        
return FALSE;

    
// load resource into memory
    DWORD len = SizeofResource(hInstance, hRsrc);
    BYTE
* lpRsrc = (BYTE*)LoadResource(hInstance, hRsrc);
    
if (!lpRsrc)
        
return FALSE;

    
// Allocate global memory on which to create stream
    HGLOBAL m_hMem = GlobalAlloc(GMEM_FIXED, len);
    BYTE
* pmem = (BYTE*)GlobalLock(m_hMem);
    memcpy(pmem,lpRsrc,len);
    IStream
* pstm;
    CreateStreamOnHGlobal(m_hMem,FALSE,
&pstm);

    
// load from stream
    pImg = Gdiplus::Image::FromStream(pstm);

    
// free/release stuff
    GlobalUnlock(m_hMem);
    pstm
->Release();
    FreeResource(lpRsrc);
    
return TRUE;
}

从资源中加载特殊资源方法

在资源中保存了GIF,PNG,ANI等等资源时怎样加载呢?可以使用如下方法加载动态图标(光标)的方法注意再将光标导入到资源时候资源类型输入ANI// 在一般mfc程序中使用//HINSTANCE hI...
  • abesky
  • abesky
  • 2007-10-13 10:36:00
  • 1802

Android 资源命名规范

简介标题字符串 string资源文件或者文本用到字符需要全部写入module_strings.xml文件中, 字符串以小写单词+下划线的方式命名:模块名_逻辑名 如果是Toast、提示Dialog...
  • ThePromonkeyOf_HeLuo
  • ThePromonkeyOf_HeLuo
  • 2018-04-08 15:37:56
  • 7

在VC中使用GDI+从自定义资源中加载图片

函数定义: BOOL ImageFromIDResource(UINT nID, LPCTSTR sTR, Image * & pImg) { HINSTANCE hInst = ...
  • LifeForToday
  • LifeForToday
  • 2015-04-30 10:46:11
  • 1188

AS3 加载外部SWF资源

swf 内部库如下   Chat影片剪辑内有三个组建,TextArea,TextInput,Button,实例名非别是:textAtea,textInput,sendButton   Ma...
  • fengsser
  • fengsser
  • 2012-12-20 16:37:52
  • 1531

资源网-发福利了

资源网发福利了。 ------------------------------------------------------------------------------------------...
  • HK_5788
  • HK_5788
  • 2015-08-19 14:48:58
  • 131925

加载资源PNG图片

.rc文件下添加资源的相关信息如下 FINGER                PNG                       "Res\\Finger.png" 加载的时候采用如下方式:...
  • u011061503
  • u011061503
  • 2014-07-18 17:57:51
  • 644

使用GDI+函数从资源中加载图片

  • 2008年10月20日 10:19
  • 120KB
  • 下载

Android资源文件夹命名规则

几乎所有的应用都要提另外的特殊资源来适配特殊配置的设备。例如:你必须提供不同尺寸的图片资源以适配不同屏幕密度的设备;你需要提供多个string资源文件以支持国际化。Android会根据当前设备的配置来...
  • zzx410527
  • zzx410527
  • 2017-01-16 15:46:36
  • 1848

在https的tomcat环境中,使某些特殊的资源通过http来访问

项目的背景 该系统是一个基于https访问的后台管理系统,客户提出开发一些webservice,来请求一些定制的服务,要求访问方式为http。 后来经过各种资料的查询,目前得出以下...
  • jingzi0418
  • jingzi0418
  • 2016-04-14 16:42:52
  • 388

从内存资源中加载DLL:CMemLoadDll源码整理

头文件 /*****MemLoadDll.h*****/ #if !defined(Q_OS_LINUX) #pragma once typedef BOOL (__stdcall *Pro...
  • tianshi_1988
  • tianshi_1988
  • 2016-04-22 18:00:39
  • 1273
收藏助手
不良信息举报
您举报文章:从资源中加载特殊资源方法
举报原因:
原因补充:

(最多只允许输入30个字)