Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#16

AW: VCL Ersatz für GetSystemMetrics(SM_CYSIZE) bitte

  Alt 7. Apr 2018, 16:15
Zitat:
Wer nun partout direkt mit der WinApi hantieren muss, steht bei High-DPI mit GetSystemMetrics schnell auf verlorenem Posten.
Ist das eine Annahme(Wissen) oder nur eine Vermutung.. Ich denke das letztere.

Wenn man seine Anwendung DPI fähig machen will kommt man nun mal nicht Drumherum dann auch jedes erstellte Fenster bzw. Control dementsprechend zu behandeln was die Weite und Höhe angeht.
Wie du schon sagst die VCL macht es automatisch wenn (dementsprechend angepasst).

Aber mir ist es egal ob ich DPI mit übergebe oder nur Clientweite, Clienthöhe.
Letztendlich sind das bei jedem wert nur 3 Buchstaben die ich vorhängen muss.

Und nein man steht mit GetSystemMetrics nicht auf verlorenen Posten warum auch?
Erkläre das bitte näher.

bsp: Aus meinem Player.. C++64
Man beachte das vorgehängte dpi zum Beispiel beim erstellen des Rect.
Code:
            DWORD dwStyle = WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX;
            RECT rc;
            SetRect(&rc, 0, 0, dpi(CLIENT_WIDTH), dpi(CLIENT_HEIGHT));
            AdjustWindowRectEx(&rc, dwStyle, FALSE, 0);
            long w = Width(rc); long x = (GetSystemMetrics(SM_CXSCREEN) - w) / 2;
            long h = Height(rc); long y = (GetSystemMetrics(SM_CYSCREEN) - h) / 2;
            gP.hMainMenu = BuildMenu();
            gP.hMain = CreateWindowEx(WS_EX_ACCEPTFILES, STR_CLASS, STR_TITLE, dwStyle, x, y, w, h, nullptr, gP.hMainMenu, hInstance, nullptr);
            if (gP.hMain) {
                if (InitKVPlayer(hInstance)) {
                    GetClientRect(gP.hMain, &rc);
                    y = Height(rc) - 80;

                    // Create movie slider
                    dwStyle = WS_VISIBLE | WS_CHILD | TBS_NOTICKS | TBS_FIXEDLENGTH;
                    CreateWindowEx(0, L"msctls_trackbar32", NULL, dwStyle, 0, y - 17, dpi(Width(rc)), dpi(18), gP.hMain, (HMENU)ID_SLIDER, hInstance, NULL);
Nun wo soll also hier nun ein Problem sein ?
Bin auch schon wieder weg da es hier um VCL geht .. wollte nur deine Behauptung (verlorener posten) widerlegen.

gruss

Geändert von EWeiss ( 7. Apr 2018 um 22:11 Uhr)
  Mit Zitat antworten Zitat