Windows加载位图API(WIN16位)
当我把文件放入资源(.rc)中时,我知道如何使用函数LoadBitmap(hInstance,idRes),但是我想知道是否可以加载位图并获得这个句柄,放入一个文件,比如LoadIconWindows加载位图API(WIN16位),windows,winapi,assembly,x86,Windows,Winapi,Assembly,X86,当我把文件放入资源(.rc)中时,我知道如何使用函数LoadBitmap(hInstance,idRes),但是我想知道是否可以加载位图并获得这个句柄,放入一个文件,比如LoadIcon LoadIcon, hInstance, 100 OK LoadIcon, hInstance, addr filename OK 它工作得很好,但与LoadBitmap不兼容 Lo
LoadIcon, hInstance, 100 OK
LoadIcon, hInstance, addr filename OK
它工作得很好,但与LoadBitmap不兼容
LoadBitmap, hInstance, 200 OK
LoadBitmap, hInstance, addr filename ERROR
那么,如何从用户的输入加载位图,而不是从资源加载位图呢
您使用的是什么Windows版本或模拟器
我在Windows 3.1下尝试了LoadIcon
的行为,这是不支持32位代码(以及Watcom编译器工具套件)的最后一个Windows版本之一:
Windows 3.1不接受文件名作为第二个参数;如果第一个参数是有效的hInstance
值,Windows 3.1始终将第二个参数解释为“资源名称”。示例(.rc
文件):
。。。当我指定“c:\test.ico
”时,Windows 3.1加载了图标example.ico
我还尝试在Linux下使用WINE 3.6。结果是一样的
因此,如果您的Windows版本确实从文件中加载图标(如您所指示),则您的Windows版本的行为与其他Windows版本不同
<>即使有可能加载<代码> .bmp < /c>文件,使用<代码> LoadBitmap < /代码>,您必须考虑到程序在其他Windows版本下不能正常工作。
如果可以加载位图并获得此句柄,请放入一个文件,如LoadIcon
LoadIcon, hInstance, 100 OK
LoadIcon, hInstance, addr filename OK
当然,在.rc
文件中指定名称也可用于位图:
"c:\\test.bmp" BITMAP mybitmap.bmp
。。。然而,这可能不是你想要的
那么,如何从用户的输入加载位图,而不是从资源加载位图呢
在Windows 3.1(和3.11)下,没有任何函数可以直接从文件加载位图
由于较新的Windows版本支持32位程序,我怀疑微软是否在较新的Windows版本中添加了新的16位函数:使用新函数会使程序与较旧的Windows版本不兼容,因此不使用32位代码的唯一原因就不存在了
在Windows 3.1下加载.bmp
文件的典型方法是:
- 将
文件加载到内存中(在16位窗口下,MS-DOS.bmp
调用通常用于文件访问。)int 21h
- 在文件的偏移量10(十进制)处,有一个32位字包含位图数据的偏移量(“位图位”)
- 在偏移量14(十进制)处,有一个
结构BITMAPINFO
- 从
结构中读取图像的大小(宽度和高度)BITMAPINFO
- 获取一些
(例如,通过调用HDC
)GetDC
- 使用
CreateCompatibleBitmap
返回的值是CreateCompatibleBitmap
句柄HBITMAP
- 使用
将实际图像数据写入位图SetDIBits
- 释放
(例如,通过调用HDC
)ReleaseDC
LoadIcon
的行为,这是不支持32位代码(以及Watcom编译器工具套件)的最后一个Windows版本之一:
Windows 3.1不接受文件名作为第二个参数;如果第一个参数是有效的hInstance
值,Windows 3.1始终将第二个参数解释为“资源名称”。示例(.rc
文件):
。。。当我指定“c:\test.ico
”时,Windows 3.1加载了图标example.ico
我还尝试在Linux下使用WINE 3.6。结果是一样的
因此,如果您的Windows版本确实从文件中加载图标(如您所指示),则您的Windows版本的行为与其他Windows版本不同
<>即使有可能加载<代码> .bmp < /c>文件,使用<代码> LoadBitmap < /代码>,您必须考虑到程序在其他Windows版本下不能正常工作。
如果可以加载位图并获得此句柄,请放入一个文件,如LoadIcon
LoadIcon, hInstance, 100 OK
LoadIcon, hInstance, addr filename OK
当然,在.rc
文件中指定名称也可用于位图:
"c:\\test.bmp" BITMAP mybitmap.bmp
。。。然而,这可能不是你想要的
那么,如何从用户的输入加载位图,而不是从资源加载位图呢
在Windows 3.1(和3.11)下,没有任何函数可以直接从文件加载位图
由于较新的Windows版本支持32位程序,我怀疑微软是否在较新的Windows版本中添加了新的16位函数:使用新函数会使程序与较旧的Windows版本不兼容,因此不使用32位代码的唯一原因就不存在了
在Windows 3.1下加载.bmp
文件的典型方法是:
- 将
文件加载到内存中(在16位窗口下,MS-DOS.bmp
调用通常用于文件访问。)int 21h
- 在文件的偏移量10(十进制)处,有一个32位字包含位图数据的偏移量(“位图位”)
- 在偏移量14(十进制)处,有一个
结构BITMAPINFO
- 从
结构中读取图像的大小(宽度和高度)BITMAPINFO
- 获取一些
(例如,通过调用HDC
)GetDC
- 使用
CreateCompatibleBitmap
返回的值是CreateCompatibleBitmap
句柄HBITMAP
- 使用
将实际图像数据写入位图SetDIBits
- 释放
(例如,通过调用HDC
)ReleaseDC