CButton m_hWnd

kerian

Erfahrenes Mitglied
Hallo zusammen,
habe mega Problem. Arbeite mit Visaual C++ 6.0
In einem Dialog habe ich mir mehrere Buttons erstellt.
Code:
 for(int i = 0; i<10;i++){
	  pBtn = new CGR2Button();
          m_arrayBtns.Add(pBtn);    // CTypedPtrArray storing all buttons dynamically created
	  GetButtonRect(i, rBtn);   // will populate rBtn given button number  
	  pBtn->Create(NULL, WS_VISIBLE|BS_OWNERDRAW, rBtn, this, 9001+i);  //   |BS_BITMAP|WS_CHILD|give a unique ID (not strictly necessary)
    }

Die Buttons werden schön erstellt und funktionieren.
Wenn jatzt das Dialogfenster eine bestimmte message bekomm soll aus dieser heraus eine Message an ein Button senden werden oder halt an alle.
Code:
        for ( int i = 0 ; i<m_nsize; i++) 
		{ 
                pBtncount = (CGR2Button*)m_arrayBtns.GetAt(i);
 	        //::SendMessage(pBtncount->m_hhWnd, WM_NEW, NULL, 1);
	        ::PostMessage(pBtncount->m_hhWnd, WM_NEW, NULL, 1);
		// PostMessage( WM_NEW, NULL, 1);
	        // pBtncount->PostMessage(WM_NEW, NULL, 1);   
}

Jetzt zu Problem. Wie mann sieht habe ich schon einiges ausprobiert!
Wenn ich die Methode nehme
Code:
::PostMessage(pBtncount->m_hhWnd, WM_NEW, NULL, 1);
Funktioniert unter Win 2000 aber unter Win 98 nicht :confused:
Ich habe mir das angeschaut und ich glaube ich habe kein Handel mehr auf die Buttons :confused:
 
Zuletzt bearbeitet:
Wenn der CGR2Button von CWnd abgeleitet ist (nehme ich mal ganz ganz stark an), dann hat der schon eine Methode SendMessage (bzw. PostMessage) eingebaut.

Das sollte aber genauso klappen wie deine Aufrufe.

Wie ist denn WM_NEW definiert? Kollidiert die evtl. mit irgendeiner Standardmessage?
 
jo, müsste dann von CWnd sein.
Code:
class CGR2Button : public CButton

Hatte zuerst
Code:
 #define WM_NEW (WM_USER + 1)
habe jetzt auf
Code:
#define WM_NEW (WM_USER + 10)
geändert und sehe da es geht :-)
danke danke ...

Vieleicht kannst du mir noch ein Tipp geben.
Es läuft und nach einer Zeit bekomme ich die Meldung;

Eine Ressource ist nicht

Die Meldung bekomme ich ganz oft, und die Buttons verschwinden eins nach dem anderen. Versuch dann den Dialog mit den Buttons (keine sind mehr da) zu schließen und starte es neu.
Dann läuft es wieder einen Augenblick und dann geht das Spiel vom neuen
 
Da wird irgendeine Resource nicht sauber freigegeben.
Prüfe mal alles möglich an HDCs (bzw. CDCs) oder ähnliches. Objekte aus HDCs wieder rauselektieren und mit der richtigen Funktion zerstören:

CreateDC -> DeleteDC
GetDC -> ReleaseDC
LoadIcon -> DestroyIcon
usw...
 
Zurück