Edits um Rects zu bearbeiten
-
Hallo Forum!
Ich versuch schon seit langem einen Editor zu schreiben, mit dem man jedem von ein paar Bildern zwei Rects zuweisen kann.
Mein Ansatz:
Man kann aus einer ListBox die verschiedenen Bilder auswählen. Jedes Bild hat seine eigenen 2*4 Rects ( also 2*4BILDER_ANZAHL )
Es gibt aber insgesamt bloß 24 Edits.Deshalb mach ich es so:
Wenn der Benutzer den Text eines Edits verändert, speichert er die Eingabe in den Rects.
Code zum Speichern der Edit-Eingaben in den Rects.
void SetEditsToRects() { const int iSpriteIndex = SendMessage( m_hListBox, LB_SELGET, 0, 0 ); for( int i = 0; i < 2; i++ ) { for( int j = 0; j < 4; j++ ) { char text[10]; GetWindowText( m_hEdits[i][j], text, 10 ); *( &m_rcRects[i][iSpriteIndex].left + j ) = atoi( text ); } } }Code im WindowHandle, der die Funktion aufruft, sobald der Benutzer den Text eines Edits verändert
case RECT_EDITS: SetEditsToRects(); break;Wenn der Benutzer ein anderes Bild aus der Liste auswählt, wird der Text der Edits den Rects angepasst.
Code zum Übertragen der Rect-Daten in die Edits
void SetRectsToEdits() { const int iSpriteIndex = SendMessage( m_hListBox, LB_SELGET, 0, 0 ); for( int i = 0; i < 2; i++ ) { for( int j = 0; j < 4; j++ ) { char text[10]; sprintf( text, "%d", *( &m_rcRects[i][iSpriteIndex].left + j ) ); SendMessage( m_hEdits[i][j], WM_SETTEXT, 0, (LONG) text ); } } }Code im WindowHandle, der die Funktion aufruft, sobald
case RECT_LISTBOX: SetRectsToEdits(); break;Was dabei nicht funktioniert:
Wenn man ein anderes Bild aus der Liste auswählt, sollen die Daten der Rechtecke auf die Edits übertragen werden sollen.
Das funktioniert aber irgendwie nicht bei allen Edits, sondern nur beim ersten.Das Komische ist:
Wenn ich einen vorgegebenen Text verwend, funktionierts bei allen Rects.
Wenn ich die Reihenfolge der for-Schleifen ändere, z.B.:for( j = 4; j <= 0; j-- )Wird der Text nur bei dem geändert, der zuerst die Message erhält.
Zusammenfassend kann man also sagen, es liegt entweder daran, dass SendMessage nur beim ersten mal funktioniert, oder dass irgendwas mit dem sprintf nicht stimmt.
Kann sich hier einer vorstellen woran es liegt
-
Für mich sieht das hier etwas komisch aus:
*( &m_rcRects[i][iSpriteIndex].left + j )was genau denkst du da zu adressieren, dadurch, dass du j hinzuaddierst?
-
Das ist dafuer da, um der Reihe nach left, top, right und bottom zu kriegen.
Habs jetzt eh Gelöst:
Es lag daran dass
SendMessage( m_hEdits[i][j], WM_SETTEXT, 0, (LONG) text )wiederum RECT_EDITS auslöst, was dann die Rects an den Text anpasst.
Kann man irgendwie machen, dass nur die Befehle des Benutzters dabei entfangen werden
