1 #include<windows.h> 2 #include "resource.h" 3 4 LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM); 5 6 int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstace, PSTR szCmdLine, int iCmdShow) 7 { 8 static TCHAR szAppName[] = TEXT ("stick1"); 9 HWND hwnd; 10 MSG msg; 11 WNDCLASS wndclass; 12 13 wndclass.style = CS_HREDRAW | CS_VREDRAW ; 14 wndclass.lpfnWndProc = WndProc; 15 wndclass.cbClsExtra = 0; 16 wndclass.cbWndExtra = 0; 17 wndclass.hInstance = hInstance; 18 wndclass.hIcon = LoadIcon (hInstance, MAKEINTRESOURCE(IDI_ICON1)); 19 wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); 20 wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); 21 wndclass.lpszMenuName = NULL; 22 wndclass.lpszClassName = szAppName; 23 24 if(!RegisterClass(&wndclass)) 25 { 26 MessageBox(NULL, TEXT ("The Program requires Windows NT!"), szAppName, MB_ICONERROR); 27 return 0; 28 } 29 30 hwnd = CreateWindow (szAppName, 31 TEXT ("ɨÀ×"), 32 WS_OVERLAPPEDWINDOW, 33 CW_USEDEFAULT, 34 CW_USEDEFAULT, 35 CW_USEDEFAULT, 36 CW_USEDEFAULT, 37 NULL, 38 NULL, 39 hInstance, 40 NULL); 41 42 ShowWindow(hwnd , iCmdShow); 43 UpdateWindow(hwnd); 44 45 while(GetMessage(&msg, NULL, 0, 0)) 46 { 47 TranslateMessage(&msg); 48 DispatchMessage(&msg); 49 } 50 return msg.wParam; 51 } 52 53 LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) 54 { 55 static HBITMAP hBitmap; 56 static int cxClient, cyClient, cxSource, cySource; 57 BITMAP bitmap; 58 HDC hdc,hdcMem; 59 HINSTANCE hInstance; 60 int x,y,mx,my; 61 PAINTSTRUCT ps; 62 63 64 switch(message) 65 { 66 case WM_CREATE: 67 hInstance = ((LPCREATESTRUCT) lParam) ->hInstance; 68 69 hBitmap = LoadBitmap(hInstance,MAKEINTRESOURCE(IDM_BITMAP)/*TEXT("bitmap1")*/); 70 GetObject(hBitmap,sizeof(BITMAP),&bitmap); 71 72 cxSource = bitmap.bmWidth; 73 cySource = bitmap.bmHeight/16; 74 75 return 0; 76 case WM_SIZE: 77 cxClient = LOWORD (lParam); 78 cyClient = HIWORD (lParam); 79 return 0; 80 case WM_PAINT: 81 hdc = BeginPaint(hwnd , &ps); 82 83 hdcMem = CreateCompatibleDC(hdc); 84 SelectObject(hdcMem,hBitmap); 85 86 for(y = 100; y < cyClient - 100 ; y += cySource) 87 { 88 for(x = 100; x < cxClient - 100; x += cxSource) 89 { 90 BitBlt(hdc,x,y,cxSource,cySource,hdcMem,0,0,SRCCOPY); 91 } 92 } 93 DeleteDC(hdcMem); 94 EndPaint(hwnd, &ps); 95 return 0; 96 case WM_LBUTTONDOWN: 97 hdc = GetDC(hwnd); 98 99 mx = LOWORD(lParam); 100 my = HIWORD(lParam); 101 102 hdcMem = CreateCompatibleDC(hdc); 103 SelectObject(hdcMem, hBitmap); 104 105 BitBlt(hdc, mx, my, cxSource, cySource, hdcMem, 0, cySource, SRCCOPY); 106 107 DeleteDC(hdcMem); 108 ReleaseDC(hwnd, hdc); 109 return 0; 110 case WM_DESTROY: 111 DeleteObject(hBitmap); 112 PostQuitMessage(0); 113 return 0; 114 } 115 return DefWindowProc(hwnd, message, wParam, lParam); 116 }