|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- char* getScreen(long left,long top,long right,long bottom)
- {
- HWND DeskWnd=::GetDesktopWindow();//获取桌面窗口句柄
- RECT DeskRC;
- DeskRC.left = left;
- DeskRC.top = top;
- DeskRC.right = right;
- DeskRC.bottom = bottom;
- // ::GetClientRect(DeskWnd,&DeskRC);//获取窗口大小
- HDC DeskDC=GetDC(DeskWnd);//获取窗口DC
- HBITMAP DeskBmp=::CreateCompatibleBitmap(DeskDC,DeskRC.right-DeskRC.left,DeskRC.bottom-DeskRC.top);//兼容位图
- HDC memDC=::CreateCompatibleDC(DeskDC);//兼容DC
- SelectObject(memDC,DeskBmp);//把兼容位图选入兼容DC中
- BitBlt(memDC,0,0,right-DeskRC.left,DeskRC.bottom-DeskRC.top,DeskDC,DeskRC.left,DeskRC.top,SRCCOPY);//拷贝DC
- BITMAP bmInfo;
- DWORD bmDataSize;
- char *bmData;//位图数据
- GetObject(DeskBmp,sizeof(BITMAP),&bmInfo);//根据位图句柄,获取位图信息
- bmDataSize=bmInfo.bmWidthBytes*bmInfo.bmHeight;//计算位图数据大小
- bmData=new char[bmDataSize];//分配数据
- BITMAPFILEHEADER bfh;//位图文件头
- bfh.bfType=0x4d42;
- bfh.bfSize=bmDataSize+54;
- bfh.bfReserved1=0;
- bfh.bfReserved2=0;
- bfh.bfOffBits=54;
- BITMAPINFOHEADER bih;//位图信息头
- bih.biSize=40;
- bih.biWidth=bmInfo.bmWidth;
- bih.biHeight=bmInfo.bmHeight;
- bih.biPlanes=1;
- bih.biBitCount=24;
- bih.biCompression=BI_RGB;
- bih.biSizeImage=bmDataSize;
- bih.biXPelsPerMeter=0;
- bih.biYPelsPerMeter=0;
- bih.biClrUsed=0;
- bih.biClrImportant=0;
- ::GetDIBits(DeskDC,DeskBmp,0,bmInfo.bmHeight,bmData,(BITMAPINFO *)&bih,DIB_RGB_COLORS);//获取位图数据部分
- sumSize = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+bmDataSize;
- char * stream = new char[sumSize];
- memcpy(stream,&bfh,sizeof(BITMAPFILEHEADER));
- memcpy(stream+sizeof(BITMAPFILEHEADER),&bih,sizeof(BITMAPINFOHEADER));
- memcpy(stream+sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER),bmData,bmDataSize);
- HANDLE hFile=CreateFile(TEXT("C:\\Screen.bmp"),GENERIC_WRITE,0,NULL,CREATE_ALWAYS,
- FILE_ATTRIBUTE_NORMAL,0);//创建文件
- DWORD dwSize;
- WriteFile(hFile,(void *)stream,sumSize,&dwSize,0);//写入位图文件头
- ::CloseHandle(hFile);//关闭文件句柄
- return stream;
- }
复制代码 懂的不懂的都来帮个忙, 怎么把上面stream指向的一个完整位图显示在任意窗口, 不带MFC. 研究一晚了, 只好来求助!. 从磁盘加载, 从资源加载都显示了, 这内存中没思路了! |
|