Frage

Wie kann ich ein Button-Steuerelement erstellen (mit CreateWindow einer BUTTON Fensterklasse), die ein systemweites Standardgröße hat (insbesondere Höhe), das ist im Einklang mit dem Rest der Windows-Anwendungen? Ich soll DPI natürlich berücksichtigen und wahrscheinlich andere Einstellungen.

  

. Hinweis: Mit USE_CW_DEFAULT für Breite und Höhe ergibt eine 0, 0 Größe Taste, so dass keine Lösung ist

War es hilfreich?

Lösung 2

In der perfekten, stressfreien Welt ...

So erstellen Sie eine Standardgröße Schaltfläche würden wir dies tun müssen:

LONG units = GetDialogBaseUnits();
m_hButton = CreateWindow(TEXT("BUTTON"), TEXT("Close"), 
                 WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON, 
                 0, 0, MulDiv(LOWORD(units), 50, 4), MulDiv(HIWORD(units), 14, 8),
                 hwnd, NULL, hInst, NULL);

, wobei 50 und 14 sind jeweilige DLU Abmessungen 4 und 8 sind horizontale und vertikale Dialogvorlage Einheiten jeweils bezogen auf GetDialogBaseUnits() Funktion Dokumentation Bemerkungen.


Nichts ist perfekt

ABER als Anders wies darauf hin, werden diese Metriken basierend auf der Systemschriftart. Wenn Ihr Fenster ein Shell-Dialog Schriftart oder einfach nichts machen Ihre Augen bluten verwendet, bist du ziemlich viel auf eigene Faust.

Um Ihre eigenen „Dialog“ Basiseinheiten zu erhalten, müssen Sie mit GetTextMetrics() und Verwendung Zeichenhöhe und durchschnittlicher Breite (tmHeight und tmAveCharWidth der TEXTMETRIC Struktur beziehungsweise) und übersetzen sie mit MulDiv von ihrem eigenen, es sei denn, Sie in einem Dialog, so wird MapDialogRect() alle die Arbeit für Sie tun.

Beachten Sie, dass tmAveCharWidth nur die tatsächliche durchschnittliche Zeichenbreite annähert, so dass es eine GetTextExtentPoint32() Funktion auf einem alphabetischen Zeichen gesetzt statt.

Siehe auch:


Einfachere alternative

Wenn die Tasten die einzige Kontrolle sind Sie automatisch skalieren möchten, können Sie auch a href verwenden <= „http://msdn.microsoft.com/en-us/library/bb775961(VS.85).aspx“ rel = "noreferrer"> BCM_GETIDEALSIZE Nachricht Button_GetIdealSize() Makro (Windows XP und oben nur) eine optimale Breite und Höhe abzurufen, die alles passt die Schaltfläche enthält, obwohl es ziemlich hässlich aussieht, ohne dass Ränder um den Text der Schaltfläche angelegt wird.

Andere Tipps

Dies ist, was MSDN zu sagen hat: Design-Spezifikationen und Richtlinien - Visuelles Design: Layout .

Die Standardgröße eines Knopfes ist 50x14 DLUs, die Pixel mit den gezeigten Beispielen für berechnet werden kann: GetDialogBaseUnits .

Die MapDialogRect Funktion scheint das zu tun Berechnung für Sie.

@macbirdie: Sie sollten nicht verwenden GetDialogBaseUnits () wird auf dem Standardsystemschrift basiert (Hässliche Bitmap-Schrift). Sie sollten MapDialogRect verwenden ()

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top