Alle Beiträge von Klotzkopp
-
Auslesen von Systemvairablen - getenv() verkürzt Pfade :(
Du könntest versuchen, über die Reihenfolge der include-Direktiven etwas zu erreichen. Wenn das nicht hilft, dann pack die Funktion, die GetLongPathName benutzt, in eine eigene .cpp-Datei, die nur die wirklich benötigten Header benutzt.
-
Auslesen von Systemvairablen - getenv() verkürzt Pfade :(
windows.h oder Platform SDK? Dann hast du wohl UNICODE/_UNICODE definiert. const WCHAR* path = L"C:\\DOKUME~1\\user\\LOKALE~1\\"; WCHAR pathBuffer[MAX_PATH+1]; DWORD dwRet = GetLongPathName(path, pathBuffer, MAX_PATH); [/CODE]
-
Suche Hilfe bei einer Primzahlberechnung in C++
Das ein oder andere if wirst du auch brauchen. Formulieren wir doch erst mal den Algorithmus: Um festzustellen, ob eine Zahl eine Primzahl ist, musst du sicherstellen, dass sie nur durch sich selbst und durch eins teilbar ist. Wenn also eine Zahl durch irgendeine Zahl >1 und <Zahl teilbar ist, ist sie keine Primzahl. Wir prüfen also alle Zahlen von 2 bis (Zahl-1) und testen, ob Zahl dadurch teilbar ist. Falls ja, ist die Zahl keine Primzahl, und wir sind fertig. Falls nicht, machen wir mit der nächsten Zahl weiter. Haben wir alle Zahlen getestet, ohne eine gefunden zu haben, durch die die Zahl teilbar ist, ist die Zahl eine Primzahl. Einverstanden? Dann solltest du das jetzt in Code umsetzen, oder auch in einen PAP/Struktogramm, falls du den Zwischenschritt auch noch machen möchtest. Eine Anmerkung am Rande: Der Algorithmus ist nicht optimiert. Aber er tut, was er soll.
-
Nichtaufgelöste externe Symbole (war: Ich brauch da ma hilfäää :))
Hallo und Willkommen auf dem Board Ist dir klar, dass "Ich brauch da ma hilfäää" ein richtig schlechter Titel für einen Thread ist? Du bekommst schnellere und bessere Hilfe, wenn die potentiellen Helfer schon am Threadtitel sehen können, worum es geht. Es gibt Leute, die schreckt so ein Titel ab, so dass sie sich den Thread gar nicht ansehen. Außerdem verschlechtert es die Ergebnisse der Suchfunktion. Ich ändere das mal für dich.
-
Auslesen von Systemvairablen - getenv() verkürzt Pfade :(
#include <windows.h> hast du aber, oder? Hast du ein aktuelles Platform SDK drauf?
-
Suche Hilfe bei einer Primzahlberechnung in C++
Jetzt dämmert's. Leider kannst du durch das bloße Durchführen dieser Rechnung nicht bestimmen, ob eine Zahl eine Primzahl ist. Jede natürliche Zahl ist durch sich selbst und durch 1 teilbar, aber nur Primzahlen sind nicht durch andere Zahlen teilbar. Um die Teilbarkeit zu testen, brauchst du zuerst mal eine if-Abfrage: if(a % b == 0) { // a ist durch b teilbar }[/CODE] % (modulo) liefert den Rest der Division. Ist der Null, geht die Division glatt auf. Die Formulierung ""Die Zahl hat folgende Primzahlen: "" ist auch Unsinn. Eine Zahl hat keine Primzahlen. Sie ist eine oder sie ist keine. Sie hat [i]Primfaktoren[/i], aber um die bestimmen zu können, solltest du zuerst ein Programm schreiben, dass prüft, ob eine eingegebene Zahl eine Primzahl ist. Und um eine Schleife wirst du da nicht herum kommen.
-
Auslesen von Systemvairablen - getenv() verkürzt Pfade :(
Mein Fehler: Es ist GetLongPathName, nicht GetFullPathName: const char* path = "C:\\DOKUME~1\\user\\LOKALE~1\\"; char pathBuffer[MAX_PATH+1]; DWORD dwRet = GetLongPathName(path, pathBuffer, MAX_PATH); [/CODE] Aber noch ein paar Tipps zu deinem Code: 1. In Literalen im Quellcode musst du immer doppelte Backslashes machen. 2. Mal abgesehen davon, dass du die Größe des Puffers, nicht die Länge des umzuwandelnden Pfades angeben müsstest: sizeof(path) ist 4 (auf 32Bit-Windows), falls path ist ein char* ist. Ist path eine Instanz einer Stringklasse, wird dabei auch nicht die Länge herauskommen. Mit sizeof kannst du nicht die Größe eines dynamisch allokierten Speicherbereichs bestimmen. Das geht überhaupt nicht in C++. 3. Der vierte Parameter von GetFullPathName (char**) ist ein "out"-Parameter, d.h. der Zeiger wird auf einen neuen Wert gesetzt. Damit ist der Speicher, den du für Adress mit new angefordert hast, verloren.
-
CFileDialog
Schreibst du es noch hier rein, falls jemand später dasselbe Problem hat?
-
Suche Hilfe bei einer Primzahlberechnung in C++
Erstens steht bei einer Zuweisung das Ziel (also die Variable, in der der Wert abgelegt werden soll) auf der linken Seite. Also wenn überhaupt, dann zahl2 = zahl1 / zahl1; Zweitens: zahl1 / zahl1 ist 1, egal, welchen Wert zahl1 hat (außer Null, da ist es undefiniert). Auch hier: Das Ziel der Zuweisung muss links stehen. Und zahl2 geteilt durch 1 bleibt zahl2. Man könnte also zusammenfassen; zahl2 = 1; ausgabe = zahl2; // und damit ausgabe = 1;[/CODE] Das ist offensichtlich Unsinn. Deine Kommentare an den Zeilen helfen da auch nicht weiter, weil sie nur wiedergeben, was der Code [i]macht[/i]. Das wissen wir schon. Um dieses Problem zu lösen, müssen wir von dir wissen, was dieser Code [i]tun soll[/i]. Denn das sind offensichtlich zwei unterschiedliche Dinge. Erklär uns, [i]warum[/i] du gerade diese Rechenschritte machst, dann kommen wir der Lösung näher.
-
Auslesen von Systemvairablen - getenv() verkürzt Pfade :(
GetFullPathName kann aus der 8.3-Schreibweise die lange machen.
-
Suche Hilfe bei einer Primzahlberechnung in C++
Da kann ich nur zustimmen. Es wäre gut, wenn Phade und sagt, was diese beiden Zeilen tun sollen.
-
Projekt "KFZ-Werkstatt"
Mit Sicherheit hat das jemand. Aber dein Auftrag lautet Schreiben, nicht Weiterverwenden. Denkst du nicht, derjenige, der dir diesen Auftrag gegeben hat, hat sich etwas dabei gedacht? Denkst du nicht, es ist für das Lernziel besser, wenn du es selbst machst? Würdest du deinem Lehrer sagen, dass du das Programm nicht selbst geschrieben hast, wenn du es hier bekommen würdest?
-
c++-spielchen....
// jetzt sind wir aber schon arg eingeschränkt. Konsolenein- und -ausgabe ist nicht...
-
Suche Hilfe bei einer Primzahlberechnung in C++
cin, cout und endl liegen im namespace std, d.h. du musst entweder std::cout usw. schreiben oder nach dem Einbinden von iostream eine using-Direktive setzen: using namespace std;
-
Suche Hilfe bei einer Primzahlberechnung in C++
printf stammt noch von C. Es funktioniert zwar unter C++ auch, man sollte aber trotzdem besser die C++-Streams benutzen.
-
ListViewItems hinzufügen
Die innere for-Schleife und das switch sind unnötig, du könntest das auch so machen: for(n = 0; n < iDatensaetze; n++) { wsprintf(sz_vid, "%d", n + 1); lvItem.iItem = n; lvItem.iSubItem = 0; lvItem.pszText = sz_vid; lIndex = ListView_InsertItem(hwnd_ListView, &lvItem); //ListView_SetItemText(hwnd_ListView, n, 0, sz_vid); ListView_SetItemText(hwnd_ListView, n, 1, dbD_ptr[n].szpid); ListView_SetItemText(hwnd_ListView, n, 2, dbD_ptr[n].szpName); ListView_SetItemText(hwnd_ListView, n, 3, dbD_ptr[n].szpFilmlength); // usw... [/CODE] SetItemText für die erste Spalte brauchst du nicht, den Text gibst du ja schon bei InsertItem an.
-
Infobereich unter Windows nutzen
Durchsuch mal das Forum C++: Compiler, IDEs, APIs (denn da gehört die Frage hin, weil sie nichts mit Standard-C++ zu tun hat) nach Shell_NotifyIcon, da sollte sich etwas finden. Sobald die Suchfunktion wieder aktiviert ist.
-
MDI und SC_RESTORE (MFC/VC++6.0)
OnActivate könnte klappen.
-
ListViewItems hinzufügen
Es ergibt keinen Sinn, cchTextMax zu verändern. Wenn dsh.pszName lange genug verfügbar ist, ja. Schlecht. Mit dem virtuellen ListControl sollte man nur arbeiten, wenn man einen guten Grund dafür hat, z.b. wenn man häufig Objekte am Anfang oder in der Mitte entfernt. Da muss ein nicht-virtuelles ListControl viel umkopieren, und das dauert. Gibt es einen Grund dafür? Wenn du die Daten erst dann einlesen würdest, wenn du sie einfügen kannst, bräuchtest du kein virtuelles ListControl und könntest auf das Array dbD_ptr komplett verzichten. Du kannst auch alles vorher einlesen und dafür dein Array benutzen, aber ein virtuelles ListControl brauchst du dann immer noch nicht.
-
ListViewItems hinzufügen
Wenn du eine LVN_GETDISPINFO-Nachricht bekommst, steht in der LVITEM-Struktur schon ein Puffer für den Text bereit. Wie groß der ist, steht in item.cchTextMax. Wenn du mehr Platz brauchst, musst du selbst einen Puffer bereitstellen und item.pszText darauf zeigen lassen. Ich verstehe nicht, warum du beim Hinzufügen der Items überhaupt schon Texte hineinschreibst. Wenn du unbedingt ein virtuelles ListControl haben musst, dann wird es dich schon fragen, wenn es Texte braucht. Wie und wo stellst du eigentlich sicher, dass du schon genügend Einträge in dbD_ptr eingelesen hast? So steht's in der MSDN Library. Keine Ahnung, warum. Weder noch. Entfernt aus dem ListControl.
-
ListViewItems hinzufügen
int item.cchTextMax steht, wie groß der Puffer für den Text ist. Wenn du mehr brauchst, musst du pszText selbst zuweisen. Dieser Speicher muss solange unverändert bereit stehen, bis das Element entfernt wird oder zwei weitere LVN_GETDISPINFO-Nachrichten eingetroffen sind.
-
ListViewItems hinzufügen
Wenn du mit "Einlesen" das Anfordern vom Parentfenster mittels Notifikation meinst, ja. Wenn du wirklich ein virtuelles ListView hast, dann brauchst du gar keine Daten hineinzuschreiben. Du brauchst auch keinen Speicher anzufordern. Zeig mal deine LVN_GETDISPINFO-Behandlung.
-
ListViewItems hinzufügen
Ein virtuelles ListControl hält die anzuzeigenden Daten nicht selbst vor, sondern fragt immer beim Parent nach. Dazu schickt es die Nachricht LVN_GETDISPINFO. Mal davon abgesehen, dass es hier nicht notwendig ist, Speicher vom Heap anzufordern (du könntest auch eine lokale LVITEM-Variable benutzen): Du musst die Struktur mit Daten füllen. Setz alle Member auf 0, bis auf iItem, den setzt du auf den Index, wo das Item eingefügt werden soll. Den Text kannst du gleich mit angeben, musst du aber nicht.
-
ListViewItems hinzufügen
Dieser Code hilft dir nur, wenn du ein virtuelles ListControl brauchst. Falls du nicht weißt, was das ist, brauchst du es sehr wahrscheinlich nicht. Fehler in deinem Code können wir nur finden, wenn du uns den Code zeigst.
-
Sicherung vor STRG-C & Druck-Taste
Wie Crash2001 schon sagte, vor einem Screenshot kannst du dich nicht schützen. Kopieren in die Zwischenablage verhinderst dadurch, dass du Steuerelemente verwendest, die auf die Clipboard-Nachrichten nicht reagieren, oder indem du die Steuerelemente "subclasst" und die Clipboard-Nachrichten abfängst. Du kannst den Text aber auch direkt ausgeben, ganz ohne Steuerelemente.