位图学习

位图程序1:

/*----------------------------------------------------------------------
   	BITBLT.C -- 	BitBlt Demonstration
               						(c) Charles Petzold, 1998
  -------------------------------------------------------------------*/

#include <windows.h>
#include "resource.h"
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    			PSTR szCmdLine, int iCmdShow)
{
     	static TCHAR 	szAppName [] = TEXT ("HelloBit") ;
     	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  		= szAppName;
     	wndclass.lpszClassName 		= szAppName ;

   	if (!RegisterClass (&wndclass))
     	{
          		MessageBox (NULL, TEXT ("This program requires Windows NT!"),
                      							szAppName, MB_ICONERROR) ;
          		return 0 ;
     }

     	hwnd = CreateWindow (	szAppName, TEXT ("HelloBit"),
                              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  HBITMAP   hBitmap;
		static  HDC       hdcMem;
		static  int       cxBitmap, cyBitmap, cxClient, cyClient, iSize = IDM_BIG;
		static  TCHAR*    szText  = TEXT("Hello, world!");
				HDC       hdc;
				HMENU     hMenu;
				int       x,y;
		  PAINTSTRUCT     ps;
		        SIZE      size;

		switch(message)
		{
		case  WM_CREATE:
			     hdc = GetDC(hwnd);
				 hdcMem = CreateCompatibleDC(hdc);

				 GetTextExtentPoint32(hdc, szText, lstrlen(szText), &size);//omputes the width and height of the specified string of text.
				 cxBitmap = size.cx;
				 cyBitmap = size.cy;
				 hBitmap = CreateCompatibleBitmap(hdc, cxBitmap, cyBitmap);

				 ReleaseDC(hwnd, hdc);
				 SelectObject(hdcMem, hBitmap);
				 TextOut(hdcMem, 0, 0, szText, lstrlen(szText));
				 return 0;
		case   WM_SIZE:
			     cxClient = LOWORD(lParam);
				 cyClient = HIWORD(lParam);
				 return 0;
		case WM_COMMAND:
			      hMenu = GetMenu(hwnd);
				  switch(LOWORD(wParam))
				  {
				  case IDM_BIG:
				  case IDM_SMALL:
					   CheckMenuItem(hMenu, iSize, MF_UNCHECKED);
					   iSize = LOWORD(wParam);
					   CheckMenuItem(hMenu, iSize, MF_CHECKED);
					   InvalidateRect(hwnd, NULL, TRUE);
					   break;

				  }
				  return 0;
		case WM_PAINT:
			     hdc = BeginPaint(hwnd, &ps);
				 switch(iSize)
				 {
				 case  IDM_BIG:
					   StretchBlt(hdc,0,0,cxClient,cyClient,hdcMem,0,0,cxBitmap,cyBitmap,SRCCOPY);
					   break;
				 case  IDM_SMALL:
					   for(y=0; y < cyClient; y+=cyBitmap)
						   for(x = 0; x<cxClient; x+=cxBitmap){
						     BitBlt(hdc,x,y,cxBitmap, cyBitmap,hdcMem,0,0,SRCCOPY);
						   }
						   break;
				 }
				 EndPaint(hwnd, &ps);
				 return 0;

		case WM_DESTROY:
			      DeleteDC(hdcMem);
				  DeleteObject(hBitmap);
				  PostQuitMessage(0);

				  return 0;

				
		}
    	

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值