Brauche Hilfe! Simples GDI
-
So, ich hoffe, das geht noch mit der Länge. Also, wer den Fehler findet, bekommt ein Fleisskärtchen
Nee, Spass beiseite, ich verzweifele...
-
Auf Anhieb seh ich schonmal diesen Fehler:
HBRUSH Cursorfarbe=CreateSolidBrush(RGB(255,255,255));
Bei jedem Durchlauf (und die Funktion wird sehr oft durchlaufen) der WndProc erstellst du einen neuen Brush und nirgendwo wird er freigegeben. Das gleiche gilt auch für die anderen CreateSolidBrush Aufrufe. Das muss alles mit DeleteObject wieder freigegeben werden.
-
Gut, das merke ich mir schonmal... danke!
Aber das war's noch nicht... Kann es vielleicht sein, dass es Probleme mit hwnd gibt?
Das Programm malt seine Rechtecke nach einiger Zeit auf meinen Desktop.
-
Moment, scheinbar ist es nur in anderen Programmfenstern zu sehen.
-
Also es liegt IMHO nur an nicht freigegebene GDI-Resourcen. Bei mir läuft das Programm eigentlich spitze (Windows XP) bis 10000 GDI-Objekte erstellt wurden. Also guck nochmal genau ob du alles freigibst. Du hast 4 CreateSolidBrush Aufrufe. Hast du wirklich alle Brushes mit DeleteObject wieder freigegeben?
-
Ohje, da hatte ich noch einen Brush übersehen. Ich glaube es funzt jetzt. So einfach kann es sein...
Der Tip mit DeleteObject bringt mich weiter. Danke Dir!!!
-
Ein GetDC-Aufruf hat in WM_PAINT eigentlich wenig verloren. Übergib deiner Funktion lieber das DC-Handle und nutz dieses, anstatt dir ein Neues über das Fenster-Handle zu besorgen.
[ Dieser Beitrag wurde am 12.01.2003 um 18:56 Uhr von D@niel $chumann editiert. ]
-
Danke, D@niel, für deinen Tipp. Habs geändert. Ist ja auch Quatsch, sich in jeder Funktion ein neues Handle zu besorgen, wenn das Handle schon bekannt ist.
Könnte mir vielleicht noch jemand erklären, wie ich die aktuelle Bildschirmauflösung ermittele/verändere und ein Fullscreen-Window programmiere?
Vielen Dank!
[ Dieser Beitrag wurde am 13.01.2003 um 03:29 Uhr von Bello editiert. ]
-
FullScreen: Benutze die Suchfunktion, und du wirst fündig werden.
Auflösung:LONG ChangeDisplaySettings(DWORD x, DWORD y, DWORD bpp) { DEVMODE dm; ZeroMemory(&dm,sizeof(DEVMODE)); dm.dmSize = sizeof(DEVMODE); dm.dmFields = DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT; dm.dmBitsPerPel = bpp; // Farbtiefe dm.dmPelsWidth = x; // Breite dm.dmPelsHeight = y; // Hoehe return ::ChangeDisplaySettings(&dm, 0); }
-
GetSystemMetrics() mit den Params SM_CXSCREEN bzw SM_CYSCREEN liefert dir die Auflösung.
-
Tausend Dank! Super Forum, schnelle Infos, sogar in der Nacht zum Montag um halb 4
Ihr seid NERDS!!
Nur, dass leider die Suchfunktion von diesem Forum so unendlich langsam ist, finde ich schade,...
Bis später
-
definiere unendlich langsam *g* ich finds eigentlich recht flott
(recht flott: suche "fullscreen" in winapi; ergebnis nach grob 5 sekunden)
-
bei meiner suche kam ständig "weiterleitung nach: suche fortsetzen
wahrscheinich einfach zuviele treffer gefunden. nach der 5. weiterleitung hab ich dann abgebrochen. werds nochmal probieren
-
Dann hast du wohl auf "alle Foren durchsuchen" geklickt. Wähl da einfach WinAPI Forum aus, dann gehts auch mit einer Weiterleitung.