Click here to Skip to main content
15,890,609 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
C++
#include <windows.h>

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 ("This program requires Windows NT!"),

			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) ;


	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)

{

	static int            cxClient, cyClient, cxSource, cySource ;

	HDC                   hdcClient, hdcWindow ;

	int                   x, y ;

	PAINTSTRUCT           ps ;

	RECT r;

	HDC hdcMem;


	switch (message)

	{

	case WM_CREATE:

		cxSource = GetSystemMetrics (SM_CXSIZEFRAME) +

			GetSystemMetrics (SM_CXSIZE) ;

		cySource = GetSystemMetrics (SM_CYSIZEFRAME) +

			GetSystemMetrics (SM_CYCAPTION) ;

		return 0 ;

	case   WM_SIZE:

		cxClient = LOWORD (lParam) ;

		cyClient = HIWORD (lParam) ;

		return 0 ;


	case   WM_PAINT:




		hdcClient = BeginPaint (hwnd, &ps) ;

		/*hdcClient = GetDC(hwnd);*/

		r=ps.rcPaint;
		hdcMem = CreateCompatibleDC(hdcClient);

		hdcWindow = GetWindowDC (hwnd) ;



		for (y = 0 ; y < cyClient ; y += cySource)

			for (x = 0 ; x < cxClient ; x += cxSource)
				BitBlt (hdcMem, x, y, cxSource, cySource,

					hdcWindow, 0, 0, SRCCOPY) ;
			// where the problem exists

			BitBlt(hdcClient,
				r.left,
				r.top,
				r.right-r.left,
				r.bottom-r.top,
				hdcMem,
				r.left,
				r.top,
				SRCCOPY);

			//////////////////////////////////////////////////////////////////////////
			ReleaseDC (hwnd, hdcWindow) ;

			EndPaint (hwnd, &ps) ;

			return 0 ;


	case   WM_DESTROY:

		PostQuitMessage (0) ;

		return 0 ;

	}

	return DefWindowProc (hwnd, message, wParam, lParam) ;

}

I try to add a code below the for in the WM_PAINT ,that is
VB
BitBlt(hdcClient,
    r.left,
    r.top,
    r.right-r.left,
    r.bottom-r.top,
    hdcMem,
    r.left,
    r.top,
    SRCCOPY);

,however this leads to the fail of display on the screen .I wonder where is the error.Hope to help me.Thank you .
Posted
Comments
[no name] 30-Jun-12 8:25am    
Out of the thousands of errors it could be you expect some one here to guess what it is?

1 solution

The problem is that your painting only the hdcMem. You need to blast all bit out to your hdcWindow.
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900