Text auf Buttons ändern
-
Hallo,
ich versuche in meiner Anwendung die Beschriftung von Buttons während der Laufzeit zu ändern.
Ich habe folgendes gemacht:
ich habe eine Methode, die mir die Beschriftung ändern soll
die Beschriftung steht in data->languages[1];void CDolmetscherDlg::UpdateLanguageButtons() { extern CData *data; CButton *button; button=(CButton*)GetDlgItem(IDC_BUTTON_HS1); button->SetDlgItemText(IDC_BUTTON_HS1, data->languages[1]); button->RedrawWindow(NULL, NULL, RDW_UPDATENOW); . . .
in Meiner OnPaint()rufe ich die UpdataLanguageButtons()auf, so dass die Buttons jedesmal beim Neuzeichnen upgedatated werden.
wenn ich jetzt das Programm laufen lasse bekomme ich sobald ich daten eingebe, welche die Buttons betreffen, erhalte ich einen fatalerror während der Laufzeit!
hab dann versucht es in der OnCtlColor direkt zu ändern:
if (pWnd->GetDlgCtrlID() == IDC_BUTTON_HS1) { SetDlgItemText(IDC_BUTTON_HS1, data->languages[1]); pDC->SetTextColor(RGB(0,0,0));// ** Textfarbe ** pDC->SetBkMode(TRANSPARENT); // Modus:bei Transparent wird Set BK Color ingnoriert pDC->SetBkColor(RGB(0,0,64)); return m_brush_yellow; } . . .
Ergebnis: gleicher Fehler!
Gibts noch ne andere Möglichkeit? zum Beispiel DrawItem überschreiben oder gar OwnerDraw Button verwenden(das wolltze ich eigentlich vermeiden!!!)?
-
schon SetWindowText probiert?
-
Was ist CData?
-
SetWindowText hab ich noch nicht probiert
@estartu_de:
CData ist eine von mir entworfene Klasse, in der ich Daten die über RS232 kommen speichere und verwalte!
-
Dann versuch mal schleunigst das zu probieren...
-
Ist der Zeiger denn gültig?
-
SetWindowText funktioniert!
hier die Lösung:
UpdateLanguageButtons()button=(CButton*)GetDlgItem(IDC_BUTTON_HS2); button->SetWindowText(data->languages[2]); button->RedrawWindow(NULL, NULL, RDW_UPDATENOW);
Danke für den Tip!
-
np
nur mal ne Frage: ist das Redraw da nötig? Ich dachte das geht auch ohne?
-
Das Redraw kann man auch weglassen, da die UpdataLanguageButtons- methode in der OnPaint aufgerufen wird!
Funktioniert prima!