该代码为把当前屏幕截图并保存为文件的代码。
SaveBitmapToFile.cpp文件在我前面一章文章中:点此进入
#include "SaveBitmapToFile.cpp"
#include <windows.h>
#define IDC_SAVE 1
#define IDC_FILEPATH 2
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) ;
void InitWindow(HWND hWnd, LPARAM lParam);
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("test") ;
HWND hWnd ;
MSG msg ;
WNDCLASS wndclass ;
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = szAppName ;
if (!RegisterClass (&wndclass))
{
MessageBox (NULL, TEXT ("注册窗口类失败!"), szAppName, MB_ICONERROR) ;
return 0 ;
}
hWnd = CreateWindow (szAppName,
TEXT ("test"),
WS_OVERLAPPEDWINDOW,
100,
100,
350,
100,
NULL,
NULL,
hInstance,
NULL) ;
ShowWindow (hWnd, iCmdShow) ;
UpdateWindow (hWnd) ;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc ;
PAINTSTRUCT ps;
HBITMAP hBitmap;
HDC hdcMem;
static int screenx, screeny;
static char filePath[MAXPNAMELEN];
switch (message)
{
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
EndPaint(hWnd,&ps);
return 0;
case WM_CREATE:
InitWindow(hWnd, lParam);
screenx = GetSystemMetrics(SM_CXSCREEN);
screeny = GetSystemMetrics(SM_CYSCREEN);
return 0;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDC_SAVE:
GetDlgItemText(hWnd, IDC_FILEPATH, (LPWSTR)filePath, sizeof(filePath));
ShowWindow(hWnd, SW_HIDE);
Sleep(500);
hdc = GetDC(NULL);
hBitmap = CreateCompatibleBitmap(hdc, screenx, screeny);
hdcMem = CreateCompatibleDC(hdc);
SelectObject(hdcMem, hBitmap);
BitBlt(hdcMem, 0, 0, screenx, screeny, hdc, 0, 0, SRCCOPY);
SaveBitmapToFile((LPCTSTR)filePath, hdc, hBitmap);
ReleaseDC(hWnd, hdcMem);
ReleaseDC(hWnd, hdc);
ShowWindow(hWnd, SW_SHOW);
MessageBox(hWnd, TEXT("截图完成"), TEXT("提示"), MB_OK);
return 0;
}
return 0;
case WM_DESTROY:
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hWnd, message, wParam, lParam) ;
}
void InitWindow(HWND hWnd, LPARAM lParam)
{
HWND btnSave, txtFilePath;
btnSave = CreateWindow(TEXT("BUTTON"),
TEXT("Save"),
WS_CHILD | BS_PUSHBUTTON,
20,
30,
100,
25,
hWnd,
(HMENU)IDC_SAVE,
((LPCREATESTRUCT) lParam)->hInstance,
NULL);
txtFilePath = CreateWindow(TEXT("EDIT"),
TEXT("d:\\test.bmp"),
WS_CHILD | WS_BORDER,
20,
1,
300,
25,
hWnd,
(HMENU)IDC_FILEPATH,
((LPCREATESTRUCT) lParam)->hInstance,
NULL);
ShowWindow(btnSave, SW_SHOW);
ShowWindow(txtFilePath, SW_SHOW);
}