none
This declaration has no storage class or type specifier

    Question

  • Ok I just copied this code from the Programming Windows book and I get lots of errors(most of them are exactly the title of this topic). So what's wrong? Aren't these classes available in win7 no more or...?

     

     

    LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) {
    	 static HRGN hRgnClip;
    	 static int cxClient, cyClient;
    	 double fAngle, fRadius;
    	 HCURSOR hCursor;
    	 HDC hdc;
    	 HRGN hRgnTemp[6];
    	 int i;
    	 PAINTSTRUCT ps;
    	 switch(iMsg) {
    	 
    	 case WM_SIZE:
    		 cxClient = LOWORD (lParam);
    		 cyClient = HIWORD (lParam);
    
    		 hCursor = SetCursor(LoadCursor(NULL, IDC_WAIT));
    		 ShowCursor(TRUE);
    
    		 if(hRgnClip) 
    			 DeleteObject(hRgnClip);
    
    		 hRgnTemp[0] = CreateEllipticRgn(0,cyClient / 3, cxClient / 2, 2 * cyClient / 3);
    
    		 hRgnTemp[1] = CreateEllipticRgn(cxClient / 2,cyClient / 3, cxClient, 2 * cyClient / 3);  //ERROR LIKE THE TITLE HERE!
    
    		 hRgnTemp[2] = CreateEllipticRgn(cxClient / 3,0, 2 * cxClient / 3, cyClient / 2); // ERROR LIKE THE TITLE HERE
    
    		 hRgnTemp[3] = CreateEllipticRgn(cxClient / 3, cyClient / 2, 2 * cxClient / 3,cyClient); // ERROR LIKE THE TITLE HERE
    
    		 hRgnTemp[4] = CreateRectRgn(0,0,1,1);  //ERROR LIKE THE TITLE HERE
    		 hRgnTemp[5] = CreateRectRgn(0,0,1,1); // ERROR LIKE THE TITLE HERE
    		 hRgnClip = CreateRectRgn(0,0,1,1); //ERROR LIKE THE TITLE HERE
    
    		 CombineRgn(hRgnTemp[4],hRgnTemp[0],hRgnTemp[1],RGN_OR);//ERROR LIKE THE TITLE HERE
    		 CombineRgn(hRgnTemp[5],hRgnTemp[2],hRgnTemp[3],RGN_OR);// ERROR LIKE THE TITLE EHRE
    		 CombineRgn(hRgnClip,hRgnTemp[4],hRgnTemp[5],RGN_XOR);///ERROR LIKE THE TITLE HERE
    
    		 for(i=0;i<6;i++)
    			 DeleteObject(hRgnTemp[i]);
    
    		 SetCursor(hCursor);
    		 ShowCursor(FALSE);
    
    		 return 0;
    
    }
    


     


    Sunday, December 25, 2011 8:38 PM

Answers

  • >     while(GetMessage(&msg,NULL,0,0)) {
    >        
    >         TranslateMessage(&msg);
    >         DispatchMessage(&msg);
    >     }
    >        
    >     return msg.wParam;
    >     }
    > } // <<== Why is this here? It has no match.


    > LineTo(hdc,(int)(fRadius * cod (fAngle) + 0.5),

    What is "cod"?

    Note that you should always state which compiler and
    which version you're using.

    - Wayne


    Sunday, December 25, 2011 10:32 PM
  • 	 while(GetMessage(&msg,NULL,0,0)) {
    		 
    		 TranslateMessage(&msg);
    		 DispatchMessage(&msg);
    	 }
    		 
    	 return msg.wParam;
    	 } // too many closing braces. Remove this line
     }
    


    And there is a problem here:

     

    		 for(fAngle = 0.0;fAngle < TWO_PI;fAngle += TWO_PI / 360) 
    		 {
    			 MoveToEx(hdc,0,0,NULL);
    			 LineTo(hdc,(int)(fRadius * cod (fAngle) + 0.5),
    				 (int)(-fRadius * sin(fAngle) + 0.5);
    		 }


    I assume you mean "cos", not "cod". Also, you are missing a closing brace. Replace with:

    		 for(fAngle = 0.0;fAngle < TWO_PI;fAngle += TWO_PI / 360) 
    		 {
    			 MoveToEx(hdc,0,0,NULL);
    			 LineTo(hdc,(int)(fRadius * cos (fAngle) + 0.5),
    				 (int)(-fRadius * sin(fAngle) + 0.5));
    		 }


     


    Sunday, December 25, 2011 10:36 PM

All replies

  • Ensure that #include <windows.h> is the line right after #include <stdafx.h>

    If you still get errors, you need to post the first few, in their entirety, if you expect help. If you can, post the source code they refer to.


    Sunday, December 25, 2011 8:48 PM
  • This is the full code
    #include <Windows.h>
    #include <math.h>
    #include <stdlib.h>
    
    #define TWO_PI (2.0 * 3.14159)
    
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    
    void DrawRectangle(HWND);
    int cxClient,cyClient;
     int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
    	 PSTR szCmdLine, int iCmdShow) 
     {
    	 static TCHAR szAppName[] = TEXT ("Drawing test");
    	 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 application requires Windows 7!"), szAppName, MB_ICONERROR);
    		 return 0;
    	 }
    	 hwnd = CreateWindow (szAppName,
    		  TEXT ("The Hello Program"),
    		  WS_OVERLAPPEDWINDOW | WS_VSCROLL,
    		  
    		  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 iMsg, WPARAM wParam, LPARAM lParam) {
    	 static HRGN hRgnClip;
    	 static int cxClient, cyClient;
    	 double fAngle, fRadius;
    	 HCURSOR hCursor;
    	 HDC hdc;
    	 HRGN hRgnTemp[6];
    	 int i;
    	 PAINTSTRUCT ps;
    	 switch(iMsg) {
    	 
    	 case WM_SIZE:
    		 cxClient = LOWORD (lParam);
    		 cyClient = HIWORD (lParam);
    
    		 hCursor = SetCursor(LoadCursor(NULL, IDC_WAIT));
    		 ShowCursor(TRUE);
    
    		 if(hRgnClip) 
    			 DeleteObject(hRgnClip);
    
    		 hRgnTemp[0] = CreateEllipticRgn(0,cyClient / 3, cxClient / 2, 2 * cyClient / 3);
    
    		 hRgnTemp[1] = CreateEllipticRgn(cxClient / 2,cyClient / 3, cxClient, 2 * cyClient / 3);
    
    		 hRgnTemp[2] = CreateEllipticRgn(cxClient / 3,0, 2 * cxClient / 3, cyClient / 2);
    
    		 hRgnTemp[3] = CreateEllipticRgn(cxClient / 3, cyClient / 2, 2 * cxClient / 3,cyClient);
    
    		 hRgnTemp[4] = CreateRectRgn(0,0,1,1);
    		 hRgnTemp[5] = CreateRectRgn(0,0,1,1);
    		 hRgnClip = CreateRectRgn(0,0,1,1);
    
    		 CombineRgn(hRgnTemp[4],hRgnTemp[0],hRgnTemp[1],RGN_OR);
    		 CombineRgn(hRgnTemp[5],hRgnTemp[2],hRgnTemp[3],RGN_OR);
    		 CombineRgn(hRgnClip,hRgnTemp[4],hRgnTemp[5],RGN_XOR);
    
    		 for(i=0;i<6;i++)
    			 DeleteObject(hRgnTemp[i]);
    
    		 SetCursor(hCursor);
    		 ShowCursor(FALSE);
    
    		 return 0;
    	 case WM_PAINT:
    		 hdc = BeginPaint (hwnd, &ps);
    
    		 SetViewportOrgEx(hdc,cxClient / 2,cyClient / 2, NULL);
    		 SelectClipRgn(hdc,hRgnClip);
    
    		 fRadius = _hypot(cxClient / 2.0, cyClient / 2.0);
    
    		 for(fAngle = 0.0;fAngle < TWO_PI;fAngle += TWO_PI / 360) {
    			 MoveToEx(hdc,0,0,NULL);
    			 LineTo(hdc,(int)(fRadius * cod (fAngle) + 0.5),
    				 (int)(-fRadius * sin(fAngle) + 0.5);
    		 }
    		 EndPaint(hwnd,&ps);
    		 return 0;
    	 case WM_DESTROY:
    		 DeleteObject(hRgnClip);
    		 PostQuitMessage(0);
    		 return 0;
    	 }
    	 return DefWindowProc(hwnd,iMsg,wParam,lParam);
     }
    
    

    Sunday, December 25, 2011 9:15 PM
  • >     while(GetMessage(&msg,NULL,0,0)) {
    >        
    >         TranslateMessage(&msg);
    >         DispatchMessage(&msg);
    >     }
    >        
    >     return msg.wParam;
    >     }
    > } // <<== Why is this here? It has no match.


    > LineTo(hdc,(int)(fRadius * cod (fAngle) + 0.5),

    What is "cod"?

    Note that you should always state which compiler and
    which version you're using.

    - Wayne


    Sunday, December 25, 2011 10:32 PM
  • 	 while(GetMessage(&msg,NULL,0,0)) {
    		 
    		 TranslateMessage(&msg);
    		 DispatchMessage(&msg);
    	 }
    		 
    	 return msg.wParam;
    	 } // too many closing braces. Remove this line
     }
    


    And there is a problem here:

     

    		 for(fAngle = 0.0;fAngle < TWO_PI;fAngle += TWO_PI / 360) 
    		 {
    			 MoveToEx(hdc,0,0,NULL);
    			 LineTo(hdc,(int)(fRadius * cod (fAngle) + 0.5),
    				 (int)(-fRadius * sin(fAngle) + 0.5);
    		 }


    I assume you mean "cos", not "cod". Also, you are missing a closing brace. Replace with:

    		 for(fAngle = 0.0;fAngle < TWO_PI;fAngle += TWO_PI / 360) 
    		 {
    			 MoveToEx(hdc,0,0,NULL);
    			 LineTo(hdc,(int)(fRadius * cos (fAngle) + 0.5),
    				 (int)(-fRadius * sin(fAngle) + 0.5));
    		 }


     


    Sunday, December 25, 2011 10:36 PM