Winapi 你能在静态图片控制上设置DDB吗
我用SS_位图样式创建了图片控件,并在内存DC上创建了位图。因此,您可以或如何为控件设置DDB的Winapi 你能在静态图片控制上设置DDB吗,winapi,controls,bitmap,image,Winapi,Controls,Bitmap,Image,我用SS_位图样式创建了图片控件,并在内存DC上创建了位图。因此,您可以或如何为控件设置DDB的HBITMAP?它不适用于使用: 编辑: HDC hDC = GetDC(hPB); //hPB, Handle to static control. HDC hMemDC = ::CreateCompatibleDC(hDC); HBITMAP hDDB = ::CreateCompatibleBitmap(hDC, 17, 14); SelectObject(hMe
HBITMAP
?它不适用于使用:
编辑:
HDC hDC = GetDC(hPB); //hPB, Handle to static control.
HDC hMemDC = ::CreateCompatibleDC(hDC);
HBITMAP hDDB = ::CreateCompatibleBitmap(hDC, 17, 14);
SelectObject(hMemDC, hDDB);
//Draw on DDB
SendMessage(hPB, STM_SETIMAGE, IMAGE_BITMAP, LPARAM(hDDB));
DeleteObject(hDDB);
DeleteObject(hBrush);
ReleaseDC(hPB, hDC);
我认为
//使用DDB
来代替删除的代码?在这种情况下,查看当前的示例代码,我的灵力说问题在于您没有从内存DC中选择位图。您需要使其看起来像这样(按与创建相反的顺序重新排列以进行清理):
是的,你就是这样做的。无法使用为什么它不工作,后复制代码。即使我在调试器中运行行SendMessage,它也不会设置位图。我还对“DeleteObject(hDDB)”后面的行进行了注释。看起来您并没有在绘制后将hMemDC恢复到其初始状态。HBITMAPs不能同时选择到多个DC中,因此STM_SETIMAGE调用可能因此失败。
HDC hDC = GetDC(hPB);
HBITMAP hDDB = ::CreateCompatibleBitmap(hDC, 17, 14);
HDC hMemDC = ::CreateCompatibleDC(hDC);
HGDIOBJ hOld = SelectObject(hMemDC, hDDB);
//Draw on DDB here...
SelectObject(hMemDC,hOld); // this releases the hDDB
DeleteDC(hMemDC);
ReleaseDC(hPB, hDC);
HBITMAP hbmPrev = (HBITMAP)SendMessage(hPB, STM_SETIMAGE, IMAGE_BITMAP, LPARAM(hDDB));
if(hbmPrev && hbmPrev != hDDB)
DeleteObject(hbmPrev);