Peeeeps bei Sendmessage(hwnd, WM_KEYDOWN, '1', 0);
-
hey community,
hab ein ärgerliches Problem und bin nicht sehr erfahren mit Winapi...
Jedenfalls stecke ich gerade in einem Projekt. Ich möchte aus einer Textdatei Zeichen auslesen und diese dann einzeln in Listboxen schreiben. Die Zeichen sind nur Zahlen von 1-9...
Zuerst versuchte ich es so:
hwnd FELD[i][j].Feldfenster; char Zahl[20]; PostMessage(FELD[i][j].Feldfenster, LB_ADDSTRING, 0, (lParam) Zahl[index]);Leider passierte gar nichts, was ich nicht ganz verstanden habe, aber es auf den String Zahl geschoben habe.. Muss ich da noch irgendwas konvertieren???
Dann bin ich auf die Idee gekommen, einen Tastendruck zu erzeugen:
switch(Zahl[index]) { case 1: PostMessage(FELD[i][j].Feldfenster, WM_KEYDOWN,'1',0); PostMessage(FELD[i][j].Feldfenster, WM_KEYUP,'1',0); .... }statt ... stehen 8 weitere cases...
tja mit dieser etwas unschönen Variante bekam ich wenigstens das korrekte Ergebnis zu sehen, alle Listboxen (2-dimensional erstellt) wurden gefüllt..
ALLDERINGS: Es sind viele aufeinanderfolgende Peeeeps zuhöhren. Die Zahlen erscheinen sofort, das Peepen geht noch 2-3 Sekunden weiter
Kann mir da jemand helfen? Mir ist egal in welcher Variante, hauptsache eine funktioniert, verstehen würde ich natürlich beide gerne.
Vielen Dank für Eure Hilfe
-
achja, erwähnenswert wär noch, dass die Listboxen genau so klein sind, dass nur ein Zeichen hineinpasst, und wenn man z.B. eine Taste gedrückt hält, um drüber hinauszuschreiben, kommt genauso ein verzerrtes peepen...
-
OLOLOL!
Erstmal... ist deine Frickellösung scheisse, aber das solltest du ja selbst wissen.
Und du verwechselst bestimmt eine List Box mit einem Edit Control.http://msdn.microsoft.com/en-us/library/bb773169
Du kannst einfach WM_SETTEXT nutzen.
// C++ std::string str = "1"; SendMessage(editHandle, WM_SETTEXT, 0, reinterpret_cast<LPARAM>(str.c_str()));// C char* str = "1"; SendMessage(editHandle, WM_SETTEXT, 0, (LPARAM)str);
-
olol schrieb:
// C++ std::string str = "1"; SendMessage(editHandle, WM_SETTEXT, 0, reinterpret_cast<LPARAM>(str.c_str()));// C char* str = "1"; SendMessage(editHandle, WM_SETTEXT, 0, (LPARAM)str);Beide Lösungen brücksichtigen nicht, dass das Projekt mit Unicode compiliert sein könnte!
// C++ std::string str = "1"; SendMessage(editHandle, WM_SETTEXT, 0, reinterpret_cast<LPARAM>(CA2T(str.c_str()))); const TCHAR* str = _T("1"); SendMessage(editHandle, WM_SETTEXT, 0, reinterpret_cast<LPARAM>(str));// C const TCHAR* str = _T("1"); SendMessage(editHandle, WM_SETTEXT, 0, (LPARAM)str);
-
okay viele dank ihr beiden, das was Martin Richter gepostet hat, funktioniert soweit. Das Problem ist nur: ich arbeite mit einem char *String, nicht const TCHAR *String..
Jetzt fehlt mir noch das Wissen, wie ich von char* zu TCHAR* konvertiere..
const TCHAR *str = _T(string);Das hier funktioniert leider nicht..
Achja ich bin schon der Meinung, dass ich mit Listboxen arbeite.. wieso? muss eben lesen und schreiben..
-
My goshhead!
Geh endlich auf http://msdn.microsoft.com/en-us/library/bb773169 und schau dir die Controls an...
Und wenn du eh nur char* benutzt, dann nimm mein Beispiel 2.
-
okay du hast recht, hab mich falsch ausgedrückt, wegen den LB_... commands dachte ich es handele sich um eine listbox, sorry...
naja dein Beispiel geht solange, bis ich statt "str" "Zeile[index]" eingebe (char Zahl[20];) dabei ist das doch das gleiche, mein Programm lässt sich auch ausführen, stürzt an dieser stelle aber ab...

-
kann es sein, dass Zeile[index] ein 'char' ist, und str ein "string" ? hm komisch, aber immerhin klappt es jetzt einigermaßen
-
Grundlagen johnny, Grundlagen!
-
danke für die hilfe, wüsste ich schon alles, so wie du, würd ich keine fragen stellen sondern klugscheißen..