none
petzold的书里的程序,怎么无法通过编译? RRS feed

  • 问题

  • 错误是:
    ------------------Configuration: checker3 - Win32 Debug--------------------
    Compiling...
    checker3.cpp
    C:\Documents and Settings\Administrator\桌面\链接\文件\checker3\checker3.cpp(141) : fatal error C1004: unexpected end of file found
    执行 cl.exe 时出错.

    checker3.exe - 1 error(s), 0 warning(s)


    本人新手,问题虽然简单,但请高手指点一二啊


    以下是代码:
    /*-------------------------------------------------
       CHECKER3.C -- Mouse Hit-Test Demo Program No. 3
                     (c) Charles Petzold, 1998
      -------------------------------------------------*/

    #include <windows.h>

    #define DIVISIONS 5

    LRESULT CALLBACK WndProc   (HWND, UINT, WPARAM, LPARAM) ;
    LRESULT CALLBACK ChildWndProc (HWND, UINT, WPARAM, LPARAM) ;

    TCHAR szChildClass[] = TEXT ("Checker3_Child") ;

    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                        PSTR szCmdLine, int iCmdShow)
    {
         static TCHAR szAppName[] = TEXT ("Checker3") ;
         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 ;
         }
        
         wndclass.lpfnWndProc   = ChildWndProc ;
         wndclass.cbWndExtra    = sizeof (long) ;
         wndclass.hIcon         = NULL ;
         wndclass.lpszClassName = szChildClass ;
        
         RegisterClass (&wndclass) ;
        
         hwnd = CreateWindow (szAppName, TEXT ("Checker3 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 HWND hwndChild[DIVISIONS][DIVISIONS] ;
         int         cxBlock, cyBlock, x, y ;
        
         switch (message)
         {
         case WM_CREATE :
              for (x = 0 ; x < DIVISIONS ; x++)
                   for (y = 0 ; y < DIVISIONS ; y++)
                        hwndChild[x][y] = CreateWindow (szChildClass, NULL,
                                  WS_CHILDWINDOW | WS_VISIBLE,
                                  0, 0, 0, 0,
                                  hwnd, (HMENU) (y << 8 | x),
                                  (HINSTANCE) GetWindowLong (hwnd, GWL_HINSTANCE),
                                  NULL) ;
              return 0 ;
                  
         case WM_SIZE :
              cxBlock = LOWORD (lParam) / DIVISIONS ;
              cyBlock = HIWORD (lParam) / DIVISIONS ;
             
              for (x = 0 ; x < DIVISIONS ; x++)
                    for (y = 0 ; y < DIVISIONS ; y++)
                        MoveWindow (hwndChild[x][y],
                                    x * cxBlock, y * cyBlock,
                                    cxBlock, cyBlock, TRUE) ;
              return 0 ;
                  
         case WM_LBUTTONDOWN :
              MessageBeep (0) ;
              return 0 ;
             
         case WM_DESTROY :
              PostQuitMessage (0) ;
              return 0 ;
         }
         return DefWindowProc (hwnd, message, wParam, lParam) ;
    }

    LRESULT CALLBACK ChildWndProc (HWND hwnd, UINT message,
                                   WPARAM wParam, LPARAM lParam)
    {
         HDC         hdc ;
         PAINTSTRUCT ps ;
         RECT        rect ;
        
         switch (message)
         {
         case WM_CREATE :
              SetWindowLong (hwnd, 0, 0) ;       // on/off flag
              return 0 ;
             
         case WM_LBUTTONDOWN :
              SetWindowLong (hwnd, 0, 1 ^ GetWindowLong (hwnd, 0)) ;
              InvalidateRect (hwnd, NULL, FALSE) ;
              return 0 ;
             
         case WM_PAINT :
              hdc = BeginPaint (hwnd, &ps) ;
             
              GetClientRect (hwnd, &rect) ;
              Rectangle (hdc, 0, 0, rect.right, rect.bottom) ;
             
              if (GetWindowLong (hwnd, 0))
              {
                   MoveToEx (hdc, 0,          0, NULL) ;
                   LineTo   (hdc, rect.right, rect.bottom) ;
                   MoveToEx (hdc, 0,          rect.bottom, NULL) ;
                   LineTo   (hdc, rect.right, 0) ;
              }
             
              EndPaint (hwnd, &ps) ;
              return 0 ;
         }
         return DefWindowProc (hwnd, message, wParam, lParam

    2009年6月4日 7:15

答案