Variable ausgeben



  • hallo Forum,

    ich habe ein tatstatur abfrage programm und möchte eine variable in const char ausgeben, weiß0 ahber nicht wie, ich möcte halt das der wert dort angezeigt wird.

    Hier der Code:

    #include <windows.h>
    #include "stdafx.h"
    #include "gjfghjs.h"
    
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                       PSTR szCmdLine, int iCmdShow)
    {
       MSG          msg;
       HWND         hWnd;
       WNDCLASS     wc;
    
       char szAppName[] = "Tastaturabfragen";
    
       wc.cbClsExtra         = 0;
       wc.cbWndExtra         = 0;
       wc.hbrBackground      = (HBRUSH) GetStockObject(WHITE_BRUSH);
       wc.hCursor            = LoadCursor(NULL, IDC_ARROW);
       wc.hIcon              = LoadIcon(NULL, IDI_APPLICATION);
       wc.hInstance          = hInstance;
       wc.lpfnWndProc        = WndProc;
       wc.lpszClassName      = szAppName;
       wc.lpszMenuName       = NULL;
       wc.style              = CS_HREDRAW | CS_VREDRAW;
    
       RegisterClass(&wc);
    
      hWnd = CreateWindow(szAppName,
                TEXT("FullscreenWindow"),
                WS_POPUP,
                CW_USEDEFAULT,
                CW_USEDEFAULT,
                CW_USEDEFAULT,
                CW_USEDEFAULT,
                NULL,
                NULL,
                hInstance,
                NULL);
    
        // window darstellen und maximieren
        ShowWindow(hWnd, SW_MAXIMIZE);
    
       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 RECT   rect;
       static bool   ArrowKeys[4];
    
       switch (message)
       {
    
       case WM_SIZE:
          {
             rect.right  = LOWORD(lParam);
             rect.bottom = HIWORD(lParam);
             return 0;
          }
    
     case WM_KEYDOWN:
          {
    
             switch (wParam)
             {
             case VK_LEFT:
    
               ArrowKeys[0] = true;
                break;
    
             case VK_UP:
                ArrowKeys[1] = true;
                break;
    
             case VK_RIGHT:
                ArrowKeys[2] = true;
                break;
    
             case VK_DOWN:
                ArrowKeys[3] = true;
                break;
    
             default:
                return 0;
             }
             InvalidateRect(hWnd, NULL, FALSE);
             return 0;
          }
    
          case WM_KEYUP:
          {
             switch (wParam)
             {
             case VK_LEFT:
                ArrowKeys[0] = false;
                break;
    
             case VK_UP:
                ArrowKeys[1] = false;
                break;
    
             case VK_RIGHT:
                ArrowKeys[2] = false;
                break;
    
             case VK_DOWN:
                ArrowKeys[3] = false;
                break;
    
             default:
                return 0;
             }
             InvalidateRect(hWnd, NULL, FALSE);
             return 0;
          }
    
          case WM_PAINT:
          {
             PAINTSTRUCT  ps;
             HDC          hDC;
           int a;
           int i;
    
    	   const char  szText[] = "Hallo, dies ist der Text. %a";
    
           SIZE         size;
    
           char szKeyStatus[40];
             int  iKeyLength;
    
             hDC = BeginPaint(hWnd, &ps);
    
    		  TextOut(hDC, 50, 50, szText, sizeof(szText) - 1);
    
           for (int i = 0; i < 4; i++)
             {
                iKeyLength = wsprintf(szKeyStatus, "Pfeil-Taste %i: %i",
                                      i, ArrowKeys[i]);
    
              GetTextExtentPoint32(hDC, szKeyStatus, iKeyLength, &size);
    
                TextOut(hDC, rect.right / 2 - size.cx / 2, rect.bottom / 2 -
                        2 * size.cy + i * size.cy, szKeyStatus, iKeyLength);
    
             int a = ArrowKeys[i];
    		 int b = i;
    
           }
    
             EndPaint(hWnd, &ps);
    
             return 0;
          }
       case WM_DESTROY:
          {
             PostQuitMessage(0);
             return 0;
          }
       }
       return DefWindowProc(hWnd, message, wParam, lParam);
    }
    

    Könnte mir vieleicht jemand sagen wie ich in const char einen wert einer variable anzeigen lassen kann?



  • "const char" ist ein Typ und keine Variable. Probier es mit wsprintf () :

    ...
    // const char  szText[] = "Hallo, dies ist der Text. %a"; 
     char  szText [200];
     wsprintf (szText,"Hallo, dies ist der Text. %i",a); // <- formatiert Variable "a" als Ganzzahl (integer)
    ...
    

    Und bei der Ausgabe dann :

    ...
    // TextOut(hDC, 50, 50, szText, sizeof(szText) - 1);
     TextOut(hDC, 50, 50, szText, lstrlen (szText));
    ...
    


  • Vielen dank!!!

    das amcht das jetzt viel einfacher für mich die fehler zu finden und innerhalb von 5 minuten habe ich jetzt das gesschaft wo ich schon seit 2 tagen dranne sitze 😃

    Vielen dank,. jetzt weiß ich auch endlich das ich die ArrowLey[2] oder 3 oder so benutzen muss und nicht ArrowKey[i]

    😃

    danke nochmals!



  • Achso, mal so eine andere frage, wie kann ich in einer schleife einen sleep einbauen???

    Denn wenn ich einen sleep einbaue mit dem befehl:

    sleep 1000;

    dann kommt ne error

    Dnann komt da sleep kein decladierter bezeichner ist 😕

    oder kann man irgentwie anders eine sleep machen?



  • Sleep(1000);

    Dafür brauchst du nur die windows.h zu inkludieren, dann läuft das.

    gruß
    Martin



  • danke, es klappt, aber nun habe ich ein anderes problehm 😕

    ich habe zum test erstmal nur das sleep in die Schleife, aber wenn die bedingung der schleife erfüllt wird, dann geht die cpu wieder auf 100% selbst wenn ich sie wieder los lasse.

    Eine schleife wird ja so lange durchgeführt bis diebedingung erfüllt ist, und nichts von ausehalb kann dann auf die bedingung zu grefen, also es wird nur die schleife bearbeitet, nicht anderes, wenn die schleife anfängt durchzulaufen.

    Aber nun habe ich ja ein Sleep, also sollte die schleife ja nicht permanent durchlaufen oder? aber sie tut es trotzdem, habe ich da noch etwas übersehen?? bitte klärt mich auf 🙂

    Unf hier mein wunderbarer code, ist zwar noch ein wenig durcheinander, aber er erfüllt seinen sinn^^

    #include <windows.h>
    #include<iostream>
    #include "stdafx.h"
    #include "gege.h"
    
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                       PSTR szCmdLine, int iCmdShow)
    {
       MSG          msg;
       HWND         hWnd;
       WNDCLASS     wc;
    
       char szAppName[] = "Tastaturabfragen";
    
       wc.cbClsExtra         = 0;
       wc.cbWndExtra         = 0;
       wc.hbrBackground      = (HBRUSH) GetStockObject(WHITE_BRUSH);
       wc.hCursor            = LoadCursor(NULL, IDC_ARROW);
       wc.hIcon              = LoadIcon(NULL, IDI_APPLICATION);
       wc.hInstance          = hInstance;
       wc.lpfnWndProc        = WndProc;
       wc.lpszClassName      = szAppName;
       wc.lpszMenuName       = NULL;
       wc.style              = CS_HREDRAW | CS_VREDRAW;
    
       RegisterClass(&wc);
    
      hWnd = CreateWindow(szAppName,
                TEXT("FullscreenWindow"),
                WS_POPUP,
                CW_USEDEFAULT,
                CW_USEDEFAULT,
                CW_USEDEFAULT,
                CW_USEDEFAULT,
                NULL,
                NULL,
                hInstance,
                NULL);
    
        // window darstellen und maximieren
        ShowWindow(hWnd, SW_MAXIMIZE);
    
       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 RECT   rect;
       static bool   ArrowKeys[4];
       static char     cBuffer[100];
       static int      iActLen; 
    
    HANDLE hbitmap = LoadImage(NULL,TEXT("C:\\Dokumente und Einstellungen\\Dustin.TRANCE\\Eigene Dateien\\Visual Studio 2005\\Projects\\gege\\bild2.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
    HDC hdc = GetWindowDC(hWnd);
    HDC hdc_ram = CreateCompatibleDC(NULL);
    
       switch (message)
       {
    
       case WM_SIZE:
          {
             rect.right  = LOWORD(lParam);
             rect.bottom = HIWORD(lParam);
             return 0;
          }
    
    	  case WM_CHAR:
          {
             switch (wParam)
             {
    
              case '\r':
                iActLen = 0;
                InvalidateRect(hWnd, NULL, TRUE);
                break;
    
             case '\b':
                if (iActLen <= 0)
                   break;
    
                iActLen--;
                InvalidateRect(hWnd, NULL, TRUE);
                break;
    
                      case '\t':
             case '\n':
             case  27 :
                break;
    
     default:
                if (iActLen < sizeof(cBuffer))
                {
                   cBuffer[iActLen++] = wParam;
                   InvalidateRect(hWnd, NULL, FALSE);
                }
                break;
             }
             return 0;
          } 
    
     case WM_KEYDOWN:
          {
    
             switch (wParam)
             {
             case VK_LEFT:
    
               ArrowKeys[0] = true;
                break;
    
             case VK_UP:
                ArrowKeys[1] = true;
                break;
    
             case VK_RIGHT:
                ArrowKeys[2] = true;
                break;
    
             case VK_DOWN:
                ArrowKeys[3] = true;
                break;
    
             default:
                return 0;
             }
             InvalidateRect(hWnd, NULL, FALSE);
             return 0;
          }
    
          case WM_KEYUP:
          {
             switch (wParam)
             {
             case VK_LEFT:
                ArrowKeys[0] = false;
                break;
    
             case VK_UP:
                ArrowKeys[1] = false;
                break;
    
             case VK_RIGHT:
                ArrowKeys[2] = false;
                break;
    
             case VK_DOWN:
                ArrowKeys[3] = false;
                break;
    
             default:
                return 0;
             }
             InvalidateRect(hWnd, NULL, FALSE);
             return 0;
          }
    
          case WM_PAINT:
          {
             PAINTSTRUCT  ps;
             HDC          hDC;
           int a=0;
    
           int i;
    
           SIZE         size;
    
           char szKeyStatus[40];
             int  iKeyLength;
    
             hDC = BeginPaint(hWnd, &ps);
    
    		 DrawText(hDC, cBuffer, iActLen, &rect,
                              DT_SINGLELINE | DT_VCENTER); 
    
    		 hbitmap = LoadImage (NULL,TEXT("C:\\bild2.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
      hdc_ram = CreateCompatibleDC(NULL);
      SelectObject (hdc_ram, hbitmap);
      BitBlt       (hdc,50,50,500,500,hdc_ram,0,0,SRCCOPY);
      DeleteDC     (hdc_ram);
      DeleteObject (hbitmap); 
    
      hbitmap = LoadImage (NULL,TEXT("C:\\bild2.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
      hdc_ram = CreateCompatibleDC(NULL);
      SelectObject (hdc_ram, hbitmap);
      BitBlt       (hdc,100,100,500,500,hdc_ram,0,0,SRCCOPY);
      DeleteDC     (hdc_ram);
      DeleteObject (hbitmap); 
    
           for (int i = 0; i < 4; i++)
             {
    
                iKeyLength = wsprintf(szKeyStatus, "Pfeil-Taste %i: %i",
                                      i, ArrowKeys[i]);
    
              GetTextExtentPoint32(hDC, szKeyStatus, iKeyLength, &size);
    
                TextOut(hDC, rect.right / 2 - size.cx / 2, rect.bottom / 2 -
                        2 * size.cy + i * size.cy, szKeyStatus, iKeyLength);
    
             int a = ArrowKeys[i];
    		 int b = ArrowKeys[2];
    
    		 char  szText [200];
           wsprintf (szText,"Hallo, dies ist der Text. %i %i",b, a); // <- formatiert Variable "a" als Ganzzahl (integer) 
           TextOut(hDC, 50, 50, szText, lstrlen (szText));
    
    	   while(b==1)
    	   {
    		   Sleep(1000);
    	   }
    
    	   }
    
             EndPaint(hWnd, &ps);
    
             return 0;
          }
       case WM_DESTROY:
          {
             PostQuitMessage(0);
             return 0;
          }
       }
       return DefWindowProc(hWnd, message, wParam, lParam);
    }
    


  • while(b==1)
    {
    Sleep(1000);
    }
    

    Du hast keine Abbruchbedingung...:

    Die Tastendrücke werden ja nicht in der Schleife getestet, sondern außerhalb, also dort, wo du in der Schleife nicht testest:

    Deine Schleife läuft immer weiter und macht nichts! Du prüfst auch nicht auf Tastenevents! (in der Schleife)

    Aber nun habe ich ja ein Sleep, also sollte die schleife ja nicht permanent durchlaufen oder? aber sie tut es trotzdem, habe ich da noch etwas übersehen?? bitte klärt mich auf 🙂

    Warum sollte sie nicht immer durchlaufen? Sleep() lässt das Programm an der angegebenen Stelle pausieren...



  • Wie kann man tastenevent prüfen?

    Und wie ist es möglich eine schleife für bsp 1 sekunde anzuhalten, das sie nach 1 sekunde wieder drcuhleuft?

    MfG
    Showball!


Anmelden zum Antworten