屏幕及窗口拷贝
来源:互联网 发布:淘宝搜索什么会有电话 编辑:程序博客网 时间:2024/05/29 17:46
以下来自于:http://www.codeguru.com/forum/showthread.php?t=244907
#define PW_WINDOW 9001
#define PW_CLIENT 9002
HBITMAP CMyProgramDlg::CopyScreenToBitmap(LPRECT lpRect)
{
HDC hScrDC, hMemDC; // screen DC and memory DC
int nX, nY, nX2, nY2; // coordinates of rectangle to grab
int nWidth, nHeight; // DIB width and height
int xScrn, yScrn; // screen resolution
HGDIOBJ hOldBitmap , hBitmap;
// check for an empty rectangle
if (IsRectEmpty(lpRect))
return NULL;
// create a DC for the screen and create
// a memory DC compatible to screen DC
hScrDC = CreateDC("DISPLAY", NULL, NULL, NULL);
hMemDC = CreateCompatibleDC(hScrDC); // get points of rectangle to grab
nX = lpRect->left;
nY = lpRect->top;
nX2 = lpRect->right;
nY2 = lpRect->bottom; // get screen resolution
xScrn = GetDeviceCaps(hScrDC, HORZRES);
yScrn = GetDeviceCaps(hScrDC, VERTRES);
//make sure bitmap rectangle is visible
if (nX < 0)
nX = 0;
if (nY < 0)
nY = 0;
if (nX2 > xScrn)
nX2 = xScrn;
if (nY2 > yScrn)
nY2 = yScrn;
nWidth = nX2 - nX;
nHeight = nY2 - nY;
// create a bitmap compatible with the screen DC
hBitmap = CreateCompatibleBitmap(hScrDC, nWidth, nHeight);
// select new bitmap into memory DC
hOldBitmap = SelectObject (hMemDC, hBitmap);
// bitblt screen DC to memory DC
BitBlt(hMemDC, 0, 0, nWidth, nHeight, hScrDC, nX, nY, SRCCOPY);
// select old bitmap back into memory DC and get handle to
// bitmap of the screen
hBitmap = SelectObject(hMemDC, hOldBitmap);
// clean up
DeleteDC(hScrDC);
DeleteDC(hMemDC);
// return handle to the bitmap
return (HBITMAP)hBitmap;
}
HBITMAP CYourProgramDlg::CopyWindowToBitmap(CWnd* wnd , HWND hWnd, WORD fPrintArea)
{
HBITMAP hBitmap = NULL; // handle to device-dependent bitmap
// check for a valid window handle
if (!hWnd)
return NULL;
RECT rectWnd;
::GetWindowRect(hWnd, &rectWnd);
switch (fPrintArea)
{
case PW_WINDOW: // copy entire window
{
// get the window rectangle
// get the bitmap of that window by calling
// CopyScreenToBitmap and passing it the window rect
// GetWindowRect(&rectWnd);
hBitmap = CopyScreenToBitmap(&rectWnd);
break;
}
case PW_CLIENT: // copy client area
{
RECT rectClient;
POINT pt1, pt2; // get client dimensions
wnd->GetClientRect(&rectClient); // convert client coords to screen coords
pt1.x = rectClient.left;
pt1.y = rectClient.top;
pt2.x = rectClient.right;
pt2.y = rectClient.bottom;
wnd->ClientToScreen(&pt1);
wnd->ClientToScreen(&pt2);
rectClient.left = pt1.x;
rectClient.top = pt1.y;
rectClient.right = pt2.x;
rectClient.bottom = pt2.y;
// get the bitmap of the client area by calling
// CopyScreenToBitmap and passing it the client rect
hBitmap = CopyScreenToBitmap(&rectClient);
break;
}
default: // invalid print area
return NULL;
} // return handle to the bitmap
return hBitmap;
}A good usage is :
Code:
HBITMAP hBitmap = CopyWindowToBitmap(this,GetDesktopWindow()->m_hWnd,PW_
- 屏幕及窗口拷贝
- wince窗口 屏幕拷贝为位图
- wince窗口 屏幕拷贝为位图
- 修改win32平台下窗口大小,及屏幕适配
- 压缩屏幕拷贝
- c#屏幕拷贝1
- c#屏幕拷贝2
- 屏幕拷贝源代码
- C#屏幕拷贝源码
- 自定义拷贝粘贴窗口
- 自定义拷贝粘贴窗口
- 自定义拷贝粘贴窗口
- 自定义拷贝粘贴窗口
- vmware ubuntu14.04虚拟机不能正常拷贝文件到windows且不能自适应虚拟机屏幕窗口自动变化的解决办法
- 屏幕拷贝程序(象素拷贝)
- Brew的屏幕的拷贝
- 禁止窗口移出屏幕
- 浅谈:屏幕与窗口
- 徐家骏:华为十年感悟(转载)
- 禁用U盘和移动硬盘的几种方法
- InnoDB 启动选项
- 字符编码简介
- tomcat java.io.EOFException解决方法
- 屏幕及窗口拷贝
- shell程序设计(一)
- 动态加载JS
- html中的fieldset标签
- [zz] 分析Android 根文件系统启动过程(init守护进程分析)
- 购物车实现的三种机理
- 有关session的知识点
- typedef on a template
- 多重继承