4 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 (716 Punkte)