【问题标题】:Picture Control not displaying any picture优化校准不显示任何图片
【发布时间】:2011-12-08 10:34:55
【问题描述】:

我目前正在制作一个包含图片控件的对话框。我将类型设置为 BITMAP 并将图像设置为我想要的图像。此图像也在资源 .rc 文件中。当我将它设置为图片控件的位图时,我可以在编辑器中看到它,但当我运行我的应用程序但它不起作用时,我在图片控件中看不到任何东西。

我尝试了以下方法:

调用 Initcommoncontrols(); (这个函数已被弃用,所以我尝试了 InitCommonControlsEx() 和它想要的参数)结果:仍然没有图片

我在表单初始化的时候使用了如下sn-p:

SendMessage( GetDlgItem( aHWND, HEADERLOGO), STM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)hBitmap );

hBitmap 声明为:

HBITMAP hBitmap = LoadBitmap( hInstance, MAKEINTRESOURCE(BITMAP_LOGO) );

当我在 LoadBitmap() 之后执行 getlasterror 时,错误代码是:1814 (0x716),它也翻译为 ERROR_RESOURCE_NAME_NOT_FOUND 我不知道为什么找不到图像,我可以在编辑器中看到东西很好,没有任何抱怨。 hInstance 是从 WinMain() 获得的,我也尝试使用这个 sn-p 获得它:

(HINSTANCE)GetWindowLong( aHWND, GWL_HINSTANCE);

我认为 WinMain HINSTANCE 是正确的,但只是为了确保我尝试过这个,但没有任何效果。

在那之后,我认为可能只是 IDE 以某种方式搞砸了,所以我扔掉了对话框,重新创建了它,添加了新的图片控件,再次添加了图像。还是一样,在编辑器中看起来不错,但在运行项目时不显示。

我猜我在这里遗漏了一些非常简单的东西,请赐教。

【问题讨论】:

  • 这和 Winforms 有什么关系? hBitmap 实际上是 NULL 吗?在 Visual Studio 中使用 File + Open + File 并选择您的 .exe。查看资源是否确实存在。
  • 当我使用资源黑客或资源编辑器检查时,会显示位图。我可以很好地看到它,当我在其他编辑器中查看对话框时,它会用位图显示它,而不是在执行它时。
  • 它决定在连续重新创建对话框大约 10 次后工作。做了完全相同的事情,将其设置为 BITMAP 在编辑器中添加位图,在编辑器中显示,现在它在执行时也显示。完全不知道为什么它现在有效而以前无效。

标签: winforms winapi visual-c++


【解决方案1】:

事实证明,在对话框中获取 HINSTANCE 是行不通的。它对应用程序内存无效。如果您从 WinMain 获取 HINSTANCE,它将起作用。我的引擎现在抓住了这个,现在 HBITMAP 句柄被填满了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多