Uebergrosse Fenster
-
Hi,
kann ich unter Windows irgendwie Fenster grösser machen als die Bildschirmauflösung. Wenn ich nämlich in der (wizzardgenerierten) Datei MainFrame.cpp meines Projektes die Breite grösser setzte als die Bildschirmauflösung, dann wird der rechte überragende Teil des Fensters einfach abgeschnitten, was beim Verschieben desselben sichtbar wird. Kann ich dieses Problem irgendwie umgehen?
Grz daboss
-
Hi,
Wie meinst du das?
Die Größe eines Fensters kannst du mit der Nachricht WM_GETMINMAXINFO (oder so ähnlich) beschränken.
Wenn ein Fenster größer als die "Auflösung" ist, ist ein Teil natürlich nicht sichtbar. Dieser Teil wird dann neu gezeichnet, wenn er in den sichtbaren Bereich verschoben wird.
Was willst du umgehen?Grüße Rapha
-
Hallo!
Nun, die Sache ist die Folgende: Ich programmiere eine Simulation für mehrere Heizungsregler. Das sind optisch gesehen Kistchen von unterschiedlichen Grössen mit Knöpfen, Drehknöfpen, einem Display etc.
In meiner Simulation habe ich Bilder von den Reglern, die ich ins Fenster zeichne und dann das Fenster mit SetLayeredWindow() auf die Form des Reglers zuschneide. Leider ist das Bild des neusten Reglers breiter als 1600 Pixel und das Ding sollte auch auf 1024 Pixeln Fensterbreite laufen. Dass nicht alles auf einmal sichtbar ist macht nichts. Man kann ja das Fenster verschieben um den gewünschten Teil darzustellen. Was aber das Problem ist, ist dass wie schon im letzten Posting erwähnt die Pixel über 1600 Pixel (meine Bildschirmauflösung) einfach vom Fensterrand abgeschnitten werden, statt im nicht sichtbaren Bereich zu sein und beim Verschieben wieder sichtbar zu werden.
Grz daboss
-
Ähm, pack mal deine Zeichnungen in OnPaint.

-
@webfirtzi
Wie meinst du das mit OnPaint()? Ich benutzte OnDraw(). Was ist denn der Unterschied zw. den zwei Funktionen? Glaubst du wirklich, dass dadurch mein Fenster Grössen von mehr als der Bildschirmauflösung annehmen kann?Grz daboss
-
daboss schrieb:
@webfirtzi
Wie meinst du das mit OnPaint()? Ich benutzte OnDraw(). Was ist denn der Unterschied zw. den zwei Funktionen? Glaubst du wirklich, dass dadurch mein Fenster Grössen von mehr als der Bildschirmauflösung annehmen kann?Grz daboss
Definitiv, da WM_PAINT beim ändern des Ansichstfensters oder des Fensterauschnitts
gesendet wird.
-
@daboss: Mach dir mal ne Testanwendung und male irgendwas auf das Fenster. Jetzt ziehe das Fenster aus dem Bild heraus. Du wirst sehen, dass alles weg ist, was du gemalt hast (jedenfalls alles, was "außerhalb" des Bildschirmes war). Es wird halt nicht neu gezeichnet. Wenn das Fenster geupdatet werden soll (also neu gezeichnet in bestimmten Bereichen), dann wird WM_PAINT aufgerufen. Hast du deine Zeichenoperationen nun in WM_PAINT, dann geht dir nichts verloren.
-
Hallo!
Erstmals danke für eure Beiträge!
Ich befürchte aber trotzdem, dass wir uns nicht ganz verstehen. Schaut euch doch bitte mal das folgende Bild an: http://www.kraftsaft.com/temp/erklaerung.jpgIch habe keine Probleme mit dem Neuzeichnen des Bildes falls ein Bereich desselben verdeckt wird. Es ist auch so (wie ich in meinem VC++ Buch nachgelesen habe), dass OnDraw() sowieso von OnPaint() aufgerufen wird, falls man OnPaint() nicht überschreibt und eben diese Codezeile weglässt. Das Problem ist, wie man dem Link entnehmen kann, dass der Abschnitt des Bildes der keinen Platz auf meinem Bildschirm hat (was nicht weiter tragisch ist...) auch beim Verschieben, den mit dem Pfeil markierten Fensterrand nicht los wird. Das Fenster wird eben auf die Bildschirmauflösung gestaucht, also auf 1600 Pixel Breite und behält nicht seine 1800 Pixel Breite. Was ich mir aber wünschen würde ist, dass der Teil des Fensters über den Bilschirmrand hinausreicht und beim Verschieben des Reglers nach links wieder zum vorschein kommt.
Grz daboss
-
Hi,
Dass das Fenster über den Rand hinausgeht, kannst du mit SetWindowPos erzwingen, das ist aber extrem userunfreundlich.
Wieso verwendest du keine Scrollbalken?
Grüße Rapha
-
Yupee!!!

Das Zauberwort heisst SetWindowPos!!! Besten Dank!!!Wieso verwendest du keine Scrollbalken?
Ich benutze keine Scrollbalken, weil das genau der Gag von meinem Programm ist
. Das Fenster soll nämlich nicht als solches erkennbar sein, sondern nur den darin gezeichneten Heizungsregler darstellen. Da aber nur ein kleiner Teil des Reglers auch wirklich die Funktionalität eines GUIs hat, kann man den grössten Teil aus dem sichtbaren Bereich des Fensters schieben um zu arbeiten. Nur wenn man das Aussehen des Reglers begutachten will, dann schiebt man das Ganze ein wenig in der Gegend rum, um alle Details betrachten zu können.Nochmals besten Dank!
Grz daboss