19,468
社区成员
发帖
与我相关
我的任务
分享
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
//static BITMAPINFO info;
switch (message)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// 分析菜单选择:
switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
break;
case IDM_EXIT:
{
//
//HDC hdcScreen = CreateDC(_T("DISPLAY"), NULL, NULL, NULL);
HDC hdcScreen = GetDC(NULL);
HDC hdc = GetDC(hWnd);
//一个memory dc和一个bitmap(ddb)
HDC hCompatibleDC = CreateCompatibleDC(hdcScreen);
HBITMAP hBitMap = CreateCompatibleBitmap(hdcScreen, GetDeviceCaps(hdcScreen, HORZRES), GetDeviceCaps(hdcScreen, VERTRES));
::SelectObject(hCompatibleDC, hBitMap);
//拷贝surface的数据到bitmap里
::BitBlt(hCompatibleDC, 0, 0, GetDeviceCaps(hdcScreen, HORZRES), GetDeviceCaps(hdcScreen, VERTRES), hdcScreen, 0, 0, SRCCOPY);
//ddb->dib
BITMAPINFO info;
::memset(&info, 0, sizeof(info));
info.bmiHeader.biBitCount = 4;
info.bmiHeader.biSize = sizeof(info.bmiHeader);
info.bmiHeader.biPlanes = 1;
info.bmiHeader.biCompression = BI_RGB;
info.bmiHeader.biWidth = GetDeviceCaps(hdcScreen, HORZRES);
info.bmiHeader.biHeight = GetDeviceCaps(hdcScreen, VERTRES);
char *buff = new char[GetDeviceCaps(hdcScreen, HORZRES) * GetDeviceCaps(hdcScreen, VERTRES) * 3];
if(!GetDIBits(hCompatibleDC, hBitMap, 0, GetDeviceCaps(hdcScreen, VERTRES), buff, &info, DIB_PAL_COLORS))
::MessageBox(hWnd, NULL, NULL, MB_OK);;
//dib->surface
SetDIBitsToDevice(hdc, 0, 0, GetDeviceCaps(hdcScreen, HORZRES), GetDeviceCaps(hdcScreen, VERTRES), 0, 0, 0, GetDeviceCaps(hdcScreen, VERTRES), buff, &info, DIB_PAL_COLORS);
/* */
//释放
delete []buff;
buff = 0;
::DeleteDC(hCompatibleDC);
::DeleteObject(hBitMap);
ReleaseDC(hWnd, hdc);
ReleaseDC(NULL, hdcScreen);
//DeleteDC(hdcScreen);
}//DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: 在此添加任意绘图代码...
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}