#include <windows.h>
#include "resource.h"
#define DIVISIONS 10
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
{
     static TCHAR szAppName [] = TEXT ("Bricks1") ;
     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_APPLICATION) ;
     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 ("LoadBitmap 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 BOOL fState[DIVISIONS][DIVISIONS] ;
     static HBITMAP hBitmap ;
     static int     cxClient, cyClient, cxSource, cySource ;
     BITMAP         bitmap ;
     static HDC     hdc, hdcMem ;
     HINSTANCE      hInstance ;
     static int     x, ycxBlock,cyBlock;
     PAINTSTRUCT    ps ;
 RECT rect,rc;
     
     switch (message)
     {
     case WM_CREATE:
          hInstance = ((LPCREATESTRUCT) lParam)->hInstance ;          hBitmap = LoadBitmap (hInstance, MAKEINTRESOURCE (IDB_BITMAP1)) ;          GetObject (hBitmap, sizeof (BITMAP), &bitmap) ;          cxSource = bitmap.bmWidth ;
          cySource = bitmap.bmHeight ;          return 0 ;
          case WM_SIZE:
  cxBlock = LOWORD (lParam) / DIVISIONS ;
          cyBlock = HIWORD (lParam) / DIVISIONS ;
          cxClient = LOWORD (lParam) ;
          cyClient = HIWORD (lParam) ;
 
          return 0 ;     case WM_PAINT:
          hdc = BeginPaint (hwnd, &ps) ;          hdcMem = CreateCompatibleDC (hdc) ;
          SelectObject (hdcMem, hBitmap) ;
           for (x =0 ; x < DIVISIONS ; x++)
          for (y =0 ; y < DIVISIONS ; y++)
{  
      MoveToEx(hdc,cxBlock*x,0,NULL);
  LineTo(hdc,cxBlock*x,cyClient);
  MoveToEx(hdc,0,cyBlock*y,NULL);
  LineTo(hdc,cxClient,cyBlock*y);     
               if (fState [x][y])
               {
StretchBlt(hdc,4,4, cxBlock,cyBlock, hdcMem,0,0,cxSource,cySource, MERGECOPY);
               }
          }
        
          DeleteDC (hdcMem) ;
          EndPaint (hwnd, &ps) ;
          return 0 ;
  case WM_LBUTTONDOWN :
          x = LOWORD (lParam) / cxBlock ;
          y = HIWORD (lParam) / cyBlock ;
          if (x < DIVISIONS && y < DIVISIONS)
          {
               fState [x][y] ^= 1 ;
               
               rect.left   = x * cxBlock ;
               rect.top    = y * cyBlock ;
               rect.right  = (x + 1) * cxBlock ;
               rect.bottom = (y + 1) * cyBlock ;
   GetClientRect(hwnd,&rc);
   InvalidateRect (hwnd, &rc, TRUE) ;
   
          }
   
          else
               MessageBeep (0) ;
          return 0 ;
     case WM_DESTROY:
          DeleteObject (hBitmap) ;
          PostQuitMessage (0) ;
          return 0 ;
     }
     return DefWindowProc (hwnd, message, wParam, lParam) ;
}
高手教教呀......