gpt4 book ai didi

c++ - WinAPI:在按钮上显示图像 - 常用方法不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:44:59 28 4
gpt4 key购买 nike

这让我很头疼:我不能使用给定的位图显示在按钮上 - Windows 说它是“无效参数”

这是我的代码:

// creating the button
const HWND hButton=::CreateWindow("button","text",WS_CHILD|VS_VISIBLE,0,0,100,100,hParent,0,editor.m_hInstance,NULL);
// loading the bitmap to be shown on a button
const HBITMAP hBmp=(HBITMAP)::LoadImage(editor.m_hInstance,MAKEINTRESOURCE(ID_MYBITMAP),IMAGE_BITMAP,0,0,LR_LOADTRANSPARENT);
// associating the bitmap with a button that lacks the BS_BITMAP style (I want both image and text to be shown)
::SendMessage( hButton, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)hBmp );
// getting the error
const int err=::GetLastError(); // returns 0x56, "Invalid parameter"

请注意,我可以在表单的 Canvas 上显示加载的图像,因此图像确实已正确加载。

我尝试了位图的各种分辨率(每像素 4 位、每像素 8 位、标准调色板、真彩色、每像素 32 位)- 没有任何效果。我通读了之前关于这个主题的大量问题,所有这些问题都声称 ::LoadImage/BM_SETIMAGE 组合是最终的解决方案 - 到目前为止没有结果。

所以我的两个问题:

1) 图像是否必须满足任何要求才能显示在按钮上?

2) 如果不是,那我到底做错了什么?

非常感谢您的回复。

托马斯

最佳答案

const int err=::GetLastError(); // returns 0x56, "Invalid parameter"

首先,错误0x56 是网络错误。参见 System error codes

ERROR_INVALID_PASSWORD
86 (0x56)
The specified network password is not correct.

这不可能是对的。您可能收到错误 0x57 (ERROR_INVALID_PARAMETER)

其次,这是如何进行错误检查:

HBITMAP hBmp = (HBITMAP)::LoadImage(editor.m_hInstance, 
MAKEINTRESOURCE(IDB_BITMAP1), IMAGE_BITMAP, 0, 0, LR_LOADTRANSPARENT);
DWORD error;
if(!hBmp)
{
error = GetLastError();
//report error
}

SetLastError(0);
SendMessage(hButton, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)hBmp);
error = GetLastError();
//report the result, it may not be an error

GetLastError 必须紧跟在失败的函数之后。如果您将 GetLastError 放在随机位置,则错误消息没有意义。

问题可能是您没有在您的应用程序中启用视觉样式。确保将视觉样式添加到 list 文件中。

如果使用 Visual Studio,您只需将此行添加到您的 *.cpp 或 *.h 文件之一:

#pragma comment(linker,"/manifestdependency:\"type='win32' 
name='Microsoft.Windows.Common-Controls' version='6.0.0.0'
processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")

关于c++ - WinAPI:在按钮上显示图像 - 常用方法不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40716367/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com