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.
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.
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:
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.
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.
Tags und Links winapi