Problem mit Timers - hwnd
-
Guten Abend,
ich habe ein Problem beim debuggen einer Windows Forms Anwendung mit dem microsoft vc++. Man hat mir schon gesagt, ein "hwnd"(da liegt das Prblem...) sei ein Fensterhandle.Der Quellcode:
#pragma once #include <time.h> #include <Windows.h> #include <stdio.h> #include <WinUser.h> #define IDT_TIMER1 1 namespace zeit { using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; /// <summary> /// Zusammenfassung für Form1 /// /// Warnung: Wenn Sie den Namen dieser Klasse ändern, müssen Sie auch /// die Ressourcendateiname-Eigenschaft für das Tool zur Kompilierung verwalteter Ressourcen ändern, /// das allen RESX-Dateien zugewiesen ist, von denen diese Klasse abhängt. /// Anderenfalls können die Designer nicht korrekt mit den lokalisierten Ressourcen /// arbeiten, die diesem Formular zugewiesen sind. /// </summary> public ref class Form1 : public System::Windows::Forms::Form { public: Form1(void) { InitializeComponent(); // //TODO: Konstruktorcode hier hinzufügen. // } protected: /// <summary> /// Verwendete Ressourcen bereinigen. /// </summary> ~Form1() { if (components) { delete components; } } private: System::Windows::Forms::Label^ label1; private: System::Windows::Forms::Button^ button1; protected: private: /// <summary> /// Erforderliche Designervariable. /// </summary> System::ComponentModel::Container ^components; #pragma region Windows Form Designer generated code /// <summary> /// Erforderliche Methode für die Designerunterstützung. /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden. /// </summary> void InitializeComponent(void) { this->label1 = (gcnew System::Windows::Forms::Label()); this->button1 = (gcnew System::Windows::Forms::Button()); this->SuspendLayout(); // // label1 // this->label1->AutoSize = true; this->label1->Location = System::Drawing::Point(46, 77); this->label1->Name = L"label1"; this->label1->Size = System::Drawing::Size(35, 13); this->label1->TabIndex = 0; this->label1->Text = L"label1"; // // button1 // this->button1->Location = System::Drawing::Point(88, 180); this->button1->Name = L"button1"; this->button1->Size = System::Drawing::Size(75, 23); this->button1->TabIndex = 1; this->button1->Text = L"button1"; this->button1->UseVisualStyleBackColor = true; this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click); // // Form1 // this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; this->ClientSize = System::Drawing::Size(292, 266); this->Controls->Add(this->button1); this->Controls->Add(this->label1); this->Name = L"Form1"; this->Text = L"Form1"; this->ResumeLayout(false); this->PerformLayout(); } #pragma endregion private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { SetTimer(hwnd, IDT_TIMER1, 10000, (TIMERPROC) NULL); } }; }
Die Fehlermeldung:
e:\dokumente und einstellungen\philipp\eigene dateien\visual studio 2005\projects\zeit\zeit\Form1.h(105) : error C2065: 'hwnd': nichtdeklarierter Bezeichner
kann mir jemand helfen, sodass der Fehler weg ist und das Programm funktioniert???
Dank schon im Voraus!!!
mfg
Mr X
-
Gib es en Grund, warum Du nicht den Timer von der Windows Form nutzt?
-
Gib es en Grund, warum Du nicht den Timer von der Windows Form nutzt?
Unwissenheit... Klär mich bitte auf.
Was ist denn der Timer von Windows Forms, bzw. wie funktioniert er?mfg
Mr X
-
Wenn Du die Form in der Entwurfsansicht hast, kannst Du aus der Toolbox unter Komponenten den Timer durch ein Doppelklick der Form hinzufügen.
Das es sich um ein "Nicht-visuelles Steuerelement" handelt, landet es unterhalb vom Fenster im Designer.
Wenn Du die Ereignisse vom Timer über das Eigenschaftenfenster ansiehst, kannst Du das Ereignis „Tick“ einfügen.
In diesem Ereignis legst Du die Funktion die bei jedem "Tick" ausgelöst werden soll, rein.Den Interval, wann der Timer ausgelöst werden soll, legst Du im Eigenschaftenfenster unter Interval fest.
Die Zeitangabe ist in Millisekunden.
Der Timer wird gestartet mit
Timer1->Enabled = true;
Oder gestoppt mit
Timer->Enabled = false;
-
Ah... Danke, das funktioniert schon mal, ich habe es geschafft in einem Test-projekt ein Label nach ein paar Sekunden zu verändern.
Nun tut sich ein weiteres Problem auf:
ich möchte gerne, das der Timer immer wenn sein Intervall abgelaufen ist einer Zahl 1 addiert. Das habe ich folgendermaßen gelöst:private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e) { jahr = jahr + 1; }
Das hat auch funktioniert. Nun soll "int Jahr" in einem Label angezeigt werden.
Der Versuch:// // Jahr // this->Jahr->AutoSize = true; this->Jahr->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 15.75F, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point, static_cast<System::Byte>(0))); this->Jahr->Location = System::Drawing::Point(639, 9); this->Jahr->Name = L"Jahr"; this->Jahr->Size = System::Drawing::Size(57, 30); this->Jahr->TabIndex = 0; this->Jahr->Text = jahr; this->Jahr->UseCompatibleTextRendering = true;
Das funktionierte nicht mehr. Scheinbar braucht das Label einen bestimmten Typ, der nicht "int" ist
Wie krieg ich es hin, das int jahr zu dem bestimmten typ wechselt???
Danke schon im vorausmfg
Mr X
-
Die int Variable...
Du kannst auch
jahr = jahr++;
schreiben.
Lässt sich besser lesen.Und nun die Konvertierung.
Der Typ ist String.Jahr->Text = Convert::ToString(jahr);
/edit Ich habe die Namen der Varaiablen vertauscht. Nun passt es aber.