mein programm verbraucht alle cpu leistung
-
ChrisK schrieb:
Was auch sehr groß Ressourcen fressen kann (bis Windows sogar nicht mehr mit seiner GDI klarkommt) sind nichtfreigegebene Speicher! Sogenannte Specherleaks! Das heißt, Du hast vergessen, DeleteObject, DeleteFont, delete [] oder der gleichen zu benutzen! Schau mal nach, könnte sein!
Hat aber nichts mit der CPU-Auslastung zu tun.
-
Stimmt.
-
also dass es mem leaks sind glaub ich nich, hab immer alles schon free()'d
jo mein message loop:
/* Run the message loop. It will run until GetMessage() returns 0 */ while (GetMessage (&messages, NULL, 0, 0)) { /* Translate virtual-key messages into character messages */ TranslateMessage(&messages); /* Send message to WindowProcedure */ DispatchMessage(&messages); }
und meine wndproc:
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) /* handle the messages */ { case WM_DESTROY: PostQuitMessage (0); /* send a WM_QUIT to the message queue */ break; case WM_SIZE: { RECT rcClient; GetClientRect(hwnd, &rcClient); MoveWindow(ExTV.GetHandle(), 0, 0, 150, rcClient.bottom, TRUE); MoveWindow(MP3LV.GetHandle(), 153, 0, rcClient.right - 153, rcClient.bottom, TRUE); break; } case WM_PAINT: UpdateWindow(ExTV.GetHandle()); UpdateWindow(MP3LV.GetHandle()); break; case WM_NOTIFY: { NMHDR* nmhdr; nmhdr = (NMHDR*)lParam; if (nmhdr->code == TVN_SELCHANGED) { char szDir[MAX_PATH]; ExTV.TVSelChanged((NMTREEVIEW*)lParam); ExTV.GetSelectedDir(szDir); MP3LV.ChangeDir(szDir); UpdateWindow(ExTV.GetHandle()); UpdateWindow(MP3LV.GetHandle()); } break; } default: /* for messages that we don't deal with */ return DefWindowProc (hwnd, message, wParam, lParam); } return 0; }
edit:
wie ihr sicher seht, habe ich treeview und listview jeweils in eine klasse gekapselt, die dann alles weitere übernimmt
-
case WM_PAINT: UpdateWindow(ExTV.GetHandle()); UpdateWindow(MP3LV.GetHandle()); break;
*hust*
BeginPaint
*hust*
EndPaint
*hust*
-
Du musst mal schauen, ob Du mit WM_PAINT richtig umgehst.
Huch, ich sollte öfters auf "Refresh" klicken. :> Sorry CMatt.
-
lalala *indieluftguck*
ähm... ja... *aufdiekniefall*
scherz beiseite danke euch ich wusste zwar dass man das machen muss wenn man was painten will, aber das man das auch da machen muss, war mir unbekannt... hmm naja der mensch lernt halt dazu
mfg fallen
-
Wenn du WM_PAINT abfängst musst du Begin-/EndPaint aufrufen um das Fenster wieder als gültig zu markieren (sonst kommt die Message immer wieder) oder du bearbeitest die Message gar nicht (wenn du eh nichts zeichnen willst) und lässt die DefWindowProc diese Arbeit übernehmen
-
jo bloß wenn ich die in dem falle nicht abfange, werden die children nicht richtig gezeichnet (bzw erst wenn ich rein klicke)
-
fallen schrieb:
jo bloß wenn ich die in dem falle nicht abfange, werden die children nicht richtig gezeichnet (bzw erst wenn ich rein klicke)
Das ist aber nicht gut. Schau nochmal in die Klassen rein. Scheint so, als würde darin WM_PAINT oder WM_ERASEBKGND abgefangen.
-
ne des wüsst ich weil die hab ich selber verzapft