PrintWindow 截图为什么黑屏呢,vc++,求高手告诉我啊

cluonani 2013-03-04 11:21:49
vb的代码可以,vc的不可以。
请看VB代码,
picture1是个图片控件,这样一截图,就ok了。

Picture1.Cls
Call PrintWindow(Val(TxtHwnd.Text), Picture1.hdc, 0)
Picture1.Refresh

===========================
vc的是这样的

typedef BOOL ( __stdcall *pPrintWindow )(HWND hWnd,HDC hdcBlt,UINT nFlags);
//RECT rect;
HMODULE h;
h = LoadLibrary( L"user32.dll" );
pPrintWindow p;
if( h )
{
p = ( pPrintWindow )::GetProcAddress( h, "PrintWindow" );
}

p(hWnd,*bitcdc,0);



//bitcdc 是个图片控件的CDC CDC *bitcdc m_pic.GetDC()

为什么VB这样可以,VC截出来的却是黑屏呢,
vc的可以看到标题栏。十几次可以正确一次。其余的都是黑屏

求高手解答啊。指点迷津
...全文
1490 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
ma_nong 2015-03-12
  • 打赏
  • 举报
回复
求解怎么才能用PrintWindow截取全屏,而不是显示黑色
zhouyufeng314 2013-11-14
  • 打赏
  • 举报
回复
求解怎么才能用PrintWindow截取全屏,而不是显示黑色
cluonani 2013-03-06
  • 打赏
  • 举报
回复
引用 12 楼 Bokutake 的回复:
这部分程序初始化,准备一个内存DC存图像。 C/C++ code?1234567 CDC memDC;//内存DC memDC.CreateCompatibleDC(pDC); CBitmap memBitmap, *oldmemBitmap;、 memBitmap.CreateCompatibleBitmap(pDC, width, ……
bitblt可以截成功,但是窗口覆盖在上面.会把覆盖的那层也截取出来.
cluonani 2013-03-06
  • 打赏
  • 举报
回复
引用 15 楼 sha_jinhao 的回复:
截图成功了么有?
面前成功了..重新设置了setredraw ...谢谢大家,结贴算了.
jimette 2013-03-06
  • 打赏
  • 举报
回复
截图成功了么有?
jimette 2013-03-06
  • 打赏
  • 举报
回复
Nonzero if the function succeeds; otherwise 0.
spiderlily 2013-03-06
  • 打赏
  • 举报
回复
引用 11 楼 cluonani 的回复:
引用 6 楼 spiderlily 的回复:HDC hDC=CreateCompatibleDC(bitcdc); //创建内存DC HBITMAP hbitmap=::CreateCompatibleBitmap(bitcdc,width,height); //创建兼容位图 SelectObject(hDC,hbit……
下面需要释放资源 DeleteObject(hbitmap); DeleteDC(hmemdc); ReleaseDC(hWnd, bitcdc); 还有,我之前截视频流的时候也会黑屏,根据不同的接入硬件解决办法不同(有的要保证控件全被覆盖才能正常截,有的要保证不能部分覆盖才能正常截。)
schlafenhamster 2013-03-06
  • 打赏
  • 举报
回复
这就是为什么 用 printwindow的原因!
zgl7903 2013-03-05
  • 打赏
  • 举报
回复
是不是HDC中没有选人合适的位图?或者选人的位图是单色的
cluonani 2013-03-05
  • 打赏
  • 举报
回复
引用 1 楼 Bokutake 的回复:
PrintScreen不会立即返回的吧,可能会卡住消息循环。 建议你创建一个新的线程,在线程函数里PrintScreen。MFC编程最好用AfxBeginThread 另外如果你用VC.NET以及以后的版本是可以直接用PrintScreen这个API而不用LoadLibrary、GetProcAddress什么的。
PrintScreen 是截取屏幕吧。。不是截取指定窗口吧
辰岡墨竹 2013-03-05
  • 打赏
  • 举报
回复
PrintScreen不会立即返回的吧,可能会卡住消息循环。 建议你创建一个新的线程,在线程函数里PrintScreen。MFC编程最好用AfxBeginThread 另外如果你用VC.NET以及以后的版本是可以直接用PrintScreen这个API而不用LoadLibrary、GetProcAddress什么的。
Eleven 2013-03-05
  • 打赏
  • 举报
回复
你截得是子控件窗口?
yuyuntao2003 2013-03-05
  • 打赏
  • 举报
回复
我也遇到了这个问题,在线等.高手们帮下忙吧.
辰岡墨竹 2013-03-05
  • 打赏
  • 举报
回复
这部分程序初始化,准备一个内存DC存图像。
    CDC memDC;//内存DC
    memDC.CreateCompatibleDC(pDC);
    
    CBitmap memBitmap, *oldmemBitmap;、
    memBitmap.CreateCompatibleBitmap(pDC, width, height);

    oldmemBitmap = memDC.SelectObject(&memBitmap);
这个部分就是截图的:

    CDC *pDC = CDC::FromHandle(::GetDC(hwnd));

    int BitPerPixel = pDC->GetDeviceCaps(BITSPIXEL);
 if(width==0 && height==0)
 {
  width = pDC->GetDeviceCaps(HORZRES);
  height= pDC->GetDeviceCaps(VERTRES);
 }
    memDC.BitBlt(0, 0, Width, Height, pDC, 0, 0, SRCCOPY);
pDC->DeleteObject();
销毁的时候: memDC.SelectObject(oldmemBitmap); 每次贴图区域OnDraw或OnPaint时, 把MemDC的图Bitblt过去。这样的方法比较规范。 你用的PrintScreen是微软没有公开的函数,使用时可能需要考虑许多别的情况,比如绘制的同步什么的,也许那些窗口还来不及绘制自己就函数就结束了。
cluonani 2013-03-05
  • 打赏
  • 举报
回复
引用 6 楼 spiderlily 的回复:
HDC hDC=CreateCompatibleDC(bitcdc); //创建内存DC HBITMAP hbitmap=::CreateCompatibleBitmap(bitcdc,width,height); //创建兼容位图 SelectObject(hDC,hbitmap); //把位图选进内存D……
这个不行。黑色的。也是偶尔能截成功一次。
cluonani 2013-03-05
  • 打赏
  • 举报
回复
引用 7 楼 schlafenhamster 的回复:
p(hWnd,hDC,0); 这个 hWnd 会不会有问题, 不是 控件的 ?
不是控件的,是整个窗口的。hwnd应该没什么问题,因为截十几次,可以正确截取一次。 其他的都是黑色的。
cluonani 2013-03-05
  • 打赏
  • 举报
回复
引用 4 楼 VisualEleven 的回复:
你截得是子控件窗口?
不是,我是想后台截图,窗口被遮住,但是没有最小化。vb用printwindow可以解出来,vc却不行。 好像网上搜索了一下,很多都有这个问题。 我可能表述不清楚,你谷歌搜索一下。 printwindow 黑色
schlafenhamster 2013-03-05
  • 打赏
  • 举报
回复
如果 控件 可见 ,不需要 PrintWindow
schlafenhamster 2013-03-05
  • 打赏
  • 举报
回复
p(hWnd,hDC,0); 这个 hWnd 会不会有问题, 不是 控件的 ?
spiderlily 2013-03-05
  • 打赏
  • 举报
回复
HDC hDC=CreateCompatibleDC(bitcdc); //创建内存DC HBITMAP hbitmap=::CreateCompatibleBitmap(bitcdc,width,height); //创建兼容位图 SelectObject(hDC,hbitmap); //把位图选进内存DC p(hWnd,hDC,0);

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧