Eingabe und Ausgabe in einer Win32



  • Hallo Ich habe da mal einen Code geschrieben der mir ein Text Fenster öffnet in dem Press 1 steht nun möchte ich das ich das ganze in die Variable a schreiben kann und das er mir das als Test wieder ausgibt getch() und cin haben für das eingeben nicht funktioniert bin persönlich noch recht neu auf dem Gebiet
    den Code habe ich von
    https://msdn.microsoft.com/de-de/library/bb384843.aspx
    musste ich aber leicht umwandeln damit es auch in Dev c++ (mein Programmier Pogramm) funktionirt

    p.s der Code ist ohne Kommentare damit er hier kürzer wirkt

    #include <windows.h>
    #include <stdlib.h>
    #include <string.h>
    #include <tchar.h>
    #include <conio.h>
    
    static TCHAR szWindowClass[] = _T("win32app");
    
    static TCHAR szTitle[] = _T("Win32");
    
    HINSTANCE hInst;
    
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    
    int WINAPI WinMain(HINSTANCE hInstance,
                       HINSTANCE hPrevInstance,
                       LPSTR lpCmdLine,
                       int nCmdShow)
    {
        WNDCLASSEX wcex;
    
        wcex.cbSize = sizeof(WNDCLASSEX);
        wcex.style          = CS_HREDRAW | CS_VREDRAW;
        wcex.lpfnWndProc    = WndProc;
        wcex.cbClsExtra     = 0;
        wcex.cbWndExtra     = 0;
        wcex.hInstance      = hInstance;
        wcex.hIcon          = LoadIcon(hInstance, IDI_APPLICATION);
        wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
        wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
        wcex.lpszMenuName   = NULL;
        wcex.lpszClassName  = szWindowClass;
        wcex.hIconSm        = LoadIcon(wcex.hInstance,IDI_APPLICATION);
    
        if (!RegisterClassEx(&wcex))
        {
            MessageBox(NULL,
                _T("Call to RegisterClassEx failed!"),
                _T("Win32 Guided Tour"),
                NULL);
    
            return 1;
        }
    
        hInst = hInstance; 
    
        HWND hWnd = CreateWindow(
            szWindowClass,
            szTitle,
            WS_OVERLAPPEDWINDOW,
            CW_USEDEFAULT, CW_USEDEFAULT,
            1920, 1480, //(width, length)
            NULL,
            NULL,
            hInstance,
            NULL
        );
    
        if (!hWnd)
        {
            MessageBox(NULL,
                _T("Call to CreateWindow failed!"),
                _T("Win32 Guided Tour"),
                NULL);
    
            return 1;
        }
    
        ShowWindow(hWnd,
            nCmdShow);
        UpdateWindow(hWnd);
    
        MSG msg;
        while (GetMessage(&msg, NULL, 0, 0))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    
        return (int) msg.wParam;
    }
    
    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        PAINTSTRUCT ps;
        HDC hdc;
        TCHAR greeting[] = _T("Press 1");
    

    An dieser stelle ist ja soweit ich das verstanden habe der Kern des Programmes also sollte er hier meine Eingabe abfangen

    switch (message)
        {
        case WM_PAINT:
            hdc = BeginPaint(hWnd, &ps);
    
            TextOut(hdc,
                5, 5,
                greeting, _tcslen(greeting));
    
            EndPaint(hWnd, &ps);
            break;
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
            break;
        }
    
        return 0;
    }
    

    Danke jetzt schon für jede Hilfe 😉 .



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (alle ISO-Standards) in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Ich würde dir empfehlen, erst einmal die Grundlagen von C zu lernen, bevor du an die WinApi gehst.

    FP C++ Neuling schrieb:

    Hallo Ich habe da mal einen Code geschrieben der mir ein Text Fenster öffnet in dem Press 1 steht nun möchte ich das ich das ganze in die Variable a schreiben kann und das er mir das als Test wieder ausgibt getch() und cin haben für das eingeben nicht funktioniert

    Weil ein Fenster keine Konsole ist, du hast auch kein Text Fenster erstellt, sondern nur "Press 1" gezeichnet.

    Btw: dein Programm ist C und kein C++.



  • FP C++ Neuling schrieb:

    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        PAINTSTRUCT ps;
        HDC hdc;
        static TCHAR greeting[] = _T("Press 1");
    

    An dieser stelle ist ja soweit ich das verstanden habe der Kern des Programmes also sollte er hier meine Eingabe abfangen

    switch (message)
        {
        case ...
    

    So ist das wohl ...

    case WM_KEYDOWN:
          if ( wParam == '1' )
          {
            greeting[0] = '1';
            greeting[1] = 0;
            return 0L;
          }
          break;
    ...
    

    Prinzip; Code nicht getestet.



  • genau, vom prinzip her ist das so. bis auf die tatsache, dass du das return 0L nicht brauchst.

    wenn du etwas schreiben willst, nimm drawtext() und wenn du einigermaßen vernünftig die winapi benutzen willst, kauf dir ein vernünftiges buch, wie z.b. "windows programmierung - das entwicklerhandbuch zur win32-api" von charles petzold.

    ist aber ein ziemlich dicker wälzer, der vom anspruch her um einiges über typische übungsaufgaben zur c-programmierung hinaus geht, sprich wenn du nicht fit in mathe bist, kannst du dir gleich noch mathematik für ingenieure dazu bestellen. 🙄


Anmelden zum Antworten