Programming Windows程式開發設計指南->第七章 例子程式2

來源:互聯網
上載者:User

/*_############################################################################
  _##
  _##  Programming Windows程式開發設計指南->第七章 例子程式2
  _##  Author: xwlee                        
  _##  Time: 2007.06.22
  _##  Chang'an University
  _##  Development condition: win2003 Server+VC6.0
  _##
  _##  程式7-2  CHECKER1
  _##  CHECKER1.C 檔案
  _##  簡單的滑鼠處理:一個例子
  _##  程式只是進行驗證
  _## 
  _##
  _##    CHECKER1.C -- Connect-the-Dots Mouse Demo Program
  _##     (c) Charles Petzold, 1998
  _##  
  _##########################################################################*/
#include <windows.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 ("Checker1") ;

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

                                                                    szAppName, MB_ICONERROR) ;

                     return 0 ;

          }

          hwnd = CreateWindow (       szAppName, TEXT ("Checker1 Mouse Hit-Test 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 int               cxBlock, cyBlock ;

          HDC                                   hdc ;

          int                                x, y ;

          PAINTSTRUCT           ps ;

          RECT                                  rect ;

    

          switch (message)

     {

          case       WM_SIZE :

                     cxBlock = LOWORD (lParam) / DIVISIONS ;

                     cyBlock = HIWORD (lParam) / DIVISIONS ;

                     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 ;

              

                                      InvalidateRect (hwnd, &rect, FALSE) ;

                     }

                     else

                                      MessageBeep (0) ;

                return 0 ;

         

          case       WM_PAINT :
                     hdc = BeginPaint (hwnd, &ps) ;
      
                     for (x = 0 ; x < DIVISIONS ; x++)
                     for (y = 0 ; y < DIVISIONS ; y++)
                     {
                               Rectangle (hdc, x * cxBlock, y * cyBlock,
                                     (x + 1) * cxBlock, (y + 1) * cyBlock) ;
        
                        if (fState [x][y])
                        {
                                MoveToEx      (hdc, x * cxBlock,  y * cyBlock, NULL) ;
                                LineTo    (hdc, (x+1) * cxBlock, (y+1) * cyBlock) ;
        MoveToEx (hdc, x * cxBlock, (y+1) * cyBlock, NULL) ;
        LineTo    (hdc, (x+1) * cxBlock, y  * cyBlock) ;
                         }
                    }
                     EndPaint (hwnd,&ps);  
              return 0 ;
              
          case       WM_DESTROY :
                     PostQuitMessage (0) ;
                     return 0 ;
          }
          return DefWindowProc (hwnd, message, wParam, lParam) ;
}

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.