Fenstersize von .NET zu Win-API



  • Ich habe ein bestehendes C++.NET-Programm, das ich gerne in ein API-C-Programm umschreiben würde, um die Laufzeit zu verbessern und meine Kenntnisse zu verbessern. Aber irgendwie scheint mein Compiler unterschiedliche Maße für die Fenster zu verwenden: das Dialogfeld in .NET ist sehr viel schmaller als das Dialogfeld der API (bei gleichem Fenstersize von 290 x 143).

    Der Compiler scheint für die Ressourcenerstellungen je nach Framework andere Maße zu verwenden, was mir relativ egal sein könnte, würde ich jetzt nicht in der Sch**** sitzen, weil ich die Maße nicht kenne. Wie dem auch sei: Kennt hier jemand einen Weg, den Fenstersize von .NET in Win-API zu ändern bei gleicher Größe (das beide Fenster gleich groß sind, die Pixelanzahl rechts unten aber unterschiedlich ist)?


  • Mod

    Das liegt an dem entsprechenden Dialog Font, den Du ausgewählt hast. Basierend auf diesem Font wird die Fenstergröße errechnet.

    Warum benötigst Du überhaupt die Größe?



  • Martin Richter schrieb:

    Das liegt an dem entsprechenden Dialog Font, den Du ausgewählt hast. Basierend auf diesem Font wird die Fenstergröße errechnet.

    Ich verwende den gleichen Font, daran wird's also kaum liegen. Die Grundeinstellungen sind bereits wie in der .NET-Anwendung konfiguriert, nur die Größe und die Steuerelemente fehlen noch.

    Martin Richter schrieb:

    Warum benötigst Du überhaupt die Größe?

    Weil ich ein kleiner Perfektionist und elender Kontrollfreak bin, der an Zwangsneurosen leidet und daher die Anwendung so weit wie möglich 1:1 portieren will. Und weil ich zeichnerisch eine Niete bin (ist eigentlich noch untertrieben, ich bin eine (void*)0 ;)), versuche ich, die Maße mathematisch abzulesen, a'la Try-'n'-Error.


  • Mod

    Es wird in Wn32 APIs mit DLUs gerechnet. Im .NET Framework nicht.
    10% identisch wirst Du es nicht hinbekommen befürchte ich.

    Du hast mit Sichereit auch ein Manifest für COMCTRL 6.0

    Der aus dem Westen ... schrieb:

    Martin Richter schrieb:

    Warum benötigst Du überhaupt die Größe?

    Weil ich ein kleiner Perfektionist und elender Kontrollfreak bin, der an Zwangsneurosen leidet und daher die Anwendung so weit wie möglich 1:1 portieren will. Und weil ich zeichnerisch eine Niete bin (ist eigentlich noch untertrieben, ich bin eine (void*)0 ;)), versuche ich, die Maße mathematisch abzulesen, a'la Try-'n'-Error.

    Verstehe Deine Begründung in keiner Weise...



  • Martin Richter schrieb:

    Es wird in Wn32 APIs mit DLUs gerechnet. Im .NET Framework nicht.

    Das heißt?

    Martin Richter schrieb:

    Du hast mit Sichereit auch ein Manifest für COMCTRL 6.0

    Positiv ...

    Martin Richter schrieb:

    Verstehe Deine Begründung in keiner Weise...

    Geht es um die Begründung, oder um das Problem?


  • Mod

    Im WinForm Designer wird in anderen Einheiten gerechnet als im Resourceeditor...

    Ich verstehe Dein Problem nicht?
    Die Unterschiede zwischen einer Windows Forms Anwendung und einer WinAPI Anwendung sind so gravierend, dass es sich mir nicht erklärt warum diese 10% gleich aussehen müssen!

    Und mir geht es darum keine Fragen zu beantworten, die "wenig/keinen" Sinn machen.



  • Martin Richter schrieb:

    Im WinForm Designer wird in anderen Einheiten gerechnet als im Resourceeditor...

    Das habe ich schon verstanden, aber wie rechnet man mit denen? Ich meine, um Celsius in Fahrenheit umzurechnen gibt es doch auch eine Formel: Celsius*9/5+32==Fahrenheit. Gibt es dafür keine? (Microsoft Sans Serif, Standart, 8, ohne Effekte, Westlich)

    Martin Richter schrieb:

    Ich verstehe Dein Problem nicht?
    Die Unterschiede zwischen einer Windows Forms Anwendung und einer WinAPI Anwendung sind so gravierend, dass es sich mir nicht erklärt warum diese 10% gleich aussehen müssen!

    Erstens: Meinst du nicht zu 100%?
    Zweitens: Intern vielleicht, aber davon weiß der Anwender ja nichts ...
    Drittens: Kann ich die DLU-Anzeige nicht einfach deaktivieren und harte Pixels verlangen?

    Martin Richter schrieb:

    Und mir geht es darum keine Fragen zu beantworten, die "wenig/keinen" Sinn machen.

    Das kannst du nur von deinem Standpunkt aus betrachten, aber ich weiß, wofür ich diese Infos brauche, sonst würde ich nicht hier um Hilfe fragen. Vielleicht solltest du mir einfach vertrauen und annehmen, dass ich alles im Griff habe. 😃



  • Ja kann man.
    Dazu gibt es auf Codeproject einen Artikel um die DPI fix einzustellen bzw. Fenstergrößen festzulegen (gerade für Vista).
    Der Code geht jedes Element nach dem Starten durch und fixiert es bevor es dann dargestellt wird.

    Zu den Fragen der anderen warum und weshalb man sowas braucht:
    - warum nicht und deshalb!

    Überlasst es dem Programmierer wie etwas aussehen soll!
    Ich habe bisher nur Beschwerden bekommen, weil sich alles verändert oder weil der Benutzer mit den selbst eingestellten Font/Größen nicht zurecht kommt.
    Nach dem Fix gabs auch keine Klagen mehr, so einfach ist das.

    Grüße
    SirNoName



  • thenoname schrieb:

    Ja kann man.
    Dazu gibt es auf Codeproject einen Artikel um die DPI fix einzustellen bzw. Fenstergrößen festzulegen (gerade für Vista).
    Der Code geht jedes Element nach dem Starten durch und fixiert es bevor es dann dargestellt wird.

    Zu den Fragen der anderen warum und weshalb man sowas braucht:
    - warum nicht und deshalb!

    Überlasst es dem Programmierer wie etwas aussehen soll!
    Ich habe bisher nur Beschwerden bekommen, weil sich alles verändert oder weil der Benutzer mit den selbst eingestellten Font/Größen nicht zurecht kommt.
    Nach dem Fix gabs auch keine Klagen mehr, so einfach ist das.

    Grüße
    SirNoName

    Ich will dir garantiert nicht zu nahe treten, aber ich verstehe kein Wort. Worauf bezieht sich der erste Absatz? Wen sprichst du mit Absatz Nummer 2 und 3 an?


  • Mod

    MapDialogRect
    http://msdn.microsoft.com/en-us/library/ms645502(v=VS.85).aspx

    siehe MSDN:

    Each horizontal base unit is equal to 4 horizontal dialog template units; each vertical base unit is equal to 8 vertical dialog template units. Therefore, to convert dialog template units to pixels, use the following formulas:

    Copy
    pixelX = MulDiv(templateunitX, baseunitX, 4);
    pixelY = MulDiv(templateunitY, baseunitY, 8);
    Similarly, to convert from pixels to dialog template units, use the following formulas:

    Copy
    templateunitX = MulDiv(pixelX, 4, baseunitX);
    templateunitY = MulDiv(pixelY, 8, baseunitY);

    Ansonsten zum besseren Verständnis:
    http://support.microsoft.com/kb/125681/en-us



  • Danke, das hat mir sehr geholfen.


Anmelden zum Antworten