【问题标题】:How to display bitmap image in background Win32如何在后台Win32中显示位图图像
【发布时间】:2014-07-28 08:29:27
【问题描述】:

我很难找出如何将我的 .bmp 图像加载到背景中。

这是我的代码:

wc.cbSize        = sizeof(WNDCLASSEX);
wc.style         = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc   = WndProc; 
wc.cbClsExtra    = 0;
wc.cbWndExtra    = 0;
wc.hInstance     = hInstance;
wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION); 
wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = CreatePatternBrush(LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP1)));
wc.lpszMenuName  = NULL;
wc.lpszClassName = g_szClassName;
wc.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);

虽然问题不完全与代码有关。我只是有一个文件 x.bmp,我在 resource.rc 文件中定义了 IDB_BITMAP1,并在 resource.h 中包含了一个标识符——但是当我运行它时,我只是得到一个白屏。这里的问题是,如何将我的 .bmp 图像上传到 .rc 文件?我正在使用 MSVS20124。当我右键单击 .rc 文件 add>bitmap>import...>x.bmp 我收到错误“无法加载文件”。为什么是这样?我只想将那个 x.bmp 设置为我窗口中的背景。

谢谢

【问题讨论】:

  • IDB_BITMAP1 指向什么?如果您双击 IDB_BITMAP1,它会显示位图吗?如果是这样,那你为什么要导入 x.bmp?在 MS Paint 中打开 x.bmp 并检查它是否是有效的 bmp。
  • 是的,如果我双击它,它会显示我链接到它的 .bmp (x.bmp),但是当我运行程序时,背景只是纯白色。
  • 不要将位图设置为背景画笔。处理WM_ERASEBKGND 消息并将位图绘制到提供的HDC 上。 Drawing a Custom Window Background
  • 谢谢@RemyLebeau——感谢您的评论,我让它工作了,但我在大卫的建议中添加了错误检查。非常感谢你们!

标签: winapi visual-c++ bitmap


【解决方案1】:

您没有在对LoadBitmap 的调用和对CreatePatternBrush 的调用中执行任何错误检查。很可能其中一个调用失败,因此 hbrBackground 设置为 NULL,这会导致白色背景。

下一步是进行一些调试以确定哪个调用失败。您作为资源链接的位图文件很可能使用了LoadBitmap 不支持的格式。或者也许位图文件没有被链接。但只要你真的设法创建了位图和画笔,系统就会使用该画笔绘制背景。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-23
    • 2022-11-16
    • 2014-04-25
    • 1970-01-01
    • 1970-01-01
    • 2014-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多