StretchBlt在多个窗口中失败

StretchBlt fails with multiple windows

本文关键字:失败 窗口 StretchBlt      更新时间:2023-10-16

所以我有以下代码:

HBITMAP tbmp=NULL;
HBITMAP cbmp=NULL;
tbmp=hbmp;// hbmp is defined earlier
cbmp=hbmp;
HDC h1=GetDC(mainWind);//main wind defined earlier
HDC h2=GetDC(secondWind);// secondWind defined earlier
HDC h1mem=CreateCompatibleDC(h1);
HDC h2mem= CreateCompatibleDC(h2);
SelectObject(h1mem, tbmp);
SelectObject(h2mem, cbmp);
StretchBlt(h1, 300, 0, 384, 216, h1mem, 0,0,1920,1080);
StretchBlt(h2, 0, 0, 1920, 1080, h2mem, 0,0,1920,1080);

然而,当我运行这个时,只有第一个StretchBlt会执行任何操作。无论我把它们按什么顺序排列,只有第一个StretchBlt会创建任何东西。我真的需要一些帮助。谢谢大家!

不能在多个设备上下文中选择相同的HBITMAP句柄。仅仅因为您将同一个句柄值复制到三个不同的变量中,并不意味着您现在神奇地拥有三个不同句柄——您只拥有同一句柄的三个副本。最有可能的是,第二个SelectObject调用失败(通常,您应该检查所有API调用的返回值(。

试试这个方法:

HDC h1 = GetDC(mainWind);
HDC h2 = GetDC(secondWind);
HDC h1mem = CreateCompatibleDC(h1);
HBITMAP hbmOld = (HBITMAP)SelectObject(h1mem, hbmp);
StretchBlt(h1, 300, 0, 384, 216, h1mem, 0,0,1920,1080);
StretchBlt(h2, 0, 0, 1920, 1080, h1mem, 0,0,1920,1080);
// Cleanup
SelectObject(h1mem, hbmOld);
DeleteDC(h1mem);
ReleaseDC(h1);
ReleaseDC(h2);