Standardgröße der Schaltfläche?

8

Wie erstelle ich ein Button-Steuerelement (mit CreateWindow einer BUTTON window-Klasse), das eine systemweite Standardgröße (insbesondere Höhe) hat, die mit den anderen Windows-Anwendungen übereinstimmt? Ich sollte natürlich DPI berücksichtigen und wahrscheinlich andere Einstellungen.

  

Anmerkung: Die Verwendung von USE_CW_DEFAULT für Breite und Höhe führt zu einer 0, 0-Größe, also ist das keine Lösung.

    
macbirdie 12.09.2008, 10:25
quelle

3 Antworten

7

In der perfekten, stressfreien Welt ...

Um eine Standardgröße zu erstellen, müssten wir folgendes tun:

%Vor%

Dabei sind 50 und 14 die entsprechenden DLU-Dimensionen. 4 und 8 sind horizontale und vertikale Dialogvorlageneinheiten jeweils basierend auf den GetDialogBaseUnits() -Funktion Dokumentationsbemerkungen.

Nichts ist perfekt

ABER Wie Anders betont hat, basieren diese Metriken auf der Systemschriftart. Wenn Ihr Fenster eine Shell-Dialog-Schriftart verwendet oder einfach alles, was Ihre Augen nicht bluten lässt, sind Sie ziemlich allein.

Um eigene "Dialog" -Basiseinheiten zu erhalten, müssen Sie aktuelle Textmetriken mit GetTextMetrics() abrufen und Zeichenhöhe und durchschnittliche Breite ( tmHeight bzw. tmAveCharWidth der TEXTMETRIC struct) verwenden und diese übersetzen mit MulDiv selbst, es sei denn Sie sind in einem Dialog, dann wird MapDialogRect() die ganze Arbeit für Sie erledigen.

Beachten Sie, dass tmAveCharWidth nur der tatsächlichen durchschnittlichen Zeichenbreite entspricht, daher wird empfohlen, eine GetTextExtentPoint32() -Funktion zu verwenden. funktioniert stattdessen mit einem alphabetischen Zeichensatz.

Siehe:

Einfachere Alternative

Wenn Schaltflächen das einzige Steuerelement sind, für das Sie die Größe automatisch ändern möchten, können Sie auch verwenden BCM_GETIDEALSIZE Meldung Button_GetIdealSize() Makro (Windows XP und nur nach oben), um die optimale Breite und Höhe zu erhalten, die zu allem passt, was die Schaltfläche enthält, obwohl sie ziemlich hässlich aussieht, ohne dass um den Text der Schaltfläche herum Ränder angewendet werden.

    
macbirdie 12.09.2008, 11:03
quelle
8

Dies ist, was MSDN zu sagen hat: Entwurfsspezifikationen und Richtlinien - Visuelle Gestaltung: Layout .

Die Standardgröße einer Schaltfläche ist 50x14 DLUs, die anhand der Beispiele für GetDialogBaseUnits .

Die Funktion MapDialogRect scheint die Berechnung für Sie durchzuführen.

    
Timbo 12.09.2008 10:36
quelle
1

@macbirdie: Sie sollten nicht GetDialogBaseUnits () verwenden, es basiert auf der Standardsystemschriftart (Ugly Bitmap-Schriftart). Sie sollten MapDialogRect ()

verwenden     
Anders 12.09.2008 15:55
quelle

Tags und Links