lima-city: Webhosting, Domains und Cloud
3 Pluspunkte 0 Minuspunkte

Ich möchte ein einfaches Formulat mit einem Textfekd und einem Button erstellen. Wenn ich auf den Button klicke soll der Inhalt des Textfeld in einem Popup angezeigt werden.

#include <windows.h>
#include <tchar.h>

HWND g_hTextbox;
HWND g_hButton;

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch(uMsg)
    {
        case WM_CLOSE:
            PostQuitMessage(0);
            return 0;
        case WM_COMMAND:
            if (LOWORD(wParam) == BN_CLICKED) // Überprüfen, ob der Button geklickt wurde
            {
                TCHAR buffer[512];
                GetWindowText(g_hTextbox, buffer, 512);

                MessageBox(hwnd, buffer, _T("Eingegebener Text"), MB_OK);
            }
            return 0;
        default:
            return DefWindowProc(hwnd, uMsg, wParam, lParam);
    }
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    WNDCLASS wc = {};
    wc.lpfnWndProc = WindowProc;
    wc.hInstance = hInstance;
    wc.lpszClassName = _T("SimpleWindowClass");

    RegisterClass(&wc);

    HWND hwnd = CreateWindowEx(
        0,
        _T("SimpleWindowClass"),
        _T("Zeichnen in C"),
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT, 800, 600,
        0,
        0,
        hInstance,
        0);

    g_hTextbox = CreateWindowEx(
        0,
        _T("EDIT"),
        NULL,
        WS_CHILD | WS_VISIBLE | WS_BORDER | ES_MULTILINE,
        50, 50, 300, 200,
        hwnd,
        0,
        hInstance,
        0);

    g_hButton = CreateWindowEx(
        0,
        _T("BUTTON"),
        _T("Klick mich"),
        WS_CHILD | WS_VISIBLE,
        50, 270, 100, 30,
        hwnd,
        (HMENU)1, // Eindeutige ID für den Button
        hInstance,
        0);

    ShowWindow(hwnd, nCmdShow);

    MSG msg = {};
    while(GetMessage(&msg, 0, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return 0;
}

Das Problem ist sobald ich mit der Maus auf das Textfeld klicke um etwas einzugeben öffnet sich sofot das Popup und zeigt eine leere Eingabe an.

von  

1 Antwort

2 Pluspunkte 0 Minuspunkte

Das passiert, weil das WM_COMMAND Ereignis auch ausgelöst wird, wenn die Textarea den Fokus erhält. Um sicherzustellen, dass die MessageBox nur angezeigt wird wenn der Button geklickt wird, kannst du eine zusätzliche Bedingung hinzufügen die prüft, ob der Button die Quelle des Event ist.

case WM_COMMAND:
    if (LOWORD(wParam) == 1 && HIWORD(wParam) == BN_CLICKED)

von (720 Punkte)  
Diese Community basiert auf dem Prinzip der Selbstregulierung. Beiträge werden von Nutzern erstellt, bewertet und verbessert – ganz ohne zentrale Moderation.

Wer hilfreiche Fragen stellt oder gute Antworten gibt, sammelt Punkte. Mit steigender Punktzahl erhalten Mitglieder automatisch mehr Rechte, zum Beispiel

  • Kommentare verfassen
  • Fragen und Antworten bewerten
  • Themen von Fragen bearbeiten
  • Fragen, Antworten und Kommentare bearbeiten
  • Inhalte ausblenden

So entsteht eine Plattform, auf der sich Qualität durchsetzt – getragen von einer engagierten Gemeinschaft.

2.3k Fragen

2.8k Antworten

266 Kommentare

14 Nutzer