Ich habe mir richtig was vorgenommen und stehe schon gleich am Anfang auf dem Schlauch, vielleicht kann mir jemand hier etwas Starthilfe geben?
Ich habe 3 Child Fenster, die im Hauptfenster alle übereinander liegen, sprich es ist immer nur eins davon sichtbar
2 davon enthalten je eine listbox, die ich gern subclassen möchte, damit ich an events wie WM_ERASEBKGND ran komme
Erstes Problem:
Wenn eine der beiden listboxen sichtbar wird, muss ich im parent eine ClipRgn setzen, wird das dritte Child sichtbar (oder alle 3 unsichtbar) muss ich die ClipRgn wieder entfernen
Das ist mal völliges Neuland für mich und die Erklärung bei MSDN dazu ist mir zu hoch
Ich weiss nicht mal in welchem Event von welchem Fenster ich das eintragen sollte, geschweige denn die Syntax
Zweites Problem:
Listboxen, edit controls usw haben eine Menge mehr events als "normale" Fenster
Im Web finde ich ein Dutzend Seiten die einige dieser extra Events für Visual C++ oder .NET erklären, aber nicht eine für API plain
Bei MSDN finde ich Listen von Messages die man an ein control senden kann, aber keine "Übersetzung", wie das Event in der Subclass dann heisst oder wie man es behandeln kann und was man jeweils zurück geben muss
Ein paar Sachen findet man mit Trial & Error schon raus, z.B. dass OnEraseBkgnd bei mir case WM_ERASEBKGND heissen muss ist klar, auch dass man statt return FALSE bei mir return 1 schreiben muss habe ich noch rausgefunden, aber nur weil es dieses Event auch im "normalen" Fenster gibt
Wo finde ich den eine Liste der Events, die es im "normalen" Fenster nicht gibt? Am besten eine die ein Anfänger auch versteht
Drittes Problem:
Wenn ich in der Subclass WM_PAINT abfange und versuche via OffScreenDC ein double buffering einzubauen (weil listboxen ohne double buffer oft heftig flackern), bekomme ich Chaos
Mal zeigt er gar nichts an, mal flackert es noch schlimmer als vorher, mal zeichnet er nicht neu wenn LBN_SELCHANGE passiert, usw.
Im Web habe ich folgendes gefunden:
aber die "Übersetzung" nach API plain bringe ich nicht auf die Reihe
Jeder der mal einen Windows Editor mit viel Text in der Grösse geändert hat weiss, dass nicht mal M$ die controls flackerfrei hin bekommt, kann mir trotzdem jemand helfen?
Ich habe 3 Child Fenster, die im Hauptfenster alle übereinander liegen, sprich es ist immer nur eins davon sichtbar
2 davon enthalten je eine listbox, die ich gern subclassen möchte, damit ich an events wie WM_ERASEBKGND ran komme
Erstes Problem:
Wenn eine der beiden listboxen sichtbar wird, muss ich im parent eine ClipRgn setzen, wird das dritte Child sichtbar (oder alle 3 unsichtbar) muss ich die ClipRgn wieder entfernen
Das ist mal völliges Neuland für mich und die Erklärung bei MSDN dazu ist mir zu hoch
Ich weiss nicht mal in welchem Event von welchem Fenster ich das eintragen sollte, geschweige denn die Syntax
Zweites Problem:
Listboxen, edit controls usw haben eine Menge mehr events als "normale" Fenster
Im Web finde ich ein Dutzend Seiten die einige dieser extra Events für Visual C++ oder .NET erklären, aber nicht eine für API plain
Bei MSDN finde ich Listen von Messages die man an ein control senden kann, aber keine "Übersetzung", wie das Event in der Subclass dann heisst oder wie man es behandeln kann und was man jeweils zurück geben muss
Ein paar Sachen findet man mit Trial & Error schon raus, z.B. dass OnEraseBkgnd bei mir case WM_ERASEBKGND heissen muss ist klar, auch dass man statt return FALSE bei mir return 1 schreiben muss habe ich noch rausgefunden, aber nur weil es dieses Event auch im "normalen" Fenster gibt
Wo finde ich den eine Liste der Events, die es im "normalen" Fenster nicht gibt? Am besten eine die ein Anfänger auch versteht
Drittes Problem:
Wenn ich in der Subclass WM_PAINT abfange und versuche via OffScreenDC ein double buffering einzubauen (weil listboxen ohne double buffer oft heftig flackern), bekomme ich Chaos
Mal zeigt er gar nichts an, mal flackert es noch schlimmer als vorher, mal zeichnet er nicht neu wenn LBN_SELCHANGE passiert, usw.
Im Web habe ich folgendes gefunden:
Code:
void CRecordList::OnPaint()
{
CPaintDC dc(this);
CMemDC memDC(&dc);
CRect clip;
memDC.GetClipBox(&clip);
memDC.FillSolidRect(clip, GetSysColor(COLOR_WINDOW));
DefWindowProc(WM_PAINT, (WPARAM)memDC->m_hDC, (LPARAM)0);
}
aber die "Übersetzung" nach API plain bringe ich nicht auf die Reihe
Jeder der mal einen Windows Editor mit viel Text in der Grösse geändert hat weiss, dass nicht mal M$ die controls flackerfrei hin bekommt, kann mir trotzdem jemand helfen?