【问题标题】:Problem with loading a bitmap with the LoadImage() function使用 LoadImage() 函数加载位图时出现问题
【发布时间】:2020-11-26 22:05:27
【问题描述】:

我在 Windows CE 2013 上使用 C++ 开发应用程序。

我想从文件中加载位图并在屏幕上显示。

问题是LoadImage() 函数总是返回NULL

HDC hdcOkno;
hdcOkno = GetDC(hWnd);
HBITMAP hbmObraz;
hbmObraz = (HBITMAP)LoadImage(NULL, L"C:\\Users\\tykab\\OneDrive\\Pulpit\\bitmapy\\background_blue.bmp", IMAGE_BITMAP, 0, 0, NULL);
BITMAP bmInfo;
GetObject(hbmObraz, sizeof(bmInfo), &bmInfo);
BitBlt(hdcOkno, 50, 50, bmInfo.bmWidth, bmInfo.bmHeight, hdcOkno, 0, 0, SRCCOPY);

【问题讨论】:

  • GetLastError()检查所有这些函数调用的结果。
  • 函数返回错误1814
  • 是ERROR_RESOURCE_NAME_NOT_FOUND,但我定义的路径是正确的。
  • @BartłomiejTyka 那是因为您没有指定LR_LOADFROMFILE 标志,因此您的字符串被解释为资源名称而不是文件路径,并且您指定的资源名称确实不存在。

标签: c++ winapi visual-studio-2013 bitmap windows-ce


【解决方案1】:

更新:

由于您在 Windows CE 平台上工作,LoadImage() 无法从文件中加载位图。你应该改用SHLoadDIBitmap()

原答案

来自LoadImage documentation

name

输入:LPCTSTR

...

如果hinst 参数为NULL,并且fuLoad 参数省略了LR_LOADFROMFILE 值,则lpszName 指定要加载的OEM 映像...

...

如果fuLoad 参数包含LR_LOADFROMFILE 值,则lpszName 是包含独立资源(图标、光标或位图文件)的文件的名称。因此,将hinst 设置为 NULL。

您没有在fuLoad 参数中指定LR_LOADFROMFILE 标志。加载文件时最后一个参数应设置如下:

LR_DEFAULTSIZE | LR_LOADFROMFILE

正如 cmets 中所述,检查 GetLastError() 是否有错误总是一个好主意。

【讨论】:

  • 不幸的是,对于 WindowsCE 平台,此标志不可用
猜你喜欢
  • 1970-01-01
  • 2019-08-27
  • 1970-01-01
  • 1970-01-01
  • 2016-03-14
  • 1970-01-01
  • 2011-02-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多