函数参考


_WinAPI_CreateIconFromResourceEx

创建资源位描述的图标或光标.

#Include <WinAPIEx.au3>
_WinAPI_CreateIconFromResourceEx ( $pData, $iSize [, $fIcon [, $xDesired [, $yDesired [, $iFlags]]]] )

参数

$pData 图标或光标的资源位.通常调用 _WinAPI_LookupIconIdFromDirectoryEx() 与 _WinAPI_LoadResource() 函数加载
and _WinAPI_LoadResource() functions.
$iSize 字节大小,位设置由 $pData 参数值指定.
$fIcon [可选参数] 确定创建图标或光标.有效值:
TRUE - 创建图标. (默认)
FALSE - 创建光标.
$xDesired [可选参数] 图标或光标的宽度像素值.
如果次参数为 0,函数使用系统度量值设置的宽度.
$yDesired [可选参数] 图标或光标的高度像素值.
如果次参数为 0,函数使用系统度量值设置的高度.
$iFlags [可选参数] 参数可以是一或多个下列值:

$LR_DEFAULTCOLOR --- 使用默认颜色格式
$LR_DEFAULTSIZE --- 如果 $xDesired 或 $yDesired 设置为 0,光标或图标得宽(高)度由系统度量值确定
$LR_MONOCHROME --- 创建单色图标或光标
$LR_SHARED --- 如果图标或光标多次创建,则共享图标或光标句柄

返回值

成功: 返回图标或光标的句柄.
失败: 返回 0,设置 the @error 为非 0 值.

注意/说明

调用 _WinAPI_DestroyIcon() 销毁 _WinAPI_CreateIconFromResourceEx() 创建的对象.

相关

详情参考

在MSDN中搜索


示例/演示


#Include <APIConstants.au3>
#Include <WinAPIEx.au3>

Opt('MustDeclareVars', 1)

Global Const $STM_SETIMAGE = 0x0172

Global $hInstance, $hResource, $hData, $pData, $hIcon, $iIcon, $iSize

; 加载 Resources.dll 到内存
$hInstance = _WinAPI_LoadLibraryEx(@ScriptDir & '\Extras\Resources.dll', $LOAD_LIBRARY_AS_DATAFILE)
If Not $hInstance Then
    MsgBox(16, 'Error', @ScriptDir & '\Extras\Resources.dll not found.')
    Exit
EndIf

; 从 Resources.dll 库中加载 RT_GROUP_ICON 资源
$hResource = _WinAPI_FindResource($hInstance, $RT_GROUP_ICON, 1)
$hData = _WinAPI_LoadResource($hInstance, $hResource)
$pData = _WinAPI_LockResource($hData)

; 搜索最接近指定大小 (48x48) 的图标的整数资源名
$iIcon = _WinAPI_LookupIconIdFromDirectoryEx($pData, 1, 48, 48)

; 从 Resources.dll 库加载 RT_ICON 资源
$hResource = _WinAPI_FindResource($hInstance, $RT_ICON, $iIcon)
$iSize = _WinAPI_SizeOfResource($hInstance, $hResource)
$hData = _WinAPI_LoadResource($hInstance, $hResource)
$pData = _WinAPI_LockResource($hData)

; 从资源中创建图标
$hIcon = _WinAPI_CreateIconFromResourceEx($pData, $iSize)

; 从内存中卸载 Resources.dll
_WinAPI_FreeLibrary($hInstance)

; 创建 GUI
GUICreate('MyGUI', 128, 128)
GUICtrlCreateIcon('', 0, 40, 40, 48, 48)
GUICtrlSendMsg(-1, $STM_SETIMAGE, 1, $hIcon)
GUISetState()

Do
Until GUIGetMsg() = -3