1 Pluspunkt 0 Minuspunkte

Wie kann ich einen Button in einem Windows Fenster anzeigen?

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

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch(uMsg)
    {
        case WM_CLOSE:
            PostQuitMessage(0);
            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);

    ShowWindow(hwnd, nCmdShow);

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

    return 0;
}

von  

1 Antwort

0 Pluspunkte 0 Minuspunkte

Nach dem Erstellen des Hauptfenster definiere mit

HWND hButton = CreateWindow(
    _T("BUTTON"),
    _T("Klick mich"),
    WS_CHILD | WS_VISIBLE,
    50, 50, 100, 30, // Position und Größe des Buttons
    hwnd, // Das Elternfenster (in diesem Fall das Hauptfenster)
    NULL,
    hInstance,
    NULL
);

den Button. Füge einen Case (WM_COMMAND) in der WindowProc ein um die Nachrichten des Buttons zu behandeln.

case WM_COMMAND:
    if (LOWORD(wParam) == BN_CLICKED) {
        // Hier wird der Code ausgeführt, wenn der Button geklickt wird
        MessageBox(hwnd, _T("Button wurde geklickt!"), _T("Button Klick"), MB_OK);
    }
    break;

Hier noch einmal das ganze zusammengefasst.

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

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) {
                MessageBox(hwnd, _T("Button wurde geklickt!"), _T("Button Klick"), MB_OK);
            }
            break;
        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);

    ShowWindow(hwnd, nCmdShow);

    HWND hButton = CreateWindow(
        _T("BUTTON"),
        _T("Klick mich"),
        WS_CHILD | WS_VISIBLE,
        50, 50, 100, 30,
        hwnd,
        NULL,
        hInstance,
        NULL
    );

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

    return 0;
}
von (542 Punkte)