2

我填写了 WNDCLASS 和 hbrBackground 属性到我的位图,比如

wc.hbrBackground = CreatePatternBrush( LoadBitmap( hInstance, MAKEINTRESOURCE( "grey-texture.bmp" ) ) );

这似乎根本没有改变,窗口是白色的,就像默认值一样,所以我需要找出这里发生了什么。CreatePatternBrush 不是用于此类事情的正确功能吗?不能以这样的方式完成吗?

hbrBackground = fromimagefile(string bitmap, bool tile);

4

3 回答 3

2

请参阅以下页面:

http://msdn.microsoft.com/en-us/library/windows/desktop/dd162462(v=vs.85).aspx

http://msdn.microsoft.com/en-us/library/windows/desktop/dd183508(v=vs.85).aspx

http://msdn.microsoft.com/en-us/library/windows/desktop/ms633576(v=vs.85).aspx

有两种类型的画笔,逻辑和物理。CreatePatternBrush 创建一个逻辑画笔,但 RegisterClass 需要一个物理画笔。

于 2012-10-13T11:39:55.010 回答
1

当你在你的 RC 文件中插入一个资源时,你可以用一个字符串或一个 int 来命名它,但是内部资源使用字符串来处理它们的资源。因此,当您使用 int 命名时(实际上是在resource.hint 中定义的 ID),因此当您拥有使用此类 ID(整数 ID)命名的资源时,您必须使用MAKEINTRESOURCE将该 ID 转换为 anLPCTSTR并将其传递给加载该资源的函数,但在您的情况下,您传递的是一个字符串"grey-texture.bmp",因此您不应使用MAKEINTRESOURCE和记住,LoadBitmap该函数旨在从合并到您的执行程序或 DLL 的“.res”文件中加载资源,并且无法在磁盘上加载文件!

于 2012-10-13T11:56:57.800 回答
0

您的代码应该在每个步骤中检查错误。以下只是一个原始样本。

HBITMAP hbmp = LoadBitmap(hInstance,MAKEINTRESOURCE(IDB_BITMAP1));
if(NULL == hbmp)
{
    MessageBox(NULL,"BitMap Loading Failed.","Error",MB_ICONEXCLAMATION | MB_OK);
}
else
{
    HBRUSH hbr = CreatePatternBrush(hbmp);
    if(NULL == hbr)
    {
        MessageBox(NULL,"Brush Creation Failed.","Error",MB_ICONEXCLAMATION | MB_OK);
    }
    else
    {
        wc.hbrBackground = hbr;
    }
}

然后,再次回复结果。我不确定您的LoadBitmap功能是否有效。就像BigBoss所说的,我们通常使用 resource.h 来处理这些事情。如果您想从头开始学习,我建议您阅读Forger 的教程。

于 2012-10-13T12:07:00.570 回答