我写了一个程序,希望将一个窗口内的内容在另一个窗口中显示
HDC hdc1; //原窗口DC
HDC hdc2; //目的窗口DC
RECT rect1; //原窗口客户区
RECT rect2; //目的窗口客户区
hdc1 = GetDC(hWnd1);
hdc2 = GetDC(hWnd2);
GetClientRect(hWnd1,&rect1);
GetClientRect(hWnd2,&rect2);
BitBlt(hdc2,rect2.left,rect2.top,(rect2.right-rect2.left),(rect2.top-rect2.bottom),
hdc1,rect1.left,rect1.top,SRCCOPY);
ReleaseDC(hWnd1,hdc1);
ReleaseDC(hWnd2,hdc2); InvalidateRect(hWnd2,&rect2,TRUE);两个窗口是由同一个进程产生
运行后,出现两个窗口
但和想象的不一样
目的窗口中并未显示原窗口中的内容不是BitBlt()可否这样用?
还是必须建立兼容DC?
HDC hdc1; //原窗口DC
HDC hdc2; //目的窗口DC
RECT rect1; //原窗口客户区
RECT rect2; //目的窗口客户区
hdc1 = GetDC(hWnd1);
hdc2 = GetDC(hWnd2);
GetClientRect(hWnd1,&rect1);
GetClientRect(hWnd2,&rect2);
BitBlt(hdc2,rect2.left,rect2.top,(rect2.right-rect2.left),(rect2.top-rect2.bottom),
hdc1,rect1.left,rect1.top,SRCCOPY);
ReleaseDC(hWnd1,hdc1);
ReleaseDC(hWnd2,hdc2); InvalidateRect(hWnd2,&rect2,TRUE);两个窗口是由同一个进程产生
运行后,出现两个窗口
但和想象的不一样
目的窗口中并未显示原窗口中的内容不是BitBlt()可否这样用?
还是必须建立兼容DC?
HDC hdc2; //目的窗口DC
RECT rect1; //原窗口客户区
RECT rect2; //目的窗口客户区
hdc1 = GetDC()->m_hDC;
hdc2 = ::GetWindowDC(AfxGetMainWnd()->m_hWnd); GetClientRect(&rect1);
AfxGetMainWnd()->GetClientRect(&rect2);
BitBlt(hdc2,0,0,(rect1.right-rect1.left),(rect1.bottom-rect1.top),
hdc1,0,0,SRCCOPY);
::ReleaseDC(m_hWnd,hdc1);
::ReleaseDC(GetParent()->m_hWnd,hdc2);
theApp.m_pMainWnd->GetDC()->StretchBlt(ptStartBtn.x,ptStartBtn.y,bmpInfo.bmWidth,bmpInfo.bmHeight,&memDC,
0,0,bmpInfo.bmWidth,bmpInfo.bmHeight,SRCCOPY);
我先将一个Picture(类型为Bitmap)控件移动到某一位置,然后在某一位置显示出来,最后在这位置用StretchBlt绘制该控件的热点效应。可总是不行,跟踪后发现StretchBlt正常绘制了,我怀疑是MoveWindow还没使这picture控件移动到位,或还没来得及重绘该控件窗口我就利用StretchBlt绘制热点效果图了,后来该控件重绘冲掉了StretchBlt所绘制图。
我这个程序是个简单的SDK程序
不是MFCBitBlt(hdc2,0,0,(rect1.right-rect1.left),(rect1.bottom-rect1.top),
hdc1,0,0,SRCCOPY);为什么要把坐标变为0?
hdc2也有效的,在hdc2上输出了一段文字,可以显示的
那就好办了,把在hdc1上能够直接显示的BitBlt函数的第一个参数直接换成hdc2,也一定能够显示。
找BitBlt函数参数的差异吧。
在hdc1上能够直接显示的BitBlt函数的第一个参数直接换成hdc2 ??
这是什么意思???
应该是 rect2.bottom-rect2.top
已经改过来了,但还是不行
我是在win7系统下运行的
是不是win7下运行没有效果
我也是Win7没问题,你看是不是你那个InvalidateRect把窗口重绘了?去掉看看
HDC hdcDest, // 目标DC句柄
int nXDest, // 目标矩形左上角x坐标
int nYDest, // 目标矩形左上角y坐标
int nWidth, // 目标矩形width
int nHeight, // 目标矩形height
HDC hdcSrc, // 源DC句柄
int nXSrc, // 源矩形左上角x坐标
int nYSrc, // 源矩形左上角y坐标
DWORD dwRop // 光栅操作码(raster operation code)定义源矩形彩色数据如何与目标矩形彩色数据结合,以达到最终色彩。
);
BitBlt(hdc2,rect2.left,rect2.top,(rect2.right-rect2.left),(rect2.top-rect2.bottom),
hdc1,rect1.left,rect1.top,SRCCOPY);
rect2.top-rect2.bottom不是正的吧,换成rect2.bottom-rect2.top