用Sleep()的吧?用Sleep()时当前应用程序被锁住。
解决方案 »
- vc++2008环境下如何创建浮动窗口?
- 求助大神帮忙指点。。
- vs2010单文档程序如何使用datagrid控件
- Edit文本框背景变成透明后,输入的字删除不了,并且彼此覆盖。
- RadioButton分组之后出现问题
- 怎样实现在界面上能选择不同目录
- 请问:如何查询消息队列中的消息!
- 自从小弟装了vc6.0以后,在访问网页时经常错误,怎么办啊?高手指点!
- 谁知道DeviceIoControl()这个函数怎么用?
- 高分请教一个问题,高手请进
- 高分求教!想处理一个100MB以上的日志文本,分n个线程去分n段读取每行数据分析处理后插入数据库,如何做最快性能最高?
- 超级菜鸟问题:请详细解释“char sDir[_MAX_DIR]”的意义及其用途,一定给分!!!
HDC hScrDC, hMemDC;
// 位图句柄
HBITMAP hBitmap, hOldBitmap;
// 屏幕分辨率
int xScrn, yScrn;
//设备描述表
HDC hDC;
//当前显示分辨率下每个像像素所占字节?
int iBits;
//位图中每个像素所占字节
WORD wBitCount;
//定义调色板大小, 位图中像素字节大小 ,位图文件大小 , 写入文件字节数
DWORD dwPaletteSize=0, dwBmBitsSize, dwBmpSize;
DWORD dwDIBSize;
//位图属性结构
BITMAP Bitmap;
//全屏区域
CRect rcArea;
//位图信息头结构
BITMAPINFOHEADER bi;
//指向位图信息头结构
LPBITMAPINFOHEADER lpbi;
// Header for Bitmap file
BITMAPFILEHEADER bmfHdr;
//定义文件,分配内存句柄,调色板句柄
HPALETTE hPal,hOldPal=NULL; //为屏幕创建设备描述表
hScrDC = CreateDC("DISPLAY", NULL, NULL, NULL); // 获得屏幕分辨率
xScrn = GetDeviceCaps(hScrDC, HORZRES);
yScrn = GetDeviceCaps(hScrDC, VERTRES); //设定全屏区域
rcArea.left=0;
rcArea.top=0;
rcArea.right=xScrn;
rcArea.bottom=yScrn; //为屏幕设备描述表创建兼容的内存设备描述表
hMemDC = CreateCompatibleDC(hScrDC); // 创建一个与屏幕设备描述表兼容的位图
hBitmap = CreateCompatibleBitmap (hScrDC, rcArea.Width (), rcArea.Height ()); // 把新位图选到内存设备描述表中
hOldBitmap = (HBITMAP) SelectObject(hMemDC, hBitmap); // 把屏幕设备描述表拷贝到内存设备描述表中
BitBlt(hMemDC, 0, 0, rcArea.Width (), rcArea.Height (),
hScrDC, rcArea.left, rcArea.top, SRCCOPY); //得到屏幕位图的句柄
hBitmap = (HBITMAP) SelectObject(hMemDC, hOldBitmap); //计算位图每个像素所占字节数
iBits = GetDeviceCaps(hScrDC, BITSPIXEL);
iBits = iBits * GetDeviceCaps(hScrDC, PLANES);
if (iBits <= 1)
wBitCount = 1;
else if (iBits <= 4)
wBitCount = 4;
else if (iBits <= 8)
wBitCount = 8;
else if (iBits <= 24)
wBitCount = 24;
else
wBitCount = iBits; //计算调色板大小
if (wBitCount <= 8)
dwPaletteSize = (1 << wBitCount) * sizeof(RGBQUAD); //设置位图信息头结构
GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&Bitmap);
bi.biSize = sizeof(BITMAPINFOHEADER);
bi.biWidth = Bitmap.bmWidth;
bi.biHeight = Bitmap.bmHeight;
bi.biPlanes = 1;
bi.biBitCount = wBitCount;
bi.biCompression = BI_RGB;
bi.biSizeImage = 0;
bi.biXPelsPerMeter = 0;
bi.biYPelsPerMeter = 0;
bi.biClrUsed = 0;
bi.biClrImportant = 0; dwBmBitsSize = ((Bitmap.bmWidth * wBitCount+31)/32)* 4 *Bitmap.bmHeight;
dwBmpSize = dwBmBitsSize + dwPaletteSize + sizeof(BITMAPINFOHEADER); //为位图内容分配内存
lpbi = (LPBITMAPINFOHEADER)new char[dwBmpSize];
*lpbi = bi; // 处理调色板
hPal = (HPALETTE) GetStockObject(DEFAULT_PALETTE);
if (hPal){
hDC = ::GetDC (NULL);
hOldPal = ::SelectPalette(hDC, hPal, FALSE);
RealizePalette(hDC);
}
// 获取该调色板下新的像素值
::GetDIBits(
hDC,
hBitmap,
0,
(UINT) Bitmap.bmHeight,
(LPSTR)lpbi + sizeof(BITMAPINFOHEADER) + dwPaletteSize,
(BITMAPINFO *)lpbi,
DIB_RGB_COLORS
); //恢复调色板
if (hOldPal){
SelectPalette(hDC, hOldPal, TRUE);
RealizePalette(hDC);
::ReleaseDC(NULL, hDC);
} //清除
DeleteObject (hBitmap);
DeleteDC(hScrDC);
DeleteDC(hMemDC);
delete []lpbi;