Dialog nach Microsoft Guidelines (DLU)



  • Hallo!

    Ich möchte Dialog-Resourcen im VS-Editor nach den MS Guidlines erstellen. Das ist soweit - wenn auch teilweise recht umständlich - zwar möglich, jedoch wird immer eine MS Shell Dlg 8pt Schriftart als Standard - leider auch unter Vista/Server 2008 - genutzt.

    Nun kann ich das zwar in den Dialogeigenschaften ändern, jedoch ist auf einem XP-System Segoe UI nicht die Systemschriftart, einige haben kein ClearType aktiviert oder nutzen sogar ganz individuelle Einstellungen.

    Deswegen leite ich Dialogklassen von einer eigenen Basisklasse ab, die die Systemschriftart verwendet und auf User-Wunsch ClearType ein-/ausschaltet.

    Problem sind jetzt nur die Größen der Controls. Da Vista Segoe UI 9pt - schonmal breiter als MS Shell Dlg (2) 8pt - und ClearType die Schrift nochmals verbreitert, kann es natürlich passieren, dass die Controls nicht den ganzen Text mehr fassen können.

    Wenn ich in den Dialogeigenschaften die Schriftart/-größe ändere, passt der Dialog sich eigenständig an. Gibt es hierfür auch eine "dynamische Anpassung" des Dialogs mit samt den Controls zur Laufzeit, die das erledigt?


  • Mod

    Nein!
    Du müsstest einfach die Schriftart im Template vor dem Laden anpassen.

    Warum machst Du diesen Aufstand?
    Ein User ist selbst verantwortlich, was er sich als Fonts einstellt...



  • Martin Richter schrieb:

    Nein!
    Du müsstest einfach die Schriftart im Template vor dem Laden anpassen.

    Geht das dann nur über die CreateDialogIndirect Funktion oder auch anders?

    Martin Richter schrieb:

    Warum machst Du diesen Aufstand?
    Ein User ist selbst verantwortlich, was er sich als Fonts einstellt...

    Hmm, vielleicht verstehe ich dich falsch. Ich möchte in den Dialogen die Theme-Schriftart verwenden. Also "ersetze" die MS Shell Dlg Schriftart. Nun kann der Benutzer ja auch eine komische Theme-Schriftart mit 14pt gewählt haben. Dann würden die Dialoge kaum noch benutzbar sein.

    Zudem soll der Dialog nicht größer als erforderlich sein z.B. unter XP.


  • Mod

    1. Nein es geht nur über CreateDialogIndirect
    2. Ich verstehe Deinen Aufstand immer weniger.
    Ein DLU ist ein durchschnittlicher Wert der sich anhand der Größe des Dialogfont richtet. Ist der Dialogfont größer wird auch ein DLU in mehr Pixels umgerechnet. Wenn er also eine 14pt Schriftwart wählt wird der Dialog vermutlich 80% größer erzeugt werden.

    Das ist doch der Vorteil an DLUs!



  • Martin Richter schrieb:

    1. Nein es geht nur über CreateDialogIndirect

    CDialog lädt das Resource-Template ja auch in den Speicher, und erstellt es dann per "CreateIndirect...". Ist es möglich hier einzulenken und die Resource im Speicher zu bearbeiten bzw. die gesetzte Schriftart zu ersetzen?

    Martin Richter schrieb:

    2. Ich verstehe Deinen Aufstand immer weniger.
    Ein DLU ist ein durchschnittlicher Wert der sich anhand der Größe des Dialogfont richtet. Ist der Dialogfont größer wird auch ein DLU in mehr Pixels umgerechnet. Wenn er also eine 14pt Schriftwart wählt wird der Dialog vermutlich 80% größer erzeugt werden.
    Das ist doch der Vorteil an DLUs!

    Was DLUs sind und das sie das Leben leichter machen weiß ich. Jedoch hilft mir das bei meinem Problem nicht weiter. Wie gesagt, ich erstelle die Dialog-Resource im VS-Editor. Als Schriftart ist per default MS Shell Dlg gewählt.

    Nun ersetze ich aber in meiner (abgeleiteten) Dialogklasse die Schriftart gegen die System-Theme-Font. Hier ist das Problem.

    Wenn ich im VS-Editor die Schriftart ändere, wird der Dialog (und die DLUs) automatisch angepasst (ggf. vergrößert/verkleinert). Wenn ich die Schriftart dynmisch setze aber nicht.

    Ist es hier nun möglich die Schriftart dynamisch zu setzen und von der automatischen "Laufzeitberechnung" zu profitieren?

    P.S.: Ich mach doch keinen Aufstand. 😉


  • Mod

    HaJo. schrieb:

    CDialog lädt das Resource-Template ja auch in den Speicher, und erstellt es dann per "CreateIndirect...". Ist es möglich hier einzulenken und die Resource im Speicher zu bearbeiten bzw. die gesetzte Schriftart zu ersetzen?

    Du kannst Du Ressource nach belieben manipulieren.
    Du kannst dies aber nicht "automatisch" machen. Wenn Du Dir den Code der MFC mit den PropertySheets und Wizards ansiehst, kannst Du eine Helferklasse finden, die es erlaubt den Font zu manipulieren.

    Hajo. schrieb:

    Wenn ich im VS-Editor die Schriftart ändere, wird der Dialog (und die DLUs) automatisch angepasst (ggf. vergrößert/verkleinert). Wenn ich die Schriftart dynmisch setze aber nicht.

    Ist es hier nun möglich die Schriftart dynamisch zu setzen und von der automatischen "Laufzeitberechnung" zu profitieren?

    P.S.: Ich mach doch keinen Aufstand. 😉

    Dynamisch geht hier "automatisch" nichts. Das Skalieren erfolgt beim auslesen des DialogTemplates. Oder anders gesagt in OnCreate/OnInitDialog ist es zu spät 😉

    Manipuliere die Ressource. Oder arbeite komplett dynamisch in dem Du DLUs verwendest.
    Ich habe einen entsprechenden Formular Editor geschrieben, der entsprechend mit DLUs rechnet... Ist auch kein Hexenwerk.



  • Martin Richter schrieb:

    Dynamisch geht hier "automatisch" nichts. Das Skalieren erfolgt beim auslesen des DialogTemplates. Oder anders gesagt in OnCreate/OnInitDialog ist es zu spät 😉

    Manipuliere die Ressource. Oder arbeite komplett dynamisch in dem Du DLUs verwendest.

    Natürlich arbeite ich mit DLUs bzw. macht der Dialog Editor von VS ja per default. Nun wie du schon geschrieben hast, werden die Größen beim Auslesen des Templates berechnet. Also ist ein späteres SetFont o.ä. völlig belanglos, wenn z.B. MS Shell Dlg 2 die Schriftart der Resource ist, später aber Segoe UI (9pt) mit ClearType verwendet werden soll.

    Das Problem ließ sich aber für CDialog-Klassen gut lösen und ist sogar vom Aufwand durchaus gerechtfertigt. Ich musste lediglich zwei Methoden überschreiben.

    Bei PropertySheet/-Pages lohnt sich der Aufwand hier jetzt nicht. Da die benötigten Methoden nicht virtuell sind. Somit müssten die Klassen "neu" gemacht werden.

    Martin Richter schrieb:

    Ich habe einen entsprechenden Formular Editor geschrieben, der entsprechend mit DLUs rechnet... Ist auch kein Hexenwerk.

    Für einen Kunden oder als Ersatz für den VS-eigenen?


  • Mod

    HaJo. schrieb:

    Martin Richter schrieb:

    Ich habe einen entsprechenden Formular Editor geschrieben, der entsprechend mit DLUs rechnet... Ist auch kein Hexenwerk.

    Für einen Kunden oder als Ersatz für den VS-eigenen?

    Für den Kunden. Stell Dir ein Mini-Access vor, mit dem man seine Datenbankformulare "beliebig" designen kann...
    Er ist in zwei Varianten Bestandteil unserer Software.


Anmelden zum Antworten