由于特殊需要,我已将一个图标文件(*.ico)读入内在,但我现在要在窗口中画该图标,如何处理该内存块(当然是个完整的ICO文件内容)生成一个HCON句柄?多谢

解决方案 »

  1.   

    从任意位置装入一个图标并绘制
    目标
    从资源文件或直接从一个图标文件中装入一个图标,在应用程序中绘制。
    策略
    用三种不同的方法装入一个图标。第一种方法,使用一个称为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);
      

  2.   

    可是我要的是从已装入文件中的数据块来建立,楼上主人说的方法不全我要.我又不想写入一个文件,再用LoadImage函数调用这是比较消耗资源的
      

  3.   

    An application can use FindResource to find any type of resource, but this function should be used only if the application must access the binary resource data when making subsequent calls toLoadLibrary and LockResource. 
    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
      

  4.   

    我记得 SDK 好想要用到 BitBlt() 函数吧!
      

  5.   

    see IconPro Sample in MSDN