Alle Beiträge von Klotzkopp
-
CMenu + Haken
GetMenuState liefert nicht nur die Information, ob der Menüeintrag "gecheckt" ist oder nicht, sondern eine Vielzahl von Daten. Du musst die für dich relevanten Information erst herausfiltern, bevor du auf Gleichheit prüfst: if( ( menu.GetMenuState( ID_ITEM, MF_BYPOSITION ) & ( MF_CHECKED | MF_UNCHECKED ) ) == MF_UNCHECKED ) Das & bedeutet, dass du aus dem Rückgabewert von GetMenuState alles ausblendest, was nicht MF_CHECKED oder MF_UNCHECKED ist. Da MF_UNCHECKED 0 ist, geht auch folgendes: if( !( menu.GetMenuState( ID_ITEM, MF_BYPOSITION ) & MF_CHECKED ) ) Aber die erste Version ist "sauberer", zumal MS zumindest theoretisch die Werte der Konstanten ändern könnte.
-
Keyboard Driver
Man kann die DDKs nicht runterladen. Entweder man bekommt sie im Rahmen einer MSDN Subscription, oder man lässt sich die CD gegen Erstattung der Frachtkosten zuschicken. Ältere DDKs sind nur über eine MSDN Subscription erhältlich.
-
CMenu + Haken
Schau dir mal CMenu::GetMenuState an.
-
MDI -> VC++.net
Genau damit habe ich es gemacht. Was findest du denn nicht?
-
MDI -> VC++.net
Alle MFC-Anwendungstypen (Dialog, SDI, MDI) sind bei VC7 unter dem Projekttyp "MFC Application" zusammengefasst. In dem nachfolgenden Wizard kannst du unter "Application Type" auswählen, welchen Typ du erstellen willst.
-
klasse mit mehreren konstruktoren (überlagerung)
Achtung, die Ausführungsreihenfolge der Initialisierungen hängt von der Reihenfolge in der Klassendeklaration ab, nicht von der Reihenfolge in der Initialisierungsliste.
-
verständnis problem
Schau es dir nochmal genau an. Bei "runter" wird das Element zurückgeben, das zuletzt "drauf"getan wurde. Wie nennst du denn etwas, von dem du immer das Element zuerst runterholen musst, das du als letztes draufgepackt hast? Ein Tipp: Das andere Ding, bei dem du das Element zuerst rausliest, das auch zuerst reingekommen ist, nennt sich "Schlange" (Kasse, nicht Reptil) oder "Queue" Nachtrag: Mift[tm], nic_power hat's verraten
-
inline, this ??
Das ist so nicht ganz richt. Das Schlüsselwort inline ist nur eine Empfehlung für den Compiler, und nicht zwingend. Die meisten modernen Compiler wissen besser als der Programmierer, wo das Inlinen sich lohnt, und wo nicht. IMHO sollte man inline nur dann verwenden, wenn durch Profiling nachgewiesen wurde, dass es etwas bringt. Manche Compiler bieten aber auch Möglichkeiten, das Inlinen zu erzwingen, z.B. mit __forceinline bei MSVC++.
-
if mit booschem wert
if( wert ) tut's auch schon.
-
Syntax zu lang
Vorschlag: #include <stdio.h> int main() { int dez,i = 98; char buf[100]; buf[99] = '\0'; printf("\nBitte geben Sie eine Zahl ein:"); scanf("%d",&dez); while( dez ) { buf[i--] = (dez & 1) ? '1' : '0'; dez >>= 1; } printf("%s\n", buf + i + 1 ); }[/CODE]
-
Debugger Meldung im IE abschalten
http://fachinformatiker-world.de/forums/showthread.php?s=&threadid=26288
-
Eingegebene Daten in Excel Tabelle ein bzw. auslesen
Für den User macht das keinen Unterschied. Die beiden Ansätze erfordern grundverschiedene Vorgehensweisen auf der Seite des Entwicklers, und der zweite (Excel fernsteuern) läuft verständlicherweise nur unter Windows, mit installiertem Excel. Dann ist es Quatsch, dafür Excel-Dateien anzulegen, das ist viel zu aufwendig. Das würde ich wirklich nur dann machen, wenn die Dateien auch ohne dein Programm, eben mit Excel, gelesen werden können sollen. Ansonsten kannst du dir da was eigenes basteln, das ist erheblich einfacher. Wie das genau gehen kann, hängt von den Daten ab, die du speichern willst.
-
Eingegebene Daten in Excel Tabelle ein bzw. auslesen
Willst du selbst mit xls-Dateien hantieren, oder willst du Excel so fernsteuern, dass es das selbst tut?
-
Windows XP aktivieren
Ich hab mein XP jetzt bestimmt schon ein Dutzend mal über das Internet aktiviert (bin ein notorischer OS-Zerschießer). Bisher war kein Griff zum Telefon notwendig.
-
Thread+UpdateData
Du kannst UpdateData nicht aus einem anderen Threadkontext als dem GUI-Thread des Dialogs aufrufen. Falls es möglich ist, solltest du auf UpdateData komplett verzichten, zumindest im Zusammenhang mit Value-Variablen (Steuerlement-Variablen sind unkritisch). Die Funktion macht praktisch immer mehr als nötig, und sie erschwert die Kontrolle über die Variablen, die die Dialoginhalte speichern. In diesem konkreten Fall könntest du den UpdateData-Aufruf durch einen oder mehrere "konventionelle" Aufrufe ersetzen. Wenn es zum Beispiel darum geht, den Inhalt eines Eingabefeldes zu setzen, kannst du das z.B. so machen: GetDlgItem( IDC_WASAUCHIMMER )->SetWindowText( "Neuer Text" ); Das geht auch aus einem anderen Thread heraus.
-
Problem beim nutzen einer DLL funktion
Genau so. int(*addfuncpointer)(int,int) = reinterpret_cast<int(*)(int,int)>( GetProcAddress( ... ) ); int x = addfuncpointer( 42, 42 );[/CODE]Ein typedef macht die ganze Sache besser lesbar.
-
Problem beim nutzen einer DLL funktion
DLLs haben nichts mit Standard-C/C++ zu tun, darum verschiebe ich dich mal dahin, wo du OnTopic bist. Aber zum Thema: Und das ist auch richtig so. DllMain wird aufgerufen, wenn sich ein Prozess mit der DLL verbindet, wenn der Prozess einen neuen Thread startet, wenn ein solcher Thread beendet wird, und wenn der Prozess sich von der DLL wieder trennt. Um diese Fälle zu unterscheiden, dient der zweite Parameter (bei dir ul_reason_for_call). Wenn deine DLL auf diese Ereignisse nicht reagieren muss, kannst du DllMain auch ganz weglassen. GetProcAddress ruft die angegebene Funktion nicht auf, sondern liefert dir einen (untypisierten) Funktionszeiger. Wenn du den Rückgabewert nicht benutzt (wie in deinem Beispiel), macht dieser Aufruf nichts. Übrigens muss es "int main" heißen.
-
Paintboxen Dyn ansprechen
--> Verschoben: C++: Compiler, IDEs, APIs
-
uppercase und lowercase
Du kannst fgets benutzen, das liest das '\n' mit ein. Ein weiterer Vorteil: Du kannst die Puffergröße angeben und damit Überläufe verhindern. Allerdings musst du dann selbst die gewünschten Inhalte aus dem Puffer auslesen, den dir fgets füllt. Das könnte dann so aussehen: char buf[500]; char szSatz[255], cZeichen; int iLen; printf("Geben sie einen Satz ein:\n"); fgets(buf, 499, stdin ); strncpy( szSatz, buf, 254 ); szSatz[254] = '\0'; printf("Geben sie einen Buchstaben ein:\n"); fgets(buf, 499, stdin); cZeichen = buf[0]; [/CODE]
-
Dialog fenster farbig
Du schreibst das K groß
-
SQL und C programmierung
Das passiert automatisch. Der Speicher für Stringliterale wird schon zur Compilezeit berücksichtigt. Guybrush Threepwood hat dir zwei Beispiele gegeben, die beide ihren Zweck erfüllen. Wenn C++ in Frage kommt, kannst du auch std::stringstream verwenden. Je nach verwendeter Entwicklungsumgebungen kann es noch weitere Lösungen geben, z.B. CString::Format bei MFC. Du hast praktisch die freie Auswahl .
-
SQL und C programmierung
Doch, das ist in Ordnung. Stringliterale kann man ohne Probleme einem const char* zuweisen. Man darf nur auf keinen Fall schreibend auf diesen String zugreifen. Man kann sogar einem char* (also ohne const) ein Stringliteral zuweisen. Das hat aber nur historische Gründe, man sollte es also nicht machen.
-
C++ & ICQ Messages
SIM ist ein OpenSource-ICQ-Client. Vielleicht kannst du aus dem Code was abgucken: http://sim-icq.sourceforge.net/
-
Aus zwei Zahlen eine dritte machen
Die einfachste Methode ist wahrscheinlich, die beiden Zahlen bitweise exklusiv-oder zu verknüpfen. Werden denn besondere Anforderungen an die dritte Zahl gestellt?
-
Mysteriöse Wertzuweisung
Da kannst du mit Strg-B auf dem Reiter "Data" solche Breakpoints setzen. Gib als Ausdruck deinen Zeiger an, und als Länge 4.