Anständige Lösung für OnTimer gesucht - Laufschrift in MFC?
-
CTecS schrieb:
Du solltest dir mal die Member der Klasse CListCtrl anschauen.
LOL hast recht, is mir jetzt nicht aufgefallen.
spätestens aber mit pListCtrl->GetWindowTextWolf1985 schrieb:
HM.. naja auf die schnelle find ich keine sinnvolle bedingung..
hudeln bringt nix, dadurch passiern dir ja die fehler pListCtrl->SetWindowText/GetWindowText.
den Letzten eintrag in der Liste bekommst du mit
int iCount = pListCtrl->GetItemCount( )-1; CString sText = pListCtrl->GetItemText( iCount , 0);
Wolf1985 schrieb:
Und frag mich nicht wieso immer A kommt
bin mir jetzt nicht sicher, aber ich halte das fürn bug von vc.
SetWindowTextA ist die Ansi Version und SetWindowTextW ist die Unicode Version von SetWindowText je nach Kompiler einstellung ist
SetWindowText = SetWindowTextA;
bzw.
SetWindowText = SetWindowTextW;wenn du das A bzw. das W der jeweiligen funktion wegläst, schadet das nix und du hast in jedem fall die richtige funktion.
[NEW EDIT]
mit GetItemData kannst du dir werte holen die NICHT SICHTBAR an das jeweilige element der Liste gehängt wurden. diese must du allerdings mit SetItemData vorher setzen.bist du dir denn sicher, das du deine anderen versuche, an das Listenelement zu kommen, richtig ausgeführt hast
-
@rT!f@Ct schrieb:
bin mir jetzt nicht sicher, aber ich halte das fürn bug von vc.
Wieso ein Bug? Alle Vorkommen von GetWindowtext werden in GetWindowTextA bei einer MBCS und in GetWindowTextW bei einer Unicode Version getauscht.
Das gilt eben für alle Vorkommen dieses Identifiers!Entsprechend gilt dasauch für Memberfunktionen in den Klassen wie bei CWnd::GetWindowText!
-
Ich war die ganze Zeit falsch.. LOL
Grund: Das angebliche Listenfeld war ein Textfeld! *g* hab es jetzt mit einem Listenfeld ersetzt. Allerdings wenn ich da nun SetWindowText("Test"); mache, dann wird nichts angezeigt, respektive der Text ist ev weiss??
Langsam verwirr ich mich glaub selbst...
-
Wie schon mehrfach gesagt, wenn du ein Listenfeld hast, wobei es wieder drauf an kommt was für eins, solltest du doch in der lage sein die Member der entsprechenden Klasse in der MSDN anzuschauen und dir die entsprechenden Fuinktion Raussuchen zu können. SetWindowText und GetWindowText sind nun mal nicht die alles heilenden Methoden um in jeden Objekt scvhreiben bzw. Lesen zu können.
An sonsten schau dir Beispiele an wie das gemacht wird im Netz findest du genügend dazu. Solange wie du selbst nicht einmal weisst ob das nun ein CStatic, CListCtrl oder CListBox oder was auch immer das ist wird dir nicht wirklich jemand helfen können
-
Hi Martin,
du hast mich glaub ich falsch verstanden, das mit dem bug beziehe ich darauf das SetWindowTextA/W in der liste steht, die aufpopt, wenn ich eine Klassenvariable habe und den punkt oder den zeiger darauf anwende.
Bei VS 6 stand SetWindowTextA/W nicht in dieser list.
-
Da CListCtrl von CWnd abgeleitet ist und CWnd Methoden für Get/SetWindowText enthält, zeigt die Codevervollständigung diese natürlich auch für CListCtrl an. Nur dass diese dann eben nicht das machen, was man erwartet, weil die Fensterklasse sich anders verhält.
-
Hab jetzt ein Editfeld genommen. Allerdings bekomm ich beim Programm folgende Warnmeldung:
Hier der Code:
UINT CHauptDlg::WarnList(LPVOID pParam) { //Aktuelle Warnungen laden und im Editfeld anzeigen CString somecode, s; CInternetSession session("Warnlist",1,INTERNET_OPEN_TYPE_PRECONFIG); CStdioFile* pFile = NULL; CString strUrl("http://www.nfws.ch/inc/warnlist.php"); do { try { pFile = session.OpenURL(strUrl,1,INTERNET_FLAG_TRANSFER_BINARY,NULL,0); if(pFile) { while (pFile->ReadString(somecode) != NULL) { s = s + somecode; } pFile->Close(); } } catch (CInternetException* e) { e->Delete(); session.Close(); CloseHandle(session); } CEdit *pEdit = (CEdit*)pParam; CEdit *pEdit = (CEdit*)pParam; int iCount = pEdit->GetLineCount()-1; CString sText = pEdit->GetWindowTextA ( iCount , 0); if(!sText == s) { pEdit->SetWindowText(s); } else { //RIEN NE VAS PLUS } pEdit->SetWindowText(s); }while(1+1); return 0; }
Was muss ich jetzt beim Editfeld verwenden?? Beim ListCtrl war die Variable sText jeweils immer leer, hat also nicht geklappt. Beim EditCtrl werd ich auch aus der MSDN nicht so ganz schlau weil GetWindowText (die Fehlermeldung kommt) entweder hier bei mir nicht constchar ist oder sonst keine 0 Parameter akzeptiert..
-
Wie wäre es einfach mal mit MSDN lesen?
CEdit::GetWindowText nimmt als ersten Parameter ein CString oder einen LPSTR und als zweiten die Länge und es gibt nur im zweiten Fall die Länge zurück.
http://msdn.microsoft.com/de-de/library/db50wx7h.aspx
-
Hab ich ja gelesen, genau das Was mich trotzdem nicht weiter bringt.
Hab es jetzt mal gelöst mit Clearen, denn anstatt der neue Text erneut angezeigt wird, wird er immer angehängt.CEdit *pEdit = (CEdit*)pParam; pEdit->SetWindowText(s); Sleep(5000); pEdit->SetSel(0,-1); pEdit->Clear(); Sleep(5000);
pEdit->Clear löst keine Reaktion aus und nichts wird gelöscht.
EDIT:
Gecleart wird, aber dann erscheint der Text erneeut mit Anghängsel!! Anstatt erneut zu laden! ... hm.. so ne kacke.. liegt das am Cache ? Wenn ja wie und wo kann der daktiviert werden ??
lg
Wolf
-
Die Sleeps nützen gar nichts. Es wird keien Anzeige aktualisiert.
Wenn kein Message Pump läuft wird auch kein WM_APINT ausgelöst.
Insofern verstehe ich nicht was Dein Code soll.
Er macht nicht mehr als SetWindowText("");