LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
RECT rect;
TCHAR szHello[MAX_LOADSTRING];
LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);
static HDC hdc,hMemDC,hBmpDC;
static HBITMAP hBitmap;
static HBITMAP hMemDCBmp;
switch (message)
{
case WM_CREATE:
//读取资源位图
hBitmap=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP1) );
/*
hBmpDC=CreateCompatibleDC(hdc);
SelectObject(hBmpDC,hBitmap);
*/
return 0;
case WM_ERASEBKGND:
return 0;
case WM_SIZING:
return 0;
case WM_SIZE:
return 0;
case WM_PAINT:
hdc=BeginPaint(hWnd, &ps);
{
GetClientRect(hWnd,&rect);
//创建内存DC并将位图句柄选入
hBmpDC=CreateCompatibleDC(hdc);
SelectObject(hBmpDC,hBitmap);
//建立新一个内存DC和位图句柄
hMemDC=::CreateCompatibleDC(hdc);
hMemDCBmp=CreateCompatibleBitmap(hdc,rect.right-rect.left,rect.bottom-rect.top);
HGDIOBJ hBjOld=::SelectObject(hMemDC,hMemDCBmp);
//先在内存DC上进行整个的画刷填充
FillRect(hMemDC,&rect,(HBRUSH)GetStockObject(WHITE_BRUSH));
BitBlt(hMemDC,0,0,rect.right-rect.left,rect.bottom-rect.top,hBmpDC,0,0,SRCCOPY);
BitBlt(hdc,0,0,rect.right-rect.left,rect.bottom-rect.top,hMemDC,0,0,SRCCOPY);
//func(rect);
SelectObject(hMemDC,hBjOld);
DeleteObject(hMemDCBmp);
DeleteDC(hBmpDC);
DeleteDC(hMemDC);
}
EndPaint(hWnd,&ps);
return 0;
case WM_DESTROY:
DeleteObject(hBitmap);
/*
DeleteObject(hBitmap);
DeleteObject(hMemDCBmp);
DeleteDC(hBmpDC);
DeleteDC(hMemDC);
*/
PostQuitMessage(0);
return 0;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}