// caller.c - test application for hartwich.dll
//
// This is meant to be compiled with Quick C for Windows version 1.0
// (the makefile will not work with other make utilities)
//

#include <windows.h>
#include <string.h>
#include "anamtr.h"    // Analogmeter von Marcellus Buchheit
#include "hartwich.h"
#include "CALLER.h"

// Globals
static HFONT globalWorkFont;
static HWND HWNDInstruments[NUMCACHEDANAHANDLES];            // Window handles für die Analoginstrumente
static HWND HWNDScrollBars[NUMCACHEDANAHANDLES];             // Window handles für die Scrollbars
static double InputValues[NUMCACHEDANAHANDLES];              // Eingabewerte


int PASCAL WinMain(HANDLE hInstance, HANDLE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)
{
 /***********************************************************************/
 /* HANDLE hInstance;       handle for this instance                    */
 /* HANDLE hPrevInstance;   handle for possible previous instances      */
 /* LPSTR  lpszCmdLine;     long pointer to exec command line           */
 /* int    nCmdShow;        Show code for main window display           */
 /***********************************************************************/

 MSG        msg;           /* MSG structure to store your messages        */
 int        nRc;           /* return value from Register Classes          */

 strcpy(szAppName, "CALLER");
 strcpy(szChildName, "TEST");
 hInst = hInstance;
 if(!hPrevInstance)
   {
    /* register window classes if first instance of application         */
    if ((nRc = nCwRegisterClasses()) == -1)
      {
       /* registering one of the windows failed                         */
       LoadString(hInst, IDS_ERR_REGISTER_CLASS, szString, sizeof(szString));
       MessageBox(NULL, szString, NULL, MB_ICONEXCLAMATION);
       return nRc;
      }
   }

 /* create application's Main window                                    */
 HWndMain = CreateWindow(
                szAppName,               /* Window class name           */
                "Test für HARTWICH.DLL", /* Window's title              */
                WS_CAPTION|WS_CLIPCHILDREN,
                CW_USEDEFAULT,
                CW_USEDEFAULT,
                CW_USEDEFAULT,
                CW_USEDEFAULT,
                NULL,                    /* Parent window's handle      */
                NULL,                    /* Default to Class Menu       */
                hInst,                   /* Instance of window          */
                NULL);                   /* Create struct for WM_CREATE */


 if(HWndMain == NULL)
   {
    LoadString(hInst, IDS_ERR_CREATE_WINDOW, szString, sizeof(szString));
    MessageBox(NULL, szString, NULL, MB_ICONEXCLAMATION);
    return IDS_ERR_CREATE_WINDOW;
   }

 globalWorkFont = CreateFont(14,0,0,0,100,0,0,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,
           CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_SWISS,"Modern");


 ShowWindow(HWndMain,SW_SHOWMAXIMIZED);            /* display main window      */

 while(GetMessage(&msg, NULL, 0, 0))        /* Until WM_QUIT message    */
   {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
   }

 /* Do clean up before exiting from the application                     */
 CwUnRegisterClasses();
 DeleteObject(globalWorkFont);
 return msg.wParam;
} /*  End of WinMain                                                    */
/************************************************************************/
/*                                                                      */
/* Main Window Procedure                                                */
/*                                                                      */
/* This procedure provides service routines for the Windows events      */
/* (messages) that Windows sends to the window, as well as the user     */
/* initiated events (messages) that are generated when the user selects */
/* the action bar and pulldown menu controls or the corresponding       */
/* keyboard accelerators.                                               */
/*                                                                      */
/************************************************************************/

LONG FAR PASCAL WndProc(HWND hWnd, WORD Message, WORD wParam, LONG lParam)
{
  HMENU      hMenu=0;            /* handle for the menu                 */
  HBITMAP    hBitmap=0;          /* handle for bitmaps                  */
  HDC        hDC;                /* handle for the display device       */
  PAINTSTRUCT ps;                /* holds PAINT information             */
  int        nRc=0;              /* return code                         */

  switch (Message)
  {
    case WM_COMMAND:
         switch (wParam)
         {
           case IDM_S_TURBINENDREHMOMENT:
                SetWindowText(HWndMain,"Turbinendrehmoment");
                DestroyExistingAnaMeters();
                DestroyExistingScrollBars();
                ResetInputValues();
                TaskToDo = TURBINENDREHMOMENT;
                PostMessage(HWndChild,UD_SETUPTURBINENDREHMOMENT,0,0L);
                InvalidateRect(HWndChild,NULL,TRUE); // Force a WM_PAINT
                break;

           case IDM_S_FAHRWIDERSTAND:
                SetWindowText(HWndMain,"Fahrwiderstandskraft");
                DestroyExistingAnaMeters();
                DestroyExistingScrollBars();
                ResetInputValues();
                TaskToDo = FAHRWIDERSTANDSKRAFT;
                PostMessage(HWndChild,UD_SETUPFAHRWIDERSTANDSKRAFT,0,0L);
                InvalidateRect(HWndChild,NULL,TRUE); // Force a WM_PAINT
                break;

           case IDM_S_BREMSKRAFT:
                SetWindowText(HWndMain,"Bremskraft");
                DestroyExistingAnaMeters();
                DestroyExistingScrollBars();
                ResetInputValues();
                TaskToDo = BREMSKRAFT;
                PostMessage(HWndChild,UD_SETUPBREMSKRAFT,0,0L);
                InvalidateRect(HWndChild,NULL,TRUE); // Force a WM_PAINT
                break;

           case IDM_S_GESCHWINDIGKEIT:
                SetWindowText(HWndMain,"Geschwindigkeit");
                DestroyExistingAnaMeters();
                DestroyExistingScrollBars();
                ResetInputValues();
                TaskToDo = GESCHWINDIGKEIT;
                PostMessage(HWndChild,UD_SETUPGESCHWINDIGKEIT,0,0L);
                InvalidateRect(HWndChild,NULL,TRUE); // Force a WM_PAINT
                break;

           case IDM_S_EXIT:
                SendMessage(hWnd,WM_CLOSE,0,0L);
                break;

           default:
                return DefWindowProc(hWnd, Message, wParam, lParam);
         }
         break;        /* End of WM_COMMAND                             */

    case WM_CREATE:
         {
           TaskToDo=NOTHING;

           HWndChild = CreateWindow(
             szChildName,               /* Window class name           */
             "Demo", /* Window's title              */
             WS_CHILDWINDOW|WS_VISIBLE,
             10, 10,                  /* Use always the same X, Y            */
             100, 100,                /* Use always the same X, Y            */
             hWnd,                    /* Parent window's handle      */
             ID_THECHILD,             /* Child Window ID       */
             hInst,                   /* Instance of window          */
             NULL);                   /* Create struct for WM_CREATE */

             ShowWindow(HWndChild,SW_SHOWNORMAL);
         }
         break;       /*  End of WM_CREATE                              */

    case WM_MOVE:     /*  code for moving the window                    */
         break;

    case WM_SIZE:     /*  code for sizing client area                   */
         {
           RECT rcClient;

           GetClientRect(hWnd,&rcClient);
           MoveWindow(HWndChild,
                      rcClient.left+10,
                      rcClient.top+10,
                      rcClient.right-20,
                      rcClient.bottom-20,
                      TRUE);
         }
         break;       /* End of WM_SIZE                                 */

    case WM_PAINT:    /* code for the window's client area              */
         /* Obtain a handle to the device context                       */
         /* BeginPaint will sends WM_ERASEBKGND if appropriate          */
         memset(&ps, 0x00, sizeof(PAINTSTRUCT));
         hDC = BeginPaint(hWnd, &ps);

         /* Included in case the background is not a pure color         */
         SetBkMode(hDC, TRANSPARENT);

         /* Inform Windows painting is complete                         */
         EndPaint(hWnd, &ps);
         break;       /*  End of WM_PAINT                               */

    case WM_CLOSE:  /* close the window                                 */
         /* Destroy child windows, modeless dialogs, then, this window  */
         DestroyWindow(hWnd);
         if (hWnd == HWndMain)
           PostQuitMessage(0);  /* Quit the application                 */
        break;

    default:
         /* For any message for which you don't specifically provide a  */
         /* service routine, you should return the message to Windows   */
         /* for default message processing.                             */
         return DefWindowProc(hWnd, Message, wParam, lParam);
  }
  return 0L;
}     // End of WndProc

LONG FAR PASCAL ChildWndProc(HWND hWnd, WORD Message, WORD wParam, LONG lParam)
{
  HBITMAP    hBitmap=0;          /* handle for bitmaps                  */
  HDC        hDC;                /* handle for the display device       */
  PAINTSTRUCT ps;                /* holds PAINT information             */

  switch (Message)
  {
    case WM_COMMAND:
         switch (wParam)
         {
           default:
                return DefWindowProc(hWnd, Message, wParam, lParam);
         }
         break;        /* End of WM_COMMAND                             */

    case WM_CREATE:
         SetTimer(hWnd,ID_MODELTIMER,ELAPSEMSECS,NULL);
         break;       /*  End of WM_CREATE                              */

    case WM_MOVE:     /*  code for moving the window                    */
         break;

    case WM_SIZE:     /*  code for sizing client area                   */
         break;       /* End of WM_SIZE                                 */

    case WM_HSCROLL:  // Ein Scrollbar wird bedient
         {
           int sbID = GetWindowWord(HIWORD(lParam),GWW_ID);

           switch (sbID)
           {
             case SCR_GAS: // geht von 0 bis 100
                  {
                    switch (wParam)
                    {
                      case SB_LINEDOWN:
                           {
                             if (InputValues[ANA_GAS] < 100)
                             {
                               InputValues[ANA_GAS]++;
                             }
                           }
                           break;

                      case SB_LINEUP:
                           {
                             if (InputValues[ANA_GAS] > 0)
                             {
                               InputValues[ANA_GAS]--;
                             }
                           }
                           break;

                      case SB_THUMBPOSITION:
                      case SB_THUMBTRACK:
                           InputValues[ANA_GAS]=(double)LOWORD(lParam);
                           break;
                    }

                    SetScrollPos(HWNDScrollBars[SCR_GAS-15],SB_CTL,(int)InputValues[ANA_GAS],TRUE);
                    SendMessage(HWNDInstruments[ANA_GAS],AMM_SETVALUE,(int)InputValues[ANA_GAS],0L);
                  }
                  break;

             case SCR_TURBINENDREHZAHL: // geht von 0 bis 5000
                  {
                    switch (wParam)
                    {
                      case SB_LINEDOWN:
                           {
                             if (InputValues[ANA_TURBINENDREHZAHL] < 5000)
                             {
                               InputValues[ANA_TURBINENDREHZAHL]++;
                             }
                           }
                           break;

                      case SB_LINEUP:
                           {
                             if (InputValues[ANA_TURBINENDREHZAHL] > 0)
                             {
                               InputValues[ANA_TURBINENDREHZAHL]--;
                             }
                           }
                           break;

                      case SB_THUMBPOSITION:
                      case SB_THUMBTRACK:
                           InputValues[ANA_TURBINENDREHZAHL]=(double)LOWORD(lParam);
                           break;
                    }

                    SetScrollPos(HWNDScrollBars[SCR_TURBINENDREHZAHL-15],SB_CTL,(int)InputValues[ANA_TURBINENDREHZAHL],TRUE);
                    SendMessage(HWNDInstruments[ANA_TURBINENDREHZAHL],AMM_SETVALUE,(int)InputValues[ANA_TURBINENDREHZAHL],0L);
                  }
                  break;

             case SCR_SPEED: // geht von 0 bis 210
                  {
                    switch (wParam)
                    {
                      case SB_LINEDOWN:
                           {
                             if (InputValues[ANA_SPEED] < 210)
                             {
                               InputValues[ANA_SPEED]++;
                             }
                           }
                           break;

                      case SB_LINEUP:
                           {
                             if (InputValues[ANA_SPEED] > 0)
                             {
                               InputValues[ANA_SPEED]--;
                             }
                           }
                           break;

                      case SB_THUMBPOSITION:
                      case SB_THUMBTRACK:
                           InputValues[ANA_SPEED]=(double)LOWORD(lParam);
                           break;
                    }

                    SetScrollPos(HWNDScrollBars[SCR_SPEED-15],SB_CTL,(int)InputValues[ANA_SPEED],TRUE);
                    SendMessage(HWNDInstruments[ANA_SPEED],AMM_SETVALUE,(int)InputValues[ANA_SPEED],0L);
                  }
                  break;

             case SCR_BREMSPEDALKRAFT: // geht von 0 bis 24 kp
                  {
                    switch (wParam)
                    {
                      case SB_LINEDOWN:
                           {
                             if (InputValues[ANA_BREMSPEDALKRAFT] < 24)
                             {
                               InputValues[ANA_BREMSPEDALKRAFT]++;
                             }
                           }
                           break;

                      case SB_LINEUP:
                           {
                             if (InputValues[ANA_BREMSPEDALKRAFT] > 0)
                             {
                               InputValues[ANA_BREMSPEDALKRAFT]--;
                             }
                           }
                           break;

                      case SB_THUMBPOSITION:
                      case SB_THUMBTRACK:
                           InputValues[ANA_BREMSPEDALKRAFT]=(double)LOWORD(lParam);
                           break;
                    }

                    SetScrollPos(HWNDScrollBars[SCR_BREMSPEDALKRAFT-15],SB_CTL,(int)InputValues[ANA_BREMSPEDALKRAFT],TRUE);
                    SendMessage(HWNDInstruments[ANA_BREMSPEDALKRAFT],AMM_SETVALUE,(int)InputValues[ANA_BREMSPEDALKRAFT],0L);
                  }
                  break;
           }
         }
         break;

    case WM_PAINT:    /* code for the window's client area              */
         {
           RECT rcClient;

           GetClientRect(hWnd,&rcClient);
           memset(&ps, 0x00, sizeof(PAINTSTRUCT));
           hDC = BeginPaint(hWnd, &ps);

           SetBkMode(hDC,TRANSPARENT);

           switch(TaskToDo)
           {
             case TURBINENDREHMOMENT:
                  // Rahmen um die Analogmeter
                  Rectangle(hDC,IX(0),IY(0),IX(30),IY(30));    // Gaspedalweg
                  Rectangle(hDC,IX(0),IY(50),IX(30),IY(80));   // Turbinendrehzahl
                  Rectangle(hDC,IX(40),IY(25),IX(70),IY(55));  // Turbinendrehmoment
                  // Oberer Pfeil
                  MoveTo(hDC,IX(30),IY(15));
                  LineTo(hDC,IX(55),IY(15));
                  LineTo(hDC,IX(55),IY(25));
                  PfeilSpitze(hDC,RUNTER,IX(55),IY(25));
                  // Unterer Pfeil
                  MoveTo(hDC,IX(30),IY(65));
                  LineTo(hDC,IX(55),IY(65));
                  LineTo(hDC,IX(55),IY(55));
                  PfeilSpitze(hDC,RAUF,IX(55),IY(55));
                  break;

             case FAHRWIDERSTANDSKRAFT:
                  // Rahmen um die Analogmeter
                  Rectangle(hDC,IX(0),IY(25),IX(30),IY(55));    // Geschwindigkeit
                  Rectangle(hDC,IX(40),IY(25),IX(70),IY(55));   // Fahrwiderstandskraft
                  // Pfeil
                  MoveTo(hDC,IX(30),IY(40));
                  LineTo(hDC,IX(40),IY(40));
                  PfeilSpitze(hDC,RECHTS,IX(40),IY(40));
                  break;

             case BREMSKRAFT:
                  // Rahmen um die Analogmeter
                  Rectangle(hDC,IX(0),IY(25),IX(30),IY(55));    // Bremspedalkraft
                  Rectangle(hDC,IX(40),IY(25),IX(70),IY(55));   // Bremskraft
                  // Pfeil
                  MoveTo(hDC,IX(30),IY(40));
                  LineTo(hDC,IX(40),IY(40));
                  PfeilSpitze(hDC,RECHTS,IX(40),IY(40));
                  break;

             case GESCHWINDIGKEIT:
                  // Rahmen um die Analogmeter
                  Rectangle(hDC,IX(0),IY(0),IX(15),IY(15));    // Bremspedalkraft
                  Rectangle(hDC,IX(0),IY(20),IX(15),IY(35));   // Gas
                  Label(hDC,"Motor + Wandler",1,44,14,51);
                  // Pfeil
                  MoveTo(hDC,IX(7.5),IY(35));
                  LineTo(hDC,IX(7.5),IY(44));
                  PfeilSpitze(hDC,RUNTER,IX(7.5),IY(44));
                  Rectangle(hDC,IX(20),IY(40),IX(35),IY(55));  // Turbinendrehmoment
                  // Pfeilstumpf
                  MoveTo(hDC,IX(14),IY(47.5));
                  LineTo(hDC,IX(20),IY(47.5));
                  Rectangle(hDC,IX(20),IY(60),IX(35),IY(75));  // Turbinendrehzahl
                  // Pfeile
                  MoveTo(hDC,IX(20),IY(67.5));
                  LineTo(hDC,IX(7.5),IY(67.5));
                  LineTo(hDC,IX(7.5),IY(51));
                  PfeilSpitze(hDC,RAUF,IX(7.5),IY(51));
                  Label(hDC,"Getriebe + Differential",41,44,54,51);
                  MoveTo(hDC,IX(35),IY(47.5));
                  LineTo(hDC,IX(41),IY(47.5));
                  PfeilSpitze(hDC,RECHTS,IX(41),IY(47.5));
                  MoveTo(hDC,IX(35),IY(67.5));
                  LineTo(hDC,IX(44),IY(67.5));
                  LineTo(hDC,IX(44),IY(51));
                  Rectangle(hDC,IX(60),IY(40),IX(75),IY(55));  // Antriebskraft
                  Label(hDC,"Fahrzeugkinetik",81,44,94,51);
                  // Pfeil
                  MoveTo(hDC,IX(54),IY(47.5));
                  LineTo(hDC,IX(60),IY(47.5));
                  MoveTo(hDC,IX(75),IY(47.5));
                  LineTo(hDC,IX(81),IY(47.5));
                  PfeilSpitze(hDC,RECHTS,IX(81),IY(47.5));
                  Rectangle(hDC,IX(80),IY(60),IX(95),IY(75));  // Geschwindigkeit
                  // Pfeil
                  MoveTo(hDC,IX(87.5),IY(51));
                  LineTo(hDC,IX(87.5),IY(60));
                  // Pfeil
                  MoveTo(hDC,IX(87.5),IY(75));
                  LineTo(hDC,IX(87.5),IY(77.5));
                  LineTo(hDC,IX(51),IY(77.5));
                  LineTo(hDC,IX(51),IY(51));
                  PfeilSpitze(hDC,RAUF,IX(51),IY(51));
                  Rectangle(hDC,IX(60),IY(60),IX(75),IY(75));  // Fahrwiderstandskraft
                  MoveTo(hDC,IX(67.5),IY(77.5));
                  LineTo(hDC,IX(67.5),IY(75));
                  // Pfeil
                  MoveTo(hDC,IX(67.5),IY(60));
                  LineTo(hDC,IX(67.5),IY(57.5));
                  LineTo(hDC,IX(84),IY(57.5));
                  LineTo(hDC,IX(84),IY(51));
                  PfeilSpitze(hDC,RAUF,IX(84),IY(51));
                  Rectangle(hDC,IX(60),IY(20),IX(75),IY(35));  // Bremskraft
                  // Pfeil
                  MoveTo(hDC,IX(15),IY(7.5));
                  LineTo(hDC,IX(17.5),IY(7.5));
                  LineTo(hDC,IX(17.5),IY(27.5));
                  LineTo(hDC,IX(60),IY(27.5));
                  MoveTo(hDC,IX(75),IY(27.5));
                  LineTo(hDC,IX(87.5),IY(27.5));
                  LineTo(hDC,IX(87.5),IY(44));
                  PfeilSpitze(hDC,RUNTER,IX(87.5),IY(44));
                  break;

           }

           EndPaint(hWnd, &ps);
         }
         break;

    case UD_SETUPTURBINENDREHMOMENT:
         // Die Koordinaten sind mit den Rahmenkoordinaten in WM_PAINT abgestimmt
         // Gasbox
         HWNDInstruments[ANA_GAS] = CreateWindow("analogmeter",
                                                 NULL,
                                                 WS_CHILD|AMS_DIGITAL|AMS_LINEMASK,
                                                 IX(0+1),
                                                 IY(0+1),
                                                 IX(30-1) - IX(0+1),
                                                 IY(30-1) - IY(0+1),
                                                 hWnd,
                                                 ANA_GAS,
                                                 hInst,
                                                 NULL);

         SendMessage(HWNDInstruments[ANA_GAS],AMM_SETRANGE,0,MAKELONG(0,100));
         SendMessage(HWNDInstruments[ANA_GAS],AMM_SETSIZE,11,0L);
         SetWindowText(HWNDInstruments[ANA_GAS],"Gaspedalweg;0%;20%;40%;60%;80%;100%");
         SendMessage(HWNDInstruments[ANA_GAS],AMM_SETVALUE,0,0L);
         SendMessage(HWNDInstruments[ANA_GAS],WM_SETFONT,globalWorkFont,FALSE);
         ShowWindow(HWNDInstruments[ANA_GAS],SW_SHOW);
         // Gasbox-Scrollbar
         HWNDScrollBars[SCR_GAS-15] = CreateWindow("scrollbar",
                                                NULL,
                                                WS_CHILD|SBS_HORZ,
                                                IX(0+1),
                                                IY(30-1),
                                                IX(30-1) -IX(0+1),
                                                GetSystemMetrics(SM_CYHSCROLL),
                                                hWnd,
                                                SCR_GAS,
                                                hInst,
                                                NULL);
         SetScrollRange(HWNDScrollBars[SCR_GAS-15],SB_CTL,0,100,FALSE);
         ShowWindow(HWNDScrollBars[SCR_GAS-15],SW_SHOW);

         // Turbinendrehzahlbox
         HWNDInstruments[ANA_TURBINENDREHZAHL] = CreateWindow("analogmeter",
                                                 NULL,
                                                 WS_CHILD|AMS_DIGITAL|AMS_LINEMASK,
                                                 IX(0+1),
                                                 IY(50+1),
                                                 IX(30-1) - IX(0+1),
                                                 IY(80-1) - IY(50+1),
                                                 hWnd,
                                                 ANA_TURBINENDREHZAHL,
                                                 hInst,
                                                 NULL);

         SendMessage(HWNDInstruments[ANA_TURBINENDREHZAHL],AMM_SETRANGE,0,MAKELONG(0,5000));
         SendMessage(HWNDInstruments[ANA_TURBINENDREHZAHL],AMM_SETSIZE,11,0L);
         SetWindowText(HWNDInstruments[ANA_TURBINENDREHZAHL],"Turbinendrehzahl (U/min);0;1000;2000;3000;4000;5000");
         SendMessage(HWNDInstruments[ANA_TURBINENDREHZAHL],AMM_SETVALUE,0,0L);
         SendMessage(HWNDInstruments[ANA_TURBINENDREHZAHL],WM_SETFONT,globalWorkFont,FALSE);
         ShowWindow(HWNDInstruments[ANA_TURBINENDREHZAHL],SW_SHOW);
         // Turbinendrehzahl-Scrollbar
         HWNDScrollBars[SCR_TURBINENDREHZAHL-15] = CreateWindow("scrollbar",
                                                NULL,
                                                WS_CHILD|SBS_HORZ,
                                                IX(0+1),
                                                IY(80-1),
                                                IX(30-1) -IX(0+1),
                                                GetSystemMetrics(SM_CYHSCROLL),
                                                hWnd,
                                                SCR_TURBINENDREHZAHL,
                                                hInst,
                                                NULL);
         SetScrollRange(HWNDScrollBars[SCR_TURBINENDREHZAHL-15],SB_CTL,0,5000,FALSE);
         ShowWindow(HWNDScrollBars[SCR_TURBINENDREHZAHL-15],SW_SHOW);

         // Turbinendrehmomentbox
         HWNDInstruments[ANA_TURBINENDREHMOMENT] = CreateWindow("analogmeter",
                                                 NULL,
                                                 WS_CHILD|AMS_DIGITAL|AMS_LINEMASK,
                                                 IX(40+1),
                                                 IY(25+1),
                                                 IX(70-1) - IX(40+1),
                                                 IY(55-1) - IY(25+1),
                                                 hWnd,
                                                 ANA_TURBINENDREHMOMENT,
                                                 hInst,
                                                 NULL);

         SendMessage(HWNDInstruments[ANA_TURBINENDREHMOMENT],AMM_SETRANGE,0,MAKELONG(0,80));
         SendMessage(HWNDInstruments[ANA_TURBINENDREHMOMENT],AMM_SETSIZE,17,0L);
         SetWindowText(HWNDInstruments[ANA_TURBINENDREHMOMENT],"Turbinendrehmoment (kpm);0;10;20;30;40;50;60;70;80");
         SendMessage(HWNDInstruments[ANA_TURBINENDREHMOMENT],AMM_SETVALUE,0,0L);
         SendMessage(HWNDInstruments[ANA_TURBINENDREHMOMENT],WM_SETFONT,globalWorkFont,FALSE);
         ShowWindow(HWNDInstruments[ANA_TURBINENDREHMOMENT],SW_SHOW);
         break;

    case UD_SETUPFAHRWIDERSTANDSKRAFT:
         // Geschwindigkeitsbox
         HWNDInstruments[ANA_SPEED] = CreateWindow("analogmeter",
                                                 NULL,
                                                 WS_CHILD|AMS_DIGITAL|AMS_LINEMASK,
                                                 IX(0+1),
                                                 IY(25+1),
                                                 IX(30-1) - IX(0+1),
                                                 IY(55-1) - IY(25+1),
                                                 hWnd,
                                                 ANA_SPEED,
                                                 hInst,
                                                 NULL);

         SendMessage(HWNDInstruments[ANA_SPEED],AMM_SETRANGE,0,MAKELONG(0,210));
         SendMessage(HWNDInstruments[ANA_SPEED],AMM_SETSIZE,15,0L);
         SetWindowText(HWNDInstruments[ANA_SPEED],"Geschwindigkeit (km/h);0;30;60;90;120;150;180;210");
         SendMessage(HWNDInstruments[ANA_SPEED],AMM_SETVALUE,0,0L);
         SendMessage(HWNDInstruments[ANA_SPEED],WM_SETFONT,globalWorkFont,FALSE);
         ShowWindow(HWNDInstruments[ANA_SPEED],SW_SHOW);
         // Geschwindigkeits-Scrollbar
         HWNDScrollBars[SCR_SPEED-15] = CreateWindow("scrollbar",
                                                NULL,
                                                WS_CHILD|SBS_HORZ,
                                                IX(0+1),
                                                IY(55-1),
                                                IX(30-1) -IX(0+1),
                                                GetSystemMetrics(SM_CYHSCROLL),
                                                hWnd,
                                                SCR_SPEED,
                                                hInst,
                                                NULL);
         SetScrollRange(HWNDScrollBars[SCR_SPEED-15],SB_CTL,0,210,FALSE);
         ShowWindow(HWNDScrollBars[SCR_SPEED-15],SW_SHOW);

         // Fahrwiderstandskraftbox
         HWNDInstruments[ANA_FAHRWIDERSTAND] = CreateWindow("analogmeter",
                                                 NULL,
                                                 WS_CHILD|AMS_DIGITAL|AMS_LINEMASK,
                                                 IX(40+1),
                                                 IY(25+1),
                                                 IX(70-1) - IX(40+1),
                                                 IY(55-1) - IY(25+1),
                                                 hWnd,
                                                 ANA_FAHRWIDERSTAND,
                                                 hInst,
                                                 NULL);

         SendMessage(HWNDInstruments[ANA_FAHRWIDERSTAND],AMM_SETRANGE,0,MAKELONG(0,240));
         SendMessage(HWNDInstruments[ANA_FAHRWIDERSTAND],AMM_SETSIZE,17,0L);
         SetWindowText(HWNDInstruments[ANA_FAHRWIDERSTAND],"Fahrwiderstandskraft (kp);0;30;60;90;120;150;180;210;240");
         SendMessage(HWNDInstruments[ANA_FAHRWIDERSTAND],AMM_SETVALUE,0,0L);
         SendMessage(HWNDInstruments[ANA_FAHRWIDERSTAND],WM_SETFONT,globalWorkFont,FALSE);
         ShowWindow(HWNDInstruments[ANA_FAHRWIDERSTAND],SW_SHOW);
         break;

    case UD_SETUPBREMSKRAFT:
         // Bremspedalkraftbox
         HWNDInstruments[ANA_BREMSPEDALKRAFT] = CreateWindow("analogmeter",
                                                 NULL,
                                                 WS_CHILD|AMS_DIGITAL|AMS_LINEMASK,
                                                 IX(0+1),
                                                 IY(25+1),
                                                 IX(30-1) - IX(0+1),
                                                 IY(55-1) - IY(25+1),
                                                 hWnd,
                                                 ANA_BREMSPEDALKRAFT,
                                                 hInst,
                                                 NULL);

         SendMessage(HWNDInstruments[ANA_BREMSPEDALKRAFT],AMM_SETRANGE,0,MAKELONG(0,24));
         SendMessage(HWNDInstruments[ANA_BREMSPEDALKRAFT],AMM_SETSIZE,13,0L);
         SetWindowText(HWNDInstruments[ANA_BREMSPEDALKRAFT],"Bremspedalkraft (kp);0;4;8;12;16;20;24");
         SendMessage(HWNDInstruments[ANA_BREMSPEDALKRAFT],AMM_SETVALUE,0,0L);
         SendMessage(HWNDInstruments[ANA_BREMSPEDALKRAFT],WM_SETFONT,globalWorkFont,FALSE);
         ShowWindow(HWNDInstruments[ANA_BREMSPEDALKRAFT],SW_SHOW);
         // Bremspedalkraftbox-Scrollbar
         HWNDScrollBars[SCR_BREMSPEDALKRAFT-15] = CreateWindow("scrollbar",
                                                NULL,
                                                WS_CHILD|SBS_HORZ,
                                                IX(0+1),
                                                IY(55-1),
                                                IX(30-1) -IX(0+1),
                                                GetSystemMetrics(SM_CYHSCROLL),
                                                hWnd,
                                                SCR_BREMSPEDALKRAFT,
                                                hInst,
                                                NULL);
         SetScrollRange(HWNDScrollBars[SCR_BREMSPEDALKRAFT-15],SB_CTL,0,24,FALSE);
         ShowWindow(HWNDScrollBars[SCR_BREMSPEDALKRAFT-15],SW_SHOW);

         // Bremskraftbox
         HWNDInstruments[ANA_BREMSKRAFT] = CreateWindow("analogmeter",
                                                 NULL,
                                                 WS_CHILD|AMS_DIGITAL|AMS_LINEMASK,
                                                 IX(40+1),
                                                 IY(25+1),
                                                 IX(70-1) - IX(40+1),
                                                 IY(55-1) - IY(25+1),
                                                 hWnd,
                                                 ANA_BREMSKRAFT,
                                                 hInst,
                                                 NULL);

         SendMessage(HWNDInstruments[ANA_BREMSKRAFT],AMM_SETRANGE,0,MAKELONG(0,600));
         SendMessage(HWNDInstruments[ANA_BREMSKRAFT],AMM_SETSIZE,13,0L);
         SetWindowText(HWNDInstruments[ANA_BREMSKRAFT],"Bremskraft (kp);0;100;200;300;400;500;600");
         SendMessage(HWNDInstruments[ANA_BREMSKRAFT],AMM_SETVALUE,0,0L);
         SendMessage(HWNDInstruments[ANA_BREMSKRAFT],WM_SETFONT,globalWorkFont,FALSE);
         ShowWindow(HWNDInstruments[ANA_BREMSKRAFT],SW_SHOW);
         break;

    case UD_SETUPGESCHWINDIGKEIT:
         // Bremspedalkraftbox
         HWNDInstruments[ANA_BREMSPEDALKRAFT] = CreateWindow("analogmeter",
                                                 NULL,
                                                 WS_CHILD|AMS_DIGITAL|AMS_LINEMASK,
                                                 IX(0+1),
                                                 IY(0+1),
                                                 IX(15-1) - IX(0+1),
                                                 IY(15-1) - IY(0+1),
                                                 hWnd,
                                                 ANA_BREMSPEDALKRAFT,
                                                 hInst,
                                                 NULL);

         SendMessage(HWNDInstruments[ANA_BREMSPEDALKRAFT],AMM_SETRANGE,0,MAKELONG(0,24));
         SendMessage(HWNDInstruments[ANA_BREMSPEDALKRAFT],AMM_SETSIZE,13,0L);
         SetWindowText(HWNDInstruments[ANA_BREMSPEDALKRAFT],"Bremspedalkraft (kp);0;4;8;12;16;20;24");
         SendMessage(HWNDInstruments[ANA_BREMSPEDALKRAFT],AMM_SETVALUE,0,0L);
         SendMessage(HWNDInstruments[ANA_BREMSPEDALKRAFT],WM_SETFONT,globalWorkFont,FALSE);
         ShowWindow(HWNDInstruments[ANA_BREMSPEDALKRAFT],SW_SHOW);
         // Bremspedalkraftbox-Scrollbar
         HWNDScrollBars[SCR_BREMSPEDALKRAFT-15] = CreateWindow("scrollbar",
                                                NULL,
                                                WS_CHILD|SBS_HORZ,
                                                IX(0+1),
                                                IY(15-1),
                                                IX(15-1) -IX(0+1),
                                                GetSystemMetrics(SM_CYHSCROLL),
                                                hWnd,
                                                SCR_BREMSPEDALKRAFT,
                                                hInst,
                                                NULL);
         SetScrollRange(HWNDScrollBars[SCR_BREMSPEDALKRAFT-15],SB_CTL,0,24,FALSE);
         ShowWindow(HWNDScrollBars[SCR_BREMSPEDALKRAFT-15],SW_SHOW);
         // Gasbox
         HWNDInstruments[ANA_GAS] = CreateWindow("analogmeter",
                                                 NULL,
                                                 WS_CHILD|AMS_DIGITAL|AMS_LINEMASK,
                                                 IX(0+1),
                                                 IY(20+1),
                                                 IX(15-1) - IX(0+1),
                                                 IY(35-1) - IY(20+1),
                                                 hWnd,
                                                 ANA_GAS,
                                                 hInst,
                                                 NULL);

         SendMessage(HWNDInstruments[ANA_GAS],AMM_SETRANGE,0,MAKELONG(0,100));
         SendMessage(HWNDInstruments[ANA_GAS],AMM_SETSIZE,9,0L);
         SetWindowText(HWNDInstruments[ANA_GAS],"Gaspedalweg;0%;25%;50%;75%;100%");
         SendMessage(HWNDInstruments[ANA_GAS],AMM_SETVALUE,0,0L);
         SendMessage(HWNDInstruments[ANA_GAS],WM_SETFONT,globalWorkFont,FALSE);
         ShowWindow(HWNDInstruments[ANA_GAS],SW_SHOW);
         // Gasbox-Scrollbar
         HWNDScrollBars[SCR_GAS-15] = CreateWindow("scrollbar",
                                                NULL,
                                                WS_CHILD|SBS_HORZ,
                                                IX(0+1),
                                                IY(35-1),
                                                IX(15-1) -IX(0+1),
                                                GetSystemMetrics(SM_CYHSCROLL),
                                                hWnd,
                                                SCR_GAS,
                                                hInst,
                                                NULL);
         SetScrollRange(HWNDScrollBars[SCR_GAS-15],SB_CTL,0,100,FALSE);
         ShowWindow(HWNDScrollBars[SCR_GAS-15],SW_SHOW);
         // Turbinendrehmomentbox
         HWNDInstruments[ANA_TURBINENDREHMOMENT] = CreateWindow("analogmeter",
                                                 NULL,
                                                 WS_CHILD|AMS_DIGITAL|AMS_LINEMASK,
                                                 IX(20+1),
                                                 IY(40+1),
                                                 IX(35-1) - IX(20+1),
                                                 IY(55-1) - IY(40+1),
                                                 hWnd,
                                                 ANA_TURBINENDREHMOMENT,
                                                 hInst,
                                                 NULL);

         SendMessage(HWNDInstruments[ANA_TURBINENDREHMOMENT],AMM_SETRANGE,0,MAKELONG(0,80));
         SendMessage(HWNDInstruments[ANA_TURBINENDREHMOMENT],AMM_SETSIZE,9,0L);
         SetWindowText(HWNDInstruments[ANA_TURBINENDREHMOMENT],"Turbinendrehmoment (kpm);0;20;40;60;80");
         SendMessage(HWNDInstruments[ANA_TURBINENDREHMOMENT],AMM_SETVALUE,0,0L);
         SendMessage(HWNDInstruments[ANA_TURBINENDREHMOMENT],WM_SETFONT,globalWorkFont,FALSE);
         ShowWindow(HWNDInstruments[ANA_TURBINENDREHMOMENT],SW_SHOW);
         // Turbinendrehzahlbox
         HWNDInstruments[ANA_TURBINENDREHZAHL] = CreateWindow("analogmeter",
                                                 NULL,
                                                 WS_CHILD|AMS_DIGITAL|AMS_LINEMASK,
                                                 IX(20+1),
                                                 IY(60+1),
                                                 IX(35-1) - IX(20+1),
                                                 IY(75-1) - IY(60+1),
                                                 hWnd,
                                                 ANA_TURBINENDREHZAHL,
                                                 hInst,
                                                 NULL);

         SendMessage(HWNDInstruments[ANA_TURBINENDREHZAHL],AMM_SETRANGE,0,MAKELONG(0,5000));
         SendMessage(HWNDInstruments[ANA_TURBINENDREHZAHL],AMM_SETSIZE,11,0L);
         SetWindowText(HWNDInstruments[ANA_TURBINENDREHZAHL],"Turbinendrehzahl (U/min);0;1k;2k;3k;4k;5k");
         SendMessage(HWNDInstruments[ANA_TURBINENDREHZAHL],AMM_SETVALUE,0,0L);
         SendMessage(HWNDInstruments[ANA_TURBINENDREHZAHL],WM_SETFONT,globalWorkFont,FALSE);
         ShowWindow(HWNDInstruments[ANA_TURBINENDREHZAHL],SW_SHOW);
         // Antriebskraftbox
         HWNDInstruments[ANA_ANTRIEBSKRAFT] = CreateWindow("analogmeter",
                                                 NULL,
                                                 WS_CHILD|AMS_DIGITAL|AMS_LINEMASK,
                                                 IX(60+1),
                                                 IY(40+1),
                                                 IX(75-1) - IX(60+1),
                                                 IY(55-1) - IY(40+1),
                                                 hWnd,
                                                 ANA_ANTRIEBSKRAFT,
                                                 hInst,
                                                 NULL);

         SendMessage(HWNDInstruments[ANA_ANTRIEBSKRAFT],AMM_SETRANGE,0,MAKELONG(0,400));
         SendMessage(HWNDInstruments[ANA_ANTRIEBSKRAFT],AMM_SETSIZE,9,0L);
         SetWindowText(HWNDInstruments[ANA_ANTRIEBSKRAFT],"Antriebskraft (kp);0;100;200;300;400");
         SendMessage(HWNDInstruments[ANA_ANTRIEBSKRAFT],AMM_SETVALUE,0,0L);
         SendMessage(HWNDInstruments[ANA_ANTRIEBSKRAFT],WM_SETFONT,globalWorkFont,FALSE);
         ShowWindow(HWNDInstruments[ANA_ANTRIEBSKRAFT],SW_SHOW);
         // Geschwindigkeitsbox
         HWNDInstruments[ANA_SPEED] = CreateWindow("analogmeter",
                                                 NULL,
                                                 WS_CHILD|AMS_DIGITAL|AMS_LINEMASK,
                                                 IX(80+1),
                                                 IY(60+1),
                                                 IX(95-1) - IX(80+1),
                                                 IY(75-1) - IY(60+1),
                                                 hWnd,
                                                 ANA_SPEED,
                                                 hInst,
                                                 NULL);

         SendMessage(HWNDInstruments[ANA_SPEED],AMM_SETRANGE,0,MAKELONG(0,200));
         SendMessage(HWNDInstruments[ANA_SPEED],AMM_SETSIZE,9,0L);
         SetWindowText(HWNDInstruments[ANA_SPEED],"Geschwindigkeit (km/h);0;50;100;150;200");
         SendMessage(HWNDInstruments[ANA_SPEED],AMM_SETVALUE,0,0L);
         SendMessage(HWNDInstruments[ANA_SPEED],WM_SETFONT,globalWorkFont,FALSE);
         ShowWindow(HWNDInstruments[ANA_SPEED],SW_SHOW);
         // Fahrwiderstandskraftbox
         HWNDInstruments[ANA_FAHRWIDERSTAND] = CreateWindow("analogmeter",
                                                 NULL,
                                                 WS_CHILD|AMS_DIGITAL|AMS_LINEMASK,
                                                 IX(60+1),
                                                 IY(60+1),
                                                 IX(75-1) - IX(60+1),
                                                 IY(75-1) - IY(60+1),
                                                 hWnd,
                                                 ANA_FAHRWIDERSTAND,
                                                 hInst,
                                                 NULL);

         SendMessage(HWNDInstruments[ANA_FAHRWIDERSTAND],AMM_SETRANGE,0,MAKELONG(0,240));
         SendMessage(HWNDInstruments[ANA_FAHRWIDERSTAND],AMM_SETSIZE,9,0L);
         SetWindowText(HWNDInstruments[ANA_FAHRWIDERSTAND],"Fahrwiderstandskraft (kp);0;60;120;180;240");
         SendMessage(HWNDInstruments[ANA_FAHRWIDERSTAND],AMM_SETVALUE,0,0L);
         SendMessage(HWNDInstruments[ANA_FAHRWIDERSTAND],WM_SETFONT,globalWorkFont,FALSE);
         ShowWindow(HWNDInstruments[ANA_FAHRWIDERSTAND],SW_SHOW);
         // Bremskraftbox
         HWNDInstruments[ANA_BREMSKRAFT] = CreateWindow("analogmeter",
                                                 NULL,
                                                 WS_CHILD|AMS_DIGITAL|AMS_LINEMASK,
                                                 IX(60+1),
                                                 IY(20+1),
                                                 IX(75-1) - IX(60+1),
                                                 IY(35-1) - IY(20+1),
                                                 hWnd,
                                                 ANA_BREMSKRAFT,
                                                 hInst,
                                                 NULL);

         SendMessage(HWNDInstruments[ANA_BREMSKRAFT],AMM_SETRANGE,0,MAKELONG(0,600));
         SendMessage(HWNDInstruments[ANA_BREMSKRAFT],AMM_SETSIZE,7,0L);
         SetWindowText(HWNDInstruments[ANA_BREMSKRAFT],"Bremskraft (kp);0;200;400;600");
         SendMessage(HWNDInstruments[ANA_BREMSKRAFT],AMM_SETVALUE,0,0L);
         SendMessage(HWNDInstruments[ANA_BREMSKRAFT],WM_SETFONT,globalWorkFont,FALSE);
         ShowWindow(HWNDInstruments[ANA_BREMSKRAFT],SW_SHOW);

         break;

    case WM_TIMER:
         {
           double result;

           switch (TaskToDo)
           {
             case NOTHING:
                  break;

             case TURBINENDREHMOMENT:
                  {
                    result = GetTurbinendrehmoment(InputValues[ANA_TURBINENDREHZAHL],5000.,
                                                   InputValues[ANA_GAS],100.);
                    SendMessage(HWNDInstruments[ANA_TURBINENDREHMOMENT],AMM_SETVALUE,(int)result,0L);
                  }
                  break;

             case FAHRWIDERSTANDSKRAFT:
                  {
                    result = GetFahrwiderstandskraft(InputValues[ANA_SPEED]);
                    SendMessage(HWNDInstruments[ANA_FAHRWIDERSTAND],AMM_SETVALUE,(int)result,0L);
                  }
                  break;

             case BREMSKRAFT:
                  {
                    result = GetBremskraft(InputValues[ANA_BREMSPEDALKRAFT]);
                    SendMessage(HWNDInstruments[ANA_BREMSKRAFT],AMM_SETVALUE,(int)result,0L);
                  }
                  break;

             case GESCHWINDIGKEIT:
                  {
                    UpdateModel(InputValues[ANA_GAS],InputValues[ANA_BREMSPEDALKRAFT]);
                    SendMessage(HWNDInstruments[ANA_TURBINENDREHMOMENT],AMM_SETVALUE,(int)ModeledTurbinendrehmoment(),0L);
                    SendMessage(HWNDInstruments[ANA_TURBINENDREHZAHL],AMM_SETVALUE,(int)ModeledTurbinendrehzahl(),0L);
                    SendMessage(HWNDInstruments[ANA_BREMSKRAFT],AMM_SETVALUE,(int)ModeledBremskraft(),0L);
                    SendMessage(HWNDInstruments[ANA_ANTRIEBSKRAFT],AMM_SETVALUE,(int)ModeledAntriebskraft(),0L);
                    SendMessage(HWNDInstruments[ANA_FAHRWIDERSTAND],AMM_SETVALUE,(int)ModeledFahrwiderstandskraft(),0L);
                    SendMessage(HWNDInstruments[ANA_SPEED],AMM_SETVALUE,(int)ModeledFahrgeschwindigkeit(),0L);
                  }
           }
         }
         break;

    case WM_CLOSE:
         KillTimer(hWnd,ID_MODELTIMER);
         DestroyWindow(hWnd);
         break;

    case WM_DESTROY:
         break;

   default: return DefWindowProc(hWnd,Message,wParam,lParam);
  }
  return 0L;
}     // End of ChildWndProc


/************************************************************************/
/*                                                                      */
/* nCwRegisterClasses Function                                          */
/*                                                                      */
/* The following function registers all the classes of all the windows  */
/* associated with this application. The function returns an error code */
/* if unsuccessful, otherwise it returns 0.                             */
/*                                                                      */
/************************************************************************/

int nCwRegisterClasses(void)
{
 WNDCLASS   wndclass;    /* struct to define a window class             */
 memset(&wndclass, 0x00, sizeof(WNDCLASS));


 /* load WNDCLASS with window's characteristics                         */
 wndclass.style = CS_HREDRAW | CS_VREDRAW;
 wndclass.lpfnWndProc = WndProc;
 /* Extra storage for Class and Window objects                          */
 wndclass.cbClsExtra = 0;
 wndclass.cbWndExtra = 0;
 wndclass.hInstance = hInst;
 wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
 wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
 /* Create brush for erasing background                                 */
 wndclass.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
 wndclass.lpszMenuName = szAppName;   /* Menu Name is App Name */
 wndclass.lpszClassName = szAppName; /* Class Name is App Name */
 if(!RegisterClass(&wndclass))
   return -1;

 wndclass.style=CS_HREDRAW|CS_VREDRAW|CS_OWNDC;
 wndclass.lpfnWndProc = ChildWndProc;
 wndclass.hIcon=NULL;
 wndclass.lpszClassName = szChildName; /* Class Name is App Name */
 if(!RegisterClass(&wndclass))
   return -1;

 return(0);
} /* End of nCwRegisterClasses                                          */

/************************************************************************/
/*  CwUnRegisterClasses Function                                        */
/*                                                                      */
/*  Deletes any refrences to windows resources created for this         */
/*  application, frees memory, deletes instance, handles and does       */
/*  clean up prior to exiting the window                                */
/*                                                                      */
/************************************************************************/

void CwUnRegisterClasses(void)
{
  WNDCLASS   wndclass;    /* struct to define a window class             */
  memset(&wndclass, 0x00, sizeof(WNDCLASS));

  UnregisterClass(szAppName, hInst);
  UnregisterClass(szChildName, hInst);
}    /* End of CwUnRegisterClasses                                      */

// Handgemachtes isotropisches Koordinatensystem 100*100

int IX(double logicDimen)
{
  RECT rcClient;
  double multiplier;
  double physDimen;

  GetClientRect(HWndChild,&rcClient);
  multiplier=(double)rcClient.right/100.;
  physDimen=multiplier*logicDimen;

  return((int)physDimen);
}

int IY(double logicDimen)
{
  RECT rcClient;
  double multiplier;
  double physDimen;

  GetClientRect(HWndChild,&rcClient);
  multiplier=(double)rcClient.bottom/100.;
  physDimen=multiplier*logicDimen;

  return((int)physDimen);
}

void PfeilSpitze(HDC hdc,int direction,int x,int y)
{
  POINT p[3];

  p[0].x = x;
  p[0].y = y;

  switch(direction)
  {
    case RAUF:
         p[1].x = p[0].x - 2;
         p[1].y = p[0].y + 5;
         p[2].x = p[0].x + 2;
         p[2].y = p[0].y + 5;
         break;

    case RUNTER:
         p[1].x = p[0].x - 2;
         p[1].y = p[0].y - 5;
         p[2].x = p[0].x + 2;
         p[2].y = p[0].y - 5;
         break;

    case LINKS:
         p[1].x = p[0].x + 5;
         p[1].y = p[0].y - 2;
         p[2].x = p[0].x + 5;
         p[2].y = p[0].y + 2;
         break;

    case RECHTS:
         p[1].x = p[0].x - 5;
         p[1].y = p[0].y - 2;
         p[2].x = p[0].x - 5;
         p[2].y = p[0].y + 2;
         break;
  }

  Polygon(hdc,(LPPOINT)&p,3);
}

void DestroyExistingAnaMeters(void)
{
  int i;

  for(i=0;i < NUMCACHEDANAHANDLES;i++)
  {
    if (HWNDInstruments[i] != NULL)
    {
      DestroyWindow(HWNDInstruments[i]);
    }
  }
}

void DestroyExistingScrollBars(void)
{
  int i;

  for(i=0;i < NUMCACHEDANAHANDLES;i++)
  {
    if (HWNDScrollBars[i] != NULL)
    {
      DestroyWindow(HWNDScrollBars[i]);
    }
  }
}

void ResetInputValues(void)
{
  int i;

  for(i=0;i < NUMCACHEDANAHANDLES;i++)
  {
    InputValues[i] = 0.;
  }
}

void Label(HDC hdc,LPSTR str,int x1,int y1,int x2,int y2)
{
  RECT rct;
  HANDLE hNormalFont = SelectObject(hdc,globalWorkFont);

  rct.left = IX(x1);
  rct.top = IY(y1);
  rct.right = IX(x2);
  rct.bottom = IY(y2);

  Rectangle(hdc,rct.left,rct.top,rct.right,rct.bottom);
  rct.right -= 1;
  rct.bottom -= 1;
  DrawText(hdc,str,-1,&rct,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
  SelectObject(hdc,hNormalFont);
}

