Alle Beiträge von Klotzkopp
-
Navigieren in .txt
Solche Klassen sind üblicherweise genau auf den Anwendungszweck zugeschnitten, da wird dir Beispielcode wenig nützen. Das sehe ich nicht so. Wenn du die Daten in einer Datei in einem für Menschen lesbaren Format ablegst, und noch dazu mit der Endung .txt, dann würde für mich als Benutzer der Schluss naheliegen, dass ich die auch von Hand verändern kann. Und wenn die Reihenfolge der Zeilen festgelegt wäre, bräuchtest du die Schlüsselworte nicht.
-
Problem mit Vorwärtsdeklaration
Das sollte mit einem #include "resource.h" zu beheben sein, vor dem anderen #include. Im Code steht CMaticaDoc, nicht MyViewClass :confused: Jedenfalls könntest du zwischen die beiden #includes noch eines für die Headerdatei einfügen, in der diese Klasse deklariert wird.
-
Problem mit Vorwärtsdeklaration
Wie wäre es mit einem #include "MyViewClass.h" in SampleClass.cpp?
-
Einen markierten Bereich im Explorerfenster in den Sichtbereich scrollen
element->scrollIntoView(CComVariant(true)); [/CODE] oder[CODE]element->scrollIntoView(CComVariant(false)); je nachdem, wo das Element stehen soll.
-
Einen markierten Bereich im Explorerfenster in den Sichtbereich scrollen
IHTMLElement::scrollIntoView
-
Username-ABfrage Batch Datei?
Und weil das alles nichts mit C++ zu tun hat: Ab in die Windowsecke...
-
Tastendruck simulieren
Varrius, du schickst nur ein Key-Up-Event, d.h. das Loslassen einer Taste. Das reicht nicht. Da ist aber auch noch ein Fehler von mir drin: SetFocus funktioniert nur bei Fenstern, die aus dem aufrufenden Thread erzeugt wurden. Ersetze SetFocus durch SetForegroundWindow. Die Tastenkommandos kannst du dann so senden: INPUT input[2]; input[0].type = INPUT_KEYBOARD; input[0].ki.dwFlags = 0; // Key down input[0].ki.wVk = 'W'; input[0].ki.dwExtraInfo = 0; input[0].ki.time = 0; input[1] = input[0]; input[1].ki.dwFlags = KEYEVENTF_KEYUP; SendInput(2,input, sizeof(INPUT)); [/CODE]
-
Navigieren in .txt
Eine Wrapperklasse ist sozusagen ein objektorientierter Mantel um eine oder mehrere Funktion (wie deine Einstellungsfunktionen). Der Vorteil ist, dass Klasseninstanzen im Gegensatz zu Funktionen einen Zustand haben können, der durch die Membervariablen repräsentiert wird. So könntest du z.B. vermeiden, dass du bei jeder Änderung einer einzelnen Einstellung die komplette Datei neu schreiben musst. Nein, damit meine ich, dass du auf fest im Code vorhandene Abhängigkeiten verzichten sollst. In deinem Code ist der Wert 6 fest mit der Einstellung "Write logfile" verbunden. Warum 6? Warum definierst du nicht eine Abbildung von Schlüsselwörtern auf Einstellungs-IDs? Dann würdest du auch nicht ins Straucheln kommen, wenn ein böser User die Reihenfolge der Zeilen in deiner Datei vertauscht. std::stringstream ist ein Stream, wie z.B. cout oder die Filestreams, nur dass er nicht mit der Konsole oder Dateien arbeitet, sondern mit Strings im Speicher. Und mit str() bekommst du einen String, der alles beinhaltet, was du zuvor in den Stream geschoben hast.
-
Navigieren in .txt
Ich würde eine Wrapperklasse für die Einstellungen schreiben. Du solltest die einzelnen Einstellungen auch nicht fest mit den Benutzereingaben verdrahten. Für den Anfang sollte hier aber ausreichen, dass du nicht den bestehenden String änderst - denn damit bist du zusätzlich noch davon abhängig, dass du zuvor eine korrekt formatierte Datei eingelesen hast - sondern den String neu erstellst: case 1: { stringstream s; s << "CMethod is = " << verwendung; str_CMethod = s.str(); } break;[/CODE]Das " is" würde ich übrigens weglassen. Für einzelne Buchstaben (char) ist dein ursprünglicher Code richtig.
-
Tastendruck simulieren
FindWindowEx unterstützt keine Wildcards. Du musst durch alle Top-Level-Fenster iterieren, den Fenstertitel mit GetWindowText holen und darin dann nach "Microsoft Word" suchen.
-
Navigieren in .txt
Jetzt verstehe ich's. Nur als Tipp: Du handelst dir durch diese "Magic Numbers" auf lange Sicht jede Menge Ärger ein. Stell dir vor, du änderst deine Schlüsselworte. Dann musst du diese Zahlen auch ändern. Jetzt stell dir das ganze bei einem größeren Projekt vor... Das Problem ist, dass du einen int in ein Zeichen umwandelst. Dabei wird der Wert des int als ASCII-Code interpretiert. Wenn verwendung also 0 ist, setzt du ein Stringendezeichen ein, ist verwendung 1, dann ist es ein Zeichen mit dem ASCII-Code 1 (auch nichts lesbares). Am einfachsten löst du das hier, indem du den Code des Zeichens '0' addierst: case 1: str_CMethod[13] = verwendung + '0'; Spätestens bei mehrstelligen Zahlen musst du aber den int in einen String umwandeln.
-
Tastendruck simulieren
Wenn du die WinAPI-Funktion innerhalb einer Memberfunktion einer von CWnd abgeleiteten Klasse benutzen willst, musst du zwei Doppelpunkte vor den Funktionsnamen schreiben: ::SetFocus(wasauchimmer); Dann wird die Funktion im globalen Namensraum gesucht.
-
Navigieren in .txt
- Tastendruck simulieren
Du bringst zwei unterschiedliche Funktionen durcheinander: Die WinAPI-Funktion HWND SetFocus(HWND) und die MFC-Funktion CWnd* CWnd::SetFocus(). Benutzt du die MFC?- Tastendruck simulieren
Wenn, dann sizeof(struct tagINPUT). Die tag-Namen sind für C, denn nur da brauchst du überhaupt einen typedef für die struct. Beim typedef-Namen kannst du nämlich das "struct" weglassen. Unter C++ brauchst du gar keinen typedef. SetFocus ist eine Funktion, die du aufrufst, keine Variable, der du etwas zuweisen könntest. Du solltest hier auch nicht die Begriffe "Adresse" und "Zeiger" verwenden. Handles sind etwas anderes als Zeiger.- Tastendruck simulieren
Leider nicht ganz. sizeof(input) == sizeof(INPUT *) == 4 (wie alle Zeiger auf 32Bit-Windowsplattformen) sizeof(INPUT) passt besser. Die simulierten Tasten landen in dem Fenster, das den sog. Fokus hat. Du kannst einem Fenster den Fokus mit SetFocus zuweisen. Dazu brauchst du ein Fensterhandle, das du z.B. mit FindWindowEx bekommen kannst.- Tastendruck simulieren
Es funktioniert nicht mit Standard-C oder C++. Du musst betriebssystemspezifische Erweiterungen benutzen, die nicht vom Standard abgedeckt werden. Darum ist dein Thread auch verschoben worden. SendInput sollte dir weiterhelfen.- Tastendruck simulieren
Das kommt auf das verwendete Betriebssystem an. Mit Standard-C oder C++ geht da gar nichts.- Radio Groups in Borland
Warum glaubst du, dass die Umwandlung nach float irgendetwas bewirkt? Wenn es immer nur um drei jeweils einstellige Zahlen geht, dann ist maverick82s Ansatz die naheliegendste Lösung. Schau mir auf die Signatur- Borland Builder -> RadioButtonGroup
Hier geht's weiter...- dll und CDialog**
Du gibst die Adresse einer lokalen Variablen zurück. Diese Variable (in diesem Fall das Array dialogs) existiert nicht mehr, nachdem die Funktion beendet ist, der Zeiger ist ungültig. Da kann alles passieren.- Firefox Compiler
http://www.mozilla.org/build/- Diskussion: Eigenes Betriebsystem
Ich bin mir nicht sicher, ob du den Aufwand richtig einschätzt. "Kleines System" und "ins Internet können" (bzw. das, was ich vermute, was du dir darunter vorstellst) schließt sich IMHO gegenseitig aus.- C-Programm soll sich selbst löschen
Und wer löscht die andere exe?- IR Empfänger nutzen
Der C++-Standard deckt die Kommunikation über serielle (oder sonstige) Schnittstellen nicht ab. Also musst du verraten, für welches Betriebssystem das sein soll. Wegen tippe ich mal auf Windows, richtig? Was möchtest du jetzt erklärt haben? Den Beispielcode? Dann solltest du den posten. Oder die Kommunikation über die serielle Schnittstelle allgemein? Da gibt es in der MSDN-Library passende Artikel (falls es denn wirklich um Windows geht). - Tastendruck simulieren