GDI 双缓冲贴图

/*---------------------------------------
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) ;
}

中间发现个错误,拿下来修改后,再发上去,卧槽,他妈的格式乱了;

改了半天格式,累觉不爱啊!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值