/*---------------------------------------
GDI 双缓冲DEMO
draw.c
Create By ZhouJun
2014-5-28
---------------------------------------*/
#include #include "resource.h"
//
HINSTANCE g_hInst = NULL;
HWND g_hWnd = NULL;
//function
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName [] = TEXT ("BitBlt") ;
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_INFORMATION) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = szAppName ;
if (!RegisterClass (&wndclass))
{
MessageBox (NULL, TEXT ("Register failed !"),szAppName, MB_ICONERROR) ;
return 0 ;
}
hwnd = CreateWindow (szAppName, TEXT ("BitBlt Demo"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT,
CW_USEDEFAULT,NULL, NULL, hInstance, NULL) ;
if(!hwnd)
{
MessageBox (NULL, TEXT ("CreateWindow failed !"),szAppName, MB_ICONERROR) ;
return 0;
}
g_hWnd = hwnd;
g_hInst = hInstance;
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}
HBITMAP hBmpBackground = NULL;
HBITMAP hBmp = NULL;
void DrawBMPToMem(HDC hdc)
{
HDC hMemDC = NULL;
BITMAP BMP;
hMemDC = CreateCompatibleDC(hdc);
GetObject(hBmpBackground,sizeof(BITMAP),&BMP);
SelectObject(hMemDC,hBmpBackground);
BitBlt(hdc,0,0,BMP.bmWidth,BMP.bmHeight,hMemDC,0,0,SRCCOPY); //写入缓冲内存
GetObject(hBmp,sizeof(BITMAP),&BMP);
SelectObject(hMemDC,hBmp);
BitBlt(hdc,0,0,BMP.bmWidth,BMP.bmHeight,hMemDC,0,0,SRCCOPY); //写入缓冲内存
DeleteDC(hMemDC);
}
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static int nWidth, nHeight;
HDC hdc;
PAINTSTRUCT ps ;
RECT rt;
switch (message)
{
case WM_CREATE:
{
hBmpBackground = LoadBitmap( ((LPCREATESTRUCT) lParam)->hInstance, MAKEINTRESOURCE(IDB_BITMAP2));
hBmp = LoadBitmap( ((LPCREATESTRUCT) lParam)->hInstance, MAKEINTRESOURCE(IDB_BITMAP3));
}
return 0 ;
case WM_PAINT:
{
HDC hMemDC = NULL;
HBITMAP hBitmap = NULL;
hdc = BeginPaint (hwnd, &ps);
GetClientRect(g_hWnd, &rt);
nWidth = rt.right - rt.left;
nHeight = rt.bottom - rt.top;
hMemDC = CreateCompatibleDC(hdc);
hBitmap = CreateCompatibleBitmap(hdc, nWidth, nHeight);
SelectObject(hMemDC,hBitmap);
DrawBMPToMem(hMemDC);
BitBlt(hdc,0,0,nWidth,nHeight,hMemDC,0,0,SRCCOPY);//贴到窗口
EndPaint (hwnd, &ps) ;
}
return 0 ;
case WM_DESTROY:
{
if(hBmpBackground)
{
DeleteObject(hBmpBackground);
hBmpBackground = NULL;
}
if(hBmp)
{
DeleteObject(hBmp);
hBmp = NULL;
}
PostQuitMessage (0) ;
}
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}
中间发现个错误,拿下来修改后,再发上去,卧槽,他妈的格式乱了;
改了半天格式,累觉不爱啊!