我怎样才能让WNDCLASS有一个位图图像作为背景?

我把WNDCLASS和hbrBackground属性填充到我的位图中

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

这似乎并没有改变,窗口是白色的,因为它是默认的,所以我需要找出这里发生了什么。 是CreatePatternBrush不正确的function用于这样的事情? 难道不能这样做吗?

hbrBackground = fromimagefile(string bitmap,bool tile);

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

 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's Tutorials 。

请参阅以下页面:

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需要一个物理画笔。

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