PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : VC++6: Form Editor und unmögliche Pixelangaben


WhiteVelvet
2006-04-23, 16:29:03
Seit Tagen kämpfe ich mit dem Dialog Editor von Visual Studio 6 (ich würde ja viel lieber Qt nehmen, aber der Prof will unbedingt den D.E.). Es ist ja kein Problem, seine GUI in diesem Editor zu gestalten, aber wenn es später ans Resizen zur Laufzeit geht, brauche ich verlässliche Pixelangaben, die mit den Default-Daten beim Programmstart übereinstimmen. Das Problem: In der rc-Datei des Projektes stimmen die Pixelangaben hinten und vorne nicht. Da ist das Formblatt nur 300 Pixel hoch, obwohl es 700 sind, aber ein Button hat eine Höhe von 14px obwohl es 20 sind. Wie kommt das zustande? Rechnet VC++ in seiner eigenen Welt oder ist das schlicht ein Bug? Was habt Ihr mit dem D.E. für Erfahrungen gemacht?

Neomi
2006-04-23, 17:35:06
Es wird in DLUs gerechnet, nicht in Pixeln. Eine DLU entspricht in etwa (bei Standardsettings) 1,5 Pixeln, was eine genaue Positionierung und sehr kompakte Benutzeroberflächen schonmal effektiv verhindert. Ob man das irgendwo umstellen kann, weiß ich nicht, da ich Version 6 schon lange nicht mehr benutze.

Du könntest aber bei der Initialisierung die Positionen auslesen und dann damit rechnen, statt feste Verschiebungen und Skalierungen einzuprogrammieren.

WhiteVelvet
2006-04-23, 17:43:01
Danke, gut zu wissen! Dann schau ich mal, wie ich das optimiert bekomme...

Coda
2006-04-23, 17:56:45
Soweit ich weiß kann man den Dialogeditor auf Pixel als Einheit umstellen.

WhiteVelvet
2006-04-24, 11:15:59
Soweit ich weiß kann man den Dialogeditor auf Pixel als Einheit umstellen.

Hab nix gefunden.

Brauche ich aber jetzt eh nicht. Ich verfolge nun eine andere Strategie: Bei jedem Fensterziehen frage ich nur noch delta_x und delta_y ab und addiere/subtrahiere diesen Wert von den Controls, je nachdem wie sie aussehen sollen. Dann ist die Basis wieder das Design aus dem Dialog-Editor und nicht die einprogrammierten Werte im Programm.

Mein Problem jetzt: Wie erhalte ich die Position z.B. eines Buttons im Gesamtfenster? Es gibt kein GetWindowPos ...

Neomi
2006-04-24, 12:30:02
Mein Problem jetzt: Wie erhalte ich die Position z.B. eines Buttons im Gesamtfenster? Es gibt kein GetWindowPos ...

Du kannst dir über GetWindowRect die Position (linke obere Ecke) und Ausmaße (unten rechts minus oben links) besorgen. Weil die Werte in Screenkoordinaten vorliegen, brauchst du noch ScreenToClient dazu.

WhiteVelvet
2006-04-24, 12:56:26
Prima, ScreenToClient war die Lösung :)