zoukankan      html  css  js  c++  java
  • 《windows程序设计》学习_3.1:画出雷区,左键的使用

      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 (NULL, IDI_APPLICATION);
     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 ("Stick 1"),
     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/2;
     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 }

  • 相关阅读:
    对xml的操作使用的类XElement的使用
    在js和C#中split应用和去除字符串分组后的空值
    C# 预定义语言
    C# 中利用 Conditional 定义条件方法
    快速结束占用端口
    详解C++中命名空间的意义和用法
    Template、ItemsPanel、ItemContainerStyle、ItemTemplate
    C++入门(2)
    C++入门(1)
    VS中的配置管理器
  • 原文地址:https://www.cnblogs.com/Hewie/p/3422032.html
Copyright © 2011-2022 走看看