Could someone please help me fix this problem i've been having with my Windows GUI.

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • muddy22
    New Member
    • Oct 2009
    • 2

    Could someone please help me fix this problem i've been having with my Windows GUI.

    I'm only having a problem with a small part, i'm fairly new to computer programming and the program i'm using is Dev-C++. The part that i'm having a problem with is this:

    int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrev, LPSTR CmdLine, int CmdShow);
    ;{
    static WNDCLASS Wc;
    memset(&Wc,0,si zeof(Wc));
    static MSG Msg;
    memset(&Msg,0,s izeof(Msg));

    Wc.style=CS_HRE DRAW | CS_VREDRAW;
    Wc.lpfnWndProc= WndProc;
    Wc.cbClsExtra=0 ;
    Wc.cbWndExtra=0 ;
    Wc.hInstance=hI nst;
    Wc.hIcon=LoadIc on(NULL,IDI_WIN LOGO);

    Errors:
    54 C:\Users\Matthe w\Dev-Cpp\Bouncing ball.cpp expected unqualified-id before '{' token
    54 C:\Users\Matthe w\Dev-Cpp\Bouncing ball.cpp expected `,' or `;' before '{' token
    Line 54 is the problem and it's the ";{" line.
    Please help me out with this problem, i honestly have no idea what i can do to fix it.
  • Banfa
    Recognized Expert Expert
    • Feb 2006
    • 9067

    #2
    Remove the ; at the end of the previous line and the beginning of that line 54.

    Make sure you have include Windows.h (directly or indirectly).

    Make sure you haven't #defined any symbols with clashing names.

    Comment

    • muddy22
      New Member
      • Oct 2009
      • 2

      #3
      That didn't fix the problem, here is all of the work i've done.

      Code:
      #include <windows.h>
      
      #define Show(Window) RedrawWindow(Window,0,0,0);ShowWindow(Window,SW_SHOW);
        [Linker error] undefined reference to `GetStockObject@4' 
       C:\Users\Matthew\AppData\Local\Temp\ccIveaaa.o(.text+0x350) In function `Z7WndProcP6HWND__jjl': 
      
      #define AppName "BouncingBall1"
      #define Caption "Bouncing Ball ..."
      
      char BCX_STR [1024*1024];
      
      static int     BCX_GetDiaUnit;
      static int     BCX_cxBaseUnit;
      static int     BCX_cyBaseUnit;
      static int     BCX_ScaleX;
      static int     BCX_ScaleY;
      static HANDLE  Form1;
      
      double  MIN (double,double);
      double  MAX (double,double);
      
      int     WINAPI WinMain (HINSTANCE, HINSTANCE, LPSTR, int);
      void    FormLoad (HANDLE);
      LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
      
      
      double MAX (double a, double b)
      {
        if (a > b)
        {
          return a;
        }
        return b;
      }
      
      
      double MIN (double a, double b)
      {
        if (a < b)
        {
          return a;
        }
        return b;
      }
      
      
      // standard main for Windows GUI
      int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrev, LPSTR CmdLine, int CmdShow)
      {
        static  WNDCLASS  Wc;
        memset(&Wc,0,sizeof(Wc));
        static  MSG  Msg;
        memset(&Msg,0,sizeof(Msg));
      
        Wc.style=CS_HREDRAW | CS_VREDRAW;
        Wc.lpfnWndProc=WndProc;
        Wc.cbClsExtra=0;
        Wc.cbWndExtra=0;
        Wc.hInstance=hInst;
        Wc.hIcon=LoadIcon(NULL,IDI_WINLOGO);
        Wc.hCursor=LoadCursor(NULL,IDC_ARROW);
        Wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
        Wc.lpszMenuName=NULL;
        Wc.lpszClassName=AppName;
        RegisterClass(&Wc);
        FormLoad(hInst);
        // 50ms here, lower value gives higher speed
        SetTimer((HWND)Form1,1,50,NULL);
        // ye olde event message loop
        while(GetMessage(&Msg,NULL,0,0))
        {
          if (!IsWindow((HWND)Form1)||!IsDialogMessage((HWND)Form1,&Msg))
          {
            TranslateMessage(&Msg);
            DispatchMessage(&Msg);
          }
        }
        return Msg.wParam;
      }
      
      
      // create the form and show it (somewhat older style)
      void FormLoad (HANDLE hInst)
      {
        // get the scale factors
        BCX_GetDiaUnit = GetDialogBaseUnits();
        BCX_cxBaseUnit = LOWORD(BCX_GetDiaUnit);
        BCX_cyBaseUnit = HIWORD(BCX_GetDiaUnit);
        BCX_ScaleX = BCX_cxBaseUnit/4;
        BCX_ScaleY = BCX_cyBaseUnit/8;
        // now the form
        Form1=CreateWindow(AppName,Caption,
          DS_MODALFRAME|WS_POPUP|WS_CAPTION|WS_SYSMENU,
          10*BCX_ScaleX,20*BCX_ScaleY,250*BCX_ScaleX,175*BCX_ScaleY,NULL,
          (HMENU)NULL,(HINSTANCE)hInst,NULL);
        Show((HWND)Form1);
      }
      
      
      // event message handler
      LRESULT CALLBACK WndProc (HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
      {
        static  HANDLE  hBitmap;
        static  HBRUSH  hBrush;
        static  HDC  hdc;
        static  HDC  hdcMem;
        static int cxClient;
        static int cyClient;
        static int xCenter;
        static int yCenter;
        static int cxTotal;
        static int cyTotal;
        static int cxRadius;
        static int cyRadius;
        static int cxMove;
        static int cyMove;
        static int xPixel;
        static int yPixel;
        static int nScale;
        
        while(1)
        {
          if (Msg == WM_CREATE)
          {
            hdc = GetDC(hWnd);
            xPixel = GetDeviceCaps(hdc,ASPECTX);
            yPixel = GetDeviceCaps(hdc,ASPECTY);
            ReleaseDC(hWnd,hdc);
            return 0;
            break;
          }
          // draw the ball
          if (Msg == WM_SIZE)
          {
            xCenter = (cxClient=LOWORD(lParam))/2;
            yCenter = (cyClient=HIWORD(lParam))/2;
            nScale = (int)MIN(cxClient*xPixel,cyClient*yPixel)/16;
            cxRadius = nScale/xPixel;
            cyRadius = nScale/yPixel;
            cxMove = (int)MAX(1,cxRadius/4);
            cyMove = (int)MAX(1,cyRadius/4);
            cxTotal = 2*(cxRadius+cxMove);
            cyTotal = 2*(cyRadius+cyMove);
            if (hBitmap)
            {
              DeleteObject(hBitmap);
            }
            hdc = GetDC(hWnd);
            hdcMem = CreateCompatibleDC(hdc);
            hBitmap = CreateCompatibleBitmap(hdc,cxTotal,cyTotal);
            ReleaseDC(hWnd,hdc);
            SelectObject(hdcMem,hBitmap);
            Rectangle(hdcMem,-1,-1,cxTotal+1,cyTotal+1);
            hBrush = CreateHatchBrush(HS_DIAGCROSS,0);
            SelectObject(hdcMem,hBrush);
            SetBkColor(hdcMem,RGB(0,127,255));
            Ellipse(hdcMem,cxMove,cyMove,cxTotal-cxMove,cyTotal-cyMove);
            DeleteDC(hdcMem);
            DeleteObject(hBrush);
            return 0;
            break;
          }
          // move the ball
          if (Msg == WM_TIMER)
          {
            if (!hBitmap)
            {
              break;
            }
            hdc = GetDC(hWnd);
            hdcMem = CreateCompatibleDC(hdc);
            SelectObject(hdcMem,hBitmap);
            BitBlt(hdc,xCenter-cxTotal/2,yCenter-cyTotal/2,cxTotal,cyTotal,hdcMem,0,0,SRCCOPY);
            ReleaseDC(hWnd,hdc);
            DeleteDC(hdcMem);
            xCenter += cxMove;
            yCenter += cyMove;
            if (xCenter+cxRadius>=cxClient||xCenter-cxRadius<=0)
            {
                cxMove = -cxMove;
            }
            if (yCenter+cyRadius >= cyClient || yCenter-cyRadius <= 0)
            {
                cyMove = -cyMove;
            }
            return 0;
            break;
          }
          // clean up and exit program
          if (Msg == WM_DESTROY)
          {
            if (hBitmap)
            {
              DeleteObject(hBitmap);
            }
            KillTimer((HWND)Form1,1);
            PostQuitMessage(0);
            return 0;
          }
          break;
        }
        return DefWindowProc(hWnd, Msg, wParam, lParam);
      }
      About 200 lines and here are the new errors:
      C:\Users\Matthe w\AppData\Local \Temp\ccIveaaa. o(.text+0x100) In function `WinMain':
      [Linker error] undefined reference to `GetDeviceCaps@ 8'
      [Linker error] undefined reference to `GetDeviceCaps@ 8'
      [Linker error] undefined reference to `DeleteObject@4 '
      [Linker error] undefined reference to `CreateCompatib leDC@4'
      [Linker error] undefined reference to `CreateCompatib leBitmap@12'
      [Linker error] undefined reference to `SelectObject@8 '

      [Linker error] undefined reference to `Rectangle@20'
      [Linker error] undefined reference to `CreateHatchBru sh@8'

      And several others continuing along those lines of linker errors.
      Last edited by Banfa; Oct 30 '09, 02:41 PM. Reason: Added [Code] ... [/code] tags

      Comment

      • Banfa
        Recognized Expert Expert
        • Feb 2006
        • 9067

        #4
        Actually that did fix the problem, its just that you had a second underlying problem that has now surfaced.

        You program appears to compile where it didn't before but you now have linker programs (ignoring that fact that you seem to have a linker error embedded in the top of your code which I assume is a posting error).

        "Undefined Reference" means that the linker was unable to resolve all the symbols in the program into addresses. In this case you have called functions that the linker can not find in any of you object files or any libraries that it is using.

        Checking the help for GetDeviceCaps it seems likely that you have left gdi32.lib out of your linker command line, or if you are using an IDE then you have failed to specify it in the section for additional libraries.

        So far all the functions I have checked have come from that library but if you add it and that does not resolve all the undefined symbols then look up those symbols that are still causing the error to see which library you need to include.

        Comment

        • newb16
          Contributor
          • Jul 2008
          • 687

          #5
          What is linker's command line?
          http://aditsu.freeunixhost.com/dev-cpp-faq.html#link ?

          Comment

          Working...