EVC实现WIN CE下截屏

    这几天在看老大写的博客(http://blog.csdn.net/norains ,八卦一下我老大在CSDN上小有名气已经成为了专家), 虽然跟着老大一年多了学到不少的东西但是发现自己要学的东西还有很多很多,我知道“冰冻三尺非一日之寒”,我也相信每个人都是从菜鸟开始做起,最后才能成为大师的。

     好了,不说那么废话了。下面是我转载的一段关于在WINCE下截屏的一段实现代码:

 

void OnScreenSave(const char *filename) { HDC hScrDC, hMemDC; int width, height; //the pointer will save all pixel point's color value BYTE *lpBitmapBits = NULL; //creates a device context for the screen device hScrDC = CreateDC(_T("DISPLAY"), NULL, NULL, NULL); //get the screen point size width = GetDeviceCaps(hScrDC, HORZRES); height = GetDeviceCaps(hScrDC, VERTRES); //creates a memory device context (DC) compatible with the screen device(hScrDC) hMemDC = CreateCompatibleDC(hScrDC); //initialise the struct BITMAPINFO for the bimap infomation, //in order to use the function CreateDIBSection //on wince os, each pixel stored by 24 bits(biBitCount=24) //and no compressing(biCompression=0) BITMAPINFO RGB24BitsBITMAPINFO; ZeroMemory(&RGB24BitsBITMAPINFO, sizeof(BITMAPINFO)); RGB24BitsBITMAPINFO.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); RGB24BitsBITMAPINFO.bmiHeader.biWidth = width; RGB24BitsBITMAPINFO.bmiHeader.biHeight = height; RGB24BitsBITMAPINFO.bmiHeader.biPlanes = 1; RGB24BitsBITMAPINFO.bmiHeader.biBitCount = 24; //use the function CreateDIBSection and SelectObject //in order to get the bimap pointer : lpBitmapBits HBITMAP directBmp = CreateDIBSection(hMemDC, (BITMAPINFO*)&RGB24BitsBITMAPINFO, DIB_RGB_COLORS, (void **)&lpBitmapBits, NULL, 0); HGDIOBJ previousObject = SelectObject(hMemDC, directBmp); // copy the screen dc to the memory dc BitBlt(hMemDC, 0, 0, width, height, hScrDC, 0, 0, SRCCOPY); //if you only want to get the every pixel color value, //you can begin here and the following part of this function will be unuseful; //the following part is in order to write file; //bimap file header in order to write bmp file BITMAPFILEHEADER bmBITMAPFILEHEADER; ZeroMemory(&bmBITMAPFILEHEADER, sizeof(BITMAPFILEHEADER)); bmBITMAPFILEHEADER.bfType = 0x4d42; //bmp bmBITMAPFILEHEADER.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER); bmBITMAPFILEHEADER.bfSize = bmBITMAPFILEHEADER.bfOffBits + ((width*height)*3); ///3=(24 / 8) //write into file FILE *mStream = NULL; if((mStream = fopen(filename, "wb"))) { //write bitmap file header fwrite(&bmBITMAPFILEHEADER, sizeof(BITMAPFILEHEADER), 1, mStream); //write bitmap info fwrite(&(RGB24BitsBITMAPINFO.bmiHeader), sizeof(BITMAPINFOHEADER), 1, mStream); //write bitmap pixels data fwrite(lpBitmapBits, 3*width*height, 1, mStream); //close file fclose(mStream); } //delete DeleteObject(hMemDC); DeleteObject(hScrDC); DeleteObject(directBmp); DeleteObject(previousObject); }

 

 

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { const char filename[] = "//nand//screen.bmp"; OnScreenSave(filename); return 0; }

 

实现代码原帖地址:http://blog.csdn.net/norains/archive/2006/04/29/697108.aspx

你可能感兴趣的:(function,File,null,WinCE,colors,winapi)