okienko dialogowe z kwadratem

okienko dialogowe z kwadratem
wilkwielki
  • Rejestracja:ponad rok
  • Ostatnio:2 dni
  • Postów:426
0

jak w temacie, jak w c++ mozna wywołać okienko małe dialogowe np 200 na 200 pikseli z kwadracikiem np 50 na 10 na srodku tego okienka np w kolorze zielonym i czy takie okno będzie czy też nie bedzie blokowało głownej petkli aplikacji , owe wywołanie miało by być z konsoli czyli od funkcji main()

edytowany 1x, ostatnio: wilkwielki
BR
  • Rejestracja:10 miesięcy
  • Ostatnio:2 minuty
  • Postów:25
0

Nie wiem do czego to potrzebne. Sposobów jest wiele.

Raylib

Kopiuj
#include "raylib.h"

int main() {
    const int screenWidth = 200, screenHeight = 200;
    InitWindow(screenWidth, screenHeight, "Raylib Example");

    while (!WindowShouldClose()) {
        BeginDrawing();
        ClearBackground(RAYWHITE);
        DrawRectangle((screenWidth - 50) / 2, (screenHeight - 10) / 2, 50, 10, GREEN);
        EndDrawing();
    }

    CloseWindow();
    return 0;
}

QT

Kopiuj
#include <QApplication>
#include <QWidget>
#include <QPainter>

class MyWidget : public QWidget {
protected:
    void paintEvent(QPaintEvent*) override {
        QPainter painter(this);
        painter.fillRect((width() - 50) / 2, (height() - 10) / 2, 50, 10, Qt::green);
    }
};

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);
    MyWidget window;
    window.resize(200, 200);
    window.show();
    return app.exec();
}

WINAPI

Kopiuj
#include <windows.h>

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) {
    switch (msg) {
        case WM_PAINT: {
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hwnd, &ps);
            HBRUSH greenBrush = CreateSolidBrush(RGB(0, 255, 0));
            RECT rect = { 75, 95, 125, 105 };  // (x1, y1, x2, y2)
            FillRect(hdc, &rect, greenBrush);
            DeleteObject(greenBrush);
            EndPaint(hwnd, &ps);
        } break;
        case WM_DESTROY:
            PostQuitMessage(0);
            return 0;
    }
    return DefWindowProc(hwnd, msg, wp, lp);
}

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, int nCmdShow) {
    const char CLASS_NAME[] = "MyWindowClass";
    WNDCLASS wc = {};
    wc.lpfnWndProc = WndProc;
    wc.hInstance = hInst;
    wc.lpszClassName = CLASS_NAME;

    RegisterClass(&wc);
    HWND hwnd = CreateWindow(CLASS_NAME, "WinAPI Example", WS_OVERLAPPEDWINDOW & ~WS_THICKFRAME & ~WS_MAXIMIZEBOX,
                             CW_USEDEFAULT, CW_USEDEFAULT, 200, 200, nullptr, nullptr, hInst, nullptr);

    ShowWindow(hwnd, nCmdShow);
    MSG msg = {};
    while (GetMessage(&msg, nullptr, 0, 0)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return 0;
}

Nie rozumiem co znaczy że ma być wywołany z konsoli. To czy będzie blokowało pewnie zależy od tego jak się napisze. Można użyć osobnego wątku gdyby to miał być problem. Nie mam w tych sprawach doświadczenia. Kod jest generowany. Sprawdziłem tylko Raylib - działa.


Jeśli niepotrzebnie się powtarzam - przepraszam. Jeśli się mylę proszę mnie poprawić.
edytowany 1x, ostatnio: brokenelevator
wilkwielki
  • Rejestracja:ponad rok
  • Ostatnio:2 dni
  • Postów:426
0

z konsoli czyli start od int main(int argc, char* argv[]) {}
te dwa pierwsze przykady wszystko fajnie tyle ze mój vc++ nie posiada takich plików nagłówkowych i to u mnie nie działa ale dzięki , jak masz inny sposób to poczekam proszę i nie pod Raylib ani pod Qt tylko pod vc++

edytowany 1x, ostatnio: wilkwielki
BR
  • Rejestracja:10 miesięcy
  • Ostatnio:2 minuty
  • Postów:25
0

jak pisałem. Sposobów jest wiele, tylko że myślę że większość z nich będzie wymagała jakiegoś dodatkowego pliku nagłówkowego. Dodatkowo, zero gwarancji że będzie działało w VC++6.0 Pro z C++98.

Raylib jest dostępny tu GitHub - strona projektu.
QT pewnie jakoś tu link

Tak pól żartem pół serio - bo w konsoli. Jeszcze jeden przykład.

ncurses (też generowany, ale z pomocą - działa)

Kopiuj
#include <ncurses.h>

int main() {
    initscr();            // Inicjalizacja ncurses
    noecho();
    curs_set(0);          // Ukrycie kursora
    start_color();        // Włączenie obsługi kolorów
    init_pair(1, COLOR_GREEN, COLOR_GREEN);  // Zielony tekst na zielonym tle

    int width = 50, height = 10;
    int start_x = (COLS - width) / 2;
    int start_y = (LINES - height) / 2;

    attron(COLOR_PAIR(1));  // Aktywuj kolor
    for (int i = 0; i < height; i++) {
        for (int j = 0; j < width; j++) {
            mvaddch(start_y + i, start_x + j, ' ');  // Używamy spacji do rysowania
        }
    }
    attroff(COLOR_PAIR(1)); // Dezaktywuj kolor

    refresh();
    getch();  // Czekaj na klawisz
    endwin(); // Zakończ ncurses
    return 0;
}

Jeśli niepotrzebnie się powtarzam - przepraszam. Jeśli się mylę proszę mnie poprawić.
edytowany 1x, ostatnio: brokenelevator
wilkwielki
  • Rejestracja:ponad rok
  • Ostatnio:2 dni
  • Postów:426
0

to ostatnie fajne tylko skąd pobrać ten plik nagłówkowy #include <ncurses.h>

BR
  • Rejestracja:10 miesięcy
  • Ostatnio:2 minuty
  • Postów:25
0

Używałem kiedyś pod Windows. Mam dwie małe gry w tym napisane. To jest 'win32a', wersja ncurses pod Windows. Ciekawą ma historie.

PDCursesMod


Jeśli niepotrzebnie się powtarzam - przepraszam. Jeśli się mylę proszę mnie poprawić.
wilkwielki
  • Rejestracja:ponad rok
  • Ostatnio:2 dni
  • Postów:426
0

jak tego PDCursesMod zainstalować pod vc++ ?

BR
  • Rejestracja:10 miesięcy
  • Ostatnio:2 minuty
  • Postów:25
0

Tutaj są jakieś instrukcje. Nigdy nie używałem VC++. Może raz przez chwilę. Na samym początku używałem Borland C++ Buildera 6 Personal. Później już tylko g++ (pod MinGW/MSYS2 albo Linux). W skrócie jest makefile dostępny (Makefile.vc - Microsoft Visual C++).

win32a README


Jeśli niepotrzebnie się powtarzam - przepraszam. Jeśli się mylę proszę mnie poprawić.
edytowany 1x, ostatnio: brokenelevator

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.