Zum Inhalt springen

FighterFigger

Mitglieder
  • Gesamte Inhalte

    81
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von FighterFigger

  1. Ich persönlich kenne weder "Borland C++ for Dos 3.5" noch erkenne ich die Fehlermeldung, aber wenn es schon an der main-Funktion liegen könnte: hast du's schonmal mit void main() oder int main(int argc, char* pArgs[]) versucht? kA. ob das eine Hilfe ist ...
  2. Er startet das ja als Konsolenanwendung, und bei jeder Konsolenanwendung unter Windows 98 kann man einstellen, ob das Fenster nach Beendigung geschlossen werden soll, oder nicht. geht das bei XP denn nicht auch irgendwie?
  3. Den Bloodshed habe auch ich damals sehr gerne genutzt, da er auch gleich die Header und einen Compiler mitbringt. Ansonsten sollte deine Schule mal gucken, ob sich die Microsoft Academic Alliance lohnt. Unter Umständen ist die nur für Hochschulen, aber dann wird einmal gezahlt, und die Schüler bekommen Wuschel-Studio gratis für 2 Jahre. Aber eben nur für Windows.
  4. Was heißt hier "Vorteile" ) Ich persönlich kenne diese Klassen-in-Klassen (weiß nichtmal mehr, wie die heißen) ... kenne sie nur aus ganz seltenen Fällen bei untypischen Design-Entwürfen. Im Prinzip benutzt du eine Klasse, um andere Klassen wie in einem Paket zu kapseln. Aber genau für diese Aufgaben sind Namespaces da. Einen Vorteil kenne ich nicht, außer, daß es vielleicht in EngineeringTools anders aussieht ... Aber ich wollte dich ja auch nicht berichtigen, sondern vor allem eben wissen, warum du dafür diese Klasse nutzt, eben WEIL ich das nur selten so sehe und eben WEIL das eigentlich nicht wirklich einen Unterschied macht. )
  5. Beim Beispiel vom Tapeman also: namespace MyClasses { class V { ... }; class O { ... }; class O1:public O { ... }; class O2:public O { ... }; class O3:public O { ... }; class V1:public V { public: O1* o1; }; class V2:public V { public: O2* o2; }; class V3:public V { public: O3* o3; }; }; class Z { public: MyClasses::V1 v1; MyClasses::V2 v2; MyClasses::V3 v3; }; Z z;
  6. Auch wenn das nicht wirklich die Antwort auf die Frage ist verstehe ich nicht, warum ihr die Klassen in die andere Klasse einbettet. Welche Vorteile hat das gegenüber einem gediegen gewählten Namespace? Und Tapeman - müßte es nicht eher Z1::V1 v1; statt Z1:V1 v1; sein? ... Ich kenne mich mit diesen eingebetteten Klassen nicht aus, aber ein Scope-Operator erscheint mir sinnvoll. klärt mich auf =)
  7. Also - es geht mir nicht darum, den Aktualisierungsaufruf auszulagern. Du hast eine langwierige Funktion, die den Thread des Dialogs blockiert. Diese Funktion will den Dialog während der Arbeit verändern, die Aktualisierung wird aber erst nach der Funktion durchgeführt, wenn der Thread des Dialogs wieder Zeit für seinen Dialog hat, weil er nichtmehr deine Funktion beackert Also: Du packst deine komplette langwierige Funktion in einen eigenen Thread, während dessen Ausführung sich der Dialog beinahe langweilt. Ab und zu bekommt er dann von diesem zweiten Thread eine Meldung, daß er sich aktualisieren soll, und das tut er prompt - hat ja sonst nix mehr zu machen. --- Damit man bequem einen Thread machen kann schreibt man sich entweder eine globale Funktion *bibber* oder macht seine Methode static. Denn für den neuen Thread soll die Funktion nicht von einem speziellen Objekt abhängen. Benötigte Daten (wie deinen Dialog) kann man dann als Pointer übergeben - man könnte auch einen Funktionspointer zu einer Callback-Funktion übergeben - das wäre nicht dumm ... Wichtig ist - die Funktion benötigt folgende Signatur: UINT MyControllingFunction(LPVOID pParam); ... entweder global oder als static member ... dann sollte es gehen.
  8. Du könntest (mal wieder ) deine Behandlungsfunktion in einen eigenen Thread auslagern. So blockierst du nicht den Thread des Dialogs, der sich dann sofort um die Aktualisierung kümmern kann. Allerdings weiß ich echt nicht 100%ig, ob das das Problem ist, schließlich sollte RedrawWindow doch die Mal-Funktionen aufrufen, und nicht nur eine Message schicken - oder? Wird denn der Dialog am Ende deiner Funktion - also wenn die Anwendung Idle ist (oder zumindest der Thread des Dialogs) ... wird dann der Dialog aktualisiert? Sorry - anderes fällt mir nicht ein.
  9. Kann es sein, daß du die Texte aus einer Funktion heraus ändern möchtest, die nicht so schnell beendet wird? Ein Dialog hat ja nur einen Thread (wenn ich das richtig sehe) und wenn du von dem aus eine Fuktion einer anderen Klasse startest, dann werden Aktualisierungen u.U. erst durchgeführt, wenn du wieder zurück bist und der Dialog Zeit hat, die Messages abzubauen. Vielleicht solltest du mal sagen, welche Klasse die Statics ändern möchte, wer das Objekt dieser Klasse erstellt, wer den Dialog erstalle ... sowas halt ...
  10. Du kannst doch immer Variablen für Control und für Value bei Window-Objekten der MFC angeben ... so auch bei den Statics ... oder willst du das nicht? Dann legst du bei der Dialogklasse eine nette public Funktion an, die es dir erlaubt den Text zu ändern, indem sie den protected-Member (CString m_static_XY_Text) verändert. Nach UpdateData(false) sollte das eigentlich gehen. So bist du nicht von der Item-ID IDC_STATIC_xy abhängig, die vielleicht bei dir von Klasse zu Klasse unterschiedlich ist. Was den weißen Rest des Konsolen-Fensters angeht: schonmal Invalidate() versucht? Einfach auf das DialogObjekt anwenden.
  11. FighterFigger

    File vorhanden

    So mache ich das in MS-VC++ ... ... wobei ich zugegebenermaßen nie einen Unterschied zwischen "access(...)" und "_access(...)" gefunden habe. #include <io.h> ... if (access(filename, 0) != -1) { ... } Geht das nicht, ist das zu sehr Microsoft oder gar nur C++ ? Achso ... und das ist die Liste der File-Handling-Funktionen aus der msdn. :beagolisc
  12. do { } while (!buttonPressed_); buttonPressed_ = false; und der Button setzt deine Member-Variable bool buttonPressed_ auf true ... Geht das nicht?
  13. Also mit TerminateThread kriegst du den definitiv weg. Das wäre mal ein Versuch wert, allerdings: Erstellt er bei jedem Schleifendurchlauf einen neuen Thread, ohne den wieder zu entfernen? Das glaube ich nicht wirklich, denn XSleep kann ja dann abschließen, wenn er genug gewartet hat. Außerdem weiß ich nicht, warum ein Thread bestehen bleiben sollte, wenn der Vater-Prozeß terminiert. Aber hast du dir schonmal das hier in Bezug auf diesen Artikel durchgelesen? Vielleicht übernimmst du seinen Vorschlag.
  14. Aber gerade das ist, was ich Designtechnisch anders machen würde. (ohne zu wissen, ob das dort möglich ist und ohne dir bei XSleep zu helfen) Du könntest eben diese Polling-SchleifenFunktion als Thread aufmachen indem du sie static deklarierst und du darauf CreateThread anwendest. Dann kann die schlafen oder wachen, wann immer sie will. Nun braucht sie nur noch eine Möglichkeit, aktiv die GUI zu verändern. Entweder mit einem Pointer auf den Dialog, oder auf eine Callback Funktion oder ähnliches ... Du könntest theoretisch doch auch die Ergebnisse in einen gemeinsamen Speicher schreiben und per Message der GUI sagen, daß da neue Daten sind. Ich meine nur, daß du das tatsächlich in 2 Threads teilst und damit dann keine Probleme mehr hast. :beagolisc
  15. Dann solltest du vielleicht das, was schlafen soll in einen eigenen Thread packen. Auf den hast du dann volle Kontrolle durch den Handler und den Thread legst du immer brav, früh ins Bett mit Sleep. Da Sleep deinen anderen Thread schlafen läßt, aber nicht deinen Haupt-GUI-Thread, kann der fein weiterarbeiten. Wird die GUI geschlossen muß sie vorher noch ihren Sohn killen, der eben noch schläft. Solch ein Konzept wäre doch einfacher ... oder? Der Thread, der schlafen soll ... was tut der? Berechnet der was oder ist er auch für eine GUI-Funktionalität?
  16. Ich weiß echt nicht, ob ich helfen kann, aber: Wenn du schreibst "wird fortgesetzt" ... kommt dann das Icon da hin, wohin du es haben wilst? Ich glaube nämlich fast schon, daß die RessourceID IDR_MAINFRAME nicht richtig ist - kann das sein? Such doch einfach mal dein komplettes Projekt nach Teilen des Pfades auf F: durch, und vielleicht noch deine Registry und auch dein VisualC++. Irgendwoher muß er den Kram ja haben.
  17. Ich denke keine, denn alle Programme, die ich kenne, die das können brauchen dafür viel Zeit. Sie addieren die Größen der beinhalteten Dateien im Ordner und in den Unterordnern. Folglich müßtest du den Dateibaum ablaufen, die Dateigrößen ermitteln und zusammenrechnen. Ich wage unwissend zu behaupten, daß das wohl nur für Windows gilt, in Linux/Unix/... aber anders aussieht - das weiß ich aber echt nicht. Mit der MFC wirst du da sicherlich eh nicht für entwickeln.
  18. ModifyStyle und ModifyStyleEx sind Funktionen der Basisklasse, die CEdit zwar erbt, aber nicht überschreibt. Ich könnte mir gut vorstellen, daß man diese Funktionen daher nicht mit ES_PASSWORD nutzen kann ... denke ich mir so ... Helfen wird dir: SetPasswordChar(char) [COLOR=Green]// einschalten der PW-Funktion[/COLOR] m_editNoPW.SetPasswordChar([COLOR=Red]'*'[/COLOR]); [COLOR=Green]// ausschalten der PW-Funktion[/COLOR] m_editPW.SetPasswordChar(0); [COLOR=Green]// abtesten[/COLOR] ASSERT(!(m_editPW.GetStyle() & ES_PASSWORD)); ASSERT((m_editNoPW.GetStyle() & ES_PASSWORD)); [COLOR=Green]// Darstellung aktualisieren[/COLOR] Invalidate(); gefunden hier: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmfc98/html/_mfc_cedit.3a3a.setpasswordchar.asp
  19. Hallo Leute, eine kleine Frage zu CSplitterWnd der MFC in meiner SDI-Applikation. (2 Panes = 2 Zeilen x 1 Spalte) Wenn ich die Größe meines Fensters veränder, werden die Panes in ihrer Breite angepaßt, in der Höhe allerdings nur das untere Pane. Kann ich das so ändern, daß das obere statt dem unteren verändert wird? So sieht meine Anwendung aus: __________ +--------+ | pane 0 | +--------+ | pane 1 | +--------+ ... und ich möchte, daß Änderungen der Fensterhöhe sich nur auf das obere Pane (pane0) auswirken.
  20. Die Unterschiede erwischen einen leider immer dann, wenn man es am wenigsten gebrauchen kann. Zum Beispiel habe ich damals bei VS.2003 15 Minuten gesucht, nur um im Debug-Modus den Speicher-Monitor zu finden. Allerdings mag ich das neue VisualStudio sehr gern. Raten kann ich dir nur, beginne erstmal mit der 6.0 und schau dir bei Freunden, Bekannten oder einer naheliegenden Hochschule die .NET-Version an ... vielleicht fühlst du dich dann sicherer. Die Konvertierung kleinerer, frischer Projekte ist eine Kleinigkeit von 6.0 zu .NET (Tip: bleib fern von der 7.0 ... dann lieber 2003 (7.1) oder warte sogar noch ein Weilchen - die bald erscheinende, neue Version soll noch besser werden.)
  21. Hurra - das ist, was ich wissen wollte Also ist's kein Konstruktor und kein Konvertierungs-Operator sondern ein Cast. Danke an alle beteiligten :beagolisc
  22. Hi Guybrush, ich meine damit, daß folgendes nicht funktioniert: function(10); und auch nicht: int monat = 10; function(monat);[/PHP] beides führt zu fehlern. Es geht erst wenn: [PHP]function(defs:months(10)); oder: int monat = 10; function(daef::months(monat));[/PHP] Also kann ich nur kompilieren, wenn ich [i]defs::months(...)[/i] hinzufüge. Beeinflußt dieser Zusatz nun also die Laufzeit oder ist das nur für den Compiler? und [b]nic_power[/b]: ich meinte sowas: [PHP]enum zahlen { EINS = 1, ZWEI, ZWO = ZWEI, DREI = 3, VIER, VIELE = 10 }; in diesem Enum ist die 2 zweimal vertreten, für 5 bis 9 gibt es aber keinen Enum. (also jeder Wert nur max einmal, aber Integer können öfter oder sogar gar nicht auftreten) Wie handelt der während der Laufzeit folgende Aufrufe: zahlen(2); // Aufruf 1 zahlen(6); // Aufruf 2[/PHP]
  23. Hallo nic_power, In der folgenden Codezeile deines Codes rufst du auch diesen Konstruktor (oder ist es ein Operator) auf, da eben in C++ nicht einfach nur ein Integer übergeben werden kann. Dieser Konstruktor (oder ist es ein Operator?) heißt so, wie der Enum-Typ Das Problem ist ja, daß ein Enum mehrere Einträge mit identischem Wert haben kann. Also hat zwar jeder EnumWert genau einen Integer zugewiesen, aber ein Integer kann einen, keinen oder mehrere Enumtypen zugeordnet haben. Sucht mein Programm immer nach dem Enum, mit der entsprechenden Zahl, oder akzeptiert er die Zahl, wie sie ist ... Also sehe ich das richtig ... in der Laufzeit existiert diese Konversion gar nicht mehr, sondern die ist nur für den Compiler - so wie ein cast? Gruß - ich
  24. Danke für die Antwort, aber bis zur Iteration ist noch alles klar. Ekelig hingegen wird es dann bei der Funktion function. void function(defs::months myMonth); Diese Funktion nimmt einen Wert des Types defs::months und bei C++ reicht da ein Integer nicht aus, ich muß diesen erst konvertieren mit defs::months(int i) Und diese Konversion ... wie lange dauert diese, und wird sie durch Compiler optimiert oder nicht? Gruß - ich :e@sy
  25. Hallo Mädels und Jungx, ich möchte gerne über einen Enum iterieren, befinde mich aber in einem Zeit-kritischen Bereich (ca. 5 Mio. Aufrufe dieses Blocks) In C++ sieht das bei mir so aus: // - enum ---------------------------------------------- namespace defs { enum months {JANUARY, FEBRUARY, ... DECEMBER, LAST_MONTH};} // - enum ---------------------------------------------- ... // - block ---------------------------------------------- for (int month = defs::JANUARY; month < defs::LAST_MONTH; month++) { function(defs::months(month)); // <---- function nimmt ein Element des Enums} // - block ---------------------------------------------- Ich weiß, daß ich optimieren könte, wenn ich von vornherein mit Integern plane, ich möchte die Enums gerne der Übersicht wegen weiterhin nutzten. Fragen: 1. Weiß jemand, wie Aufwendig der Operator (oder Konstruktor) ist, der einen Integer in ein Enum-Element zurück wandelt? 2. Wird dieser Operator vielleicht sogar durch MS-C++-Compiler wegoptimiert? Denn selbst, wenn ich den ++Operator für das Enum definiere scheine ich um diesen Operator (oder ist das ein Konstruktor) nicht umher zu kommen.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...