我想将屏幕某个窗口的图像数据拷贝到我自己定义的一个内存缓冲区中,我曾经试着通过窗口的DC,利用GetPixel函数得到每个点的数据,但这样太慢了,后来又通过创建一个内存兼容DC和兼容位图,将窗口的数据先拷贝到内存兼容位图中,再通过GetDIBits获取,但总是不成功,请问有比较快的方法吗?
解决方案 »
- 列表视图控件中如何设置两行标题,请高手指点!
- 如何实现Tab控件上两个对话框的控件之间相互赋值
- CDialog内建CProgressCtrl,CDialog无标题栏,当移动CProgressCtrl时,怎样移动CDialog?
- 如何共享使用DLL中的对话框在多个调用程序间通过消息传递数据
- 如何让声卡发出指定频率指定时间的声音?
- 菜鸟初学vc,我觉得button1上的字体不好看,我想换一下,怎么换啊??请您帮忙啊?
- 如何在程序中让所有的控件背景透明?
- 请教关于获取NVIDIA独显硬件ID问题
- 'DDX_FieldDateTimeCtrl' : undeclared identifier?
- 如何在视图类中响应定时器函数;
- 中文为什么显示乱码
- 请教一个小问题
{
HWND hwnd = ::GetDesktopWindow();
HDC hsrc = ::GetDC(hwnd);
HDC hmemdc = ::CreateCompatibleDC(hsrc);
RECT rc; ::GetWindowRect(hwnd,&rc);
SIZE sz;sz.cx=rc.right-rc.left;sz.cy=rc.bottom-rc.top;
HBITMAP hbmp = ::CreateCompatibleBitmap(hsrc,sz.cx,sz.cy);
HGDIOBJ holdbmp = ::SelectObject(hmemdc,hbmp);
::BitBlt(hmemdc,0,0,sz.cx,sz.cy,hsrc,rc.left,rc.top,SRCCOPY);
::SelectObject(hmemdc,holdbmp);
::DeleteObject(hmemdc);
::ReleaseDC(hwnd,hsrc);
return hbmp;
}