我把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,无法加载磁盘上的文件!