StretchBlt失败,有多个窗口

时间:2015-07-05 07:15:30

标签: c++ windows visual-c++

所以我有以下代码:

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创造了任何东西。我真的可以使用一些帮助。谢谢你们!

1 个答案:

答案 0 :(得分:0)

您不能在多个设备上下文中选择相同的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);