Fragen bzgl. MS Visual C++ - Anfängerfragen
-
Hallo erstmal bitte beachtet, dass ich Anfänger bin und meine Frage daher wahrscheinlich eher ein Kinderspiel für euch ist.
Es geht darum, dass ich das erste Mal mit MS Visual C++ arbeite.
Meine Fragen:
Wie kann ich in einer WinForms-Anwendung fopen() verwenden, oder warum nicht?Habe ich bei MFC-Anwendungen eine ähnliche Oberfläche um grafische Oberflächen zu erstellen oder geht das nur bei WinForms?
Sollte ich mich eher nach .NET oder MFC orientieren?
Kann ich bei MFC bzw. .NET ganz normal Header-Files einbinden und diese verwenden??
Wäre echt nett wenn ihr berücksichtigt, dass ich noch ein Anfänger bin.
Signed - nihao
-
Zu 1: Du musst die stdio.h includen.
#include <stdio.h>
Zu 2: Sicherlich hat die MFC auch einen Oberflächendesigner ähnlich den von WindowsForms.
Zu 3: Orientiere Dich eher in Richtung WindowsForms, da die MFC schon sehr veraltet ist.
Zu 4: Ja, siehe oben...
-
Ok vielen dank, hab allerdings die stdio.h schon includet gehabt aber er hat immernoch behauptet fopen() wäre nicht deklariert.
-
nihao schrieb:
Ok vielen dank, hab allerdings die stdio.h schon includet gehabt aber er hat immernoch behauptet fopen() wäre nicht deklariert.
wenn Du mit C++ arbeitest musst Du noch den Namespace mit angeben ... müsste std sein
hand, mogel
-
Aber warum geht das nur in der cpp datei und nicht in der Headerdatei?
Geht nicht:
#pragma endregion private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { FILE *pFile = fopen("C:\\test.txt","a+"); } }; }
Kann ich irgendwie aus der CPP Datei auf die eingetragenen Werte einer Textbox zugreifen?
-
Ja sicherlich kannst Du aus der cpp Datei auf die eingetragenen Werte einer Textbox zugreifen.
Was hast Du genau vor?
Gib mal bitte mehr Info.
Gruß,
Doug_HH
-
nihao_ schrieb:
Aber warum geht das nur in der cpp datei und nicht in der Headerdatei?
Geht nicht:
#pragma endregion private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { FILE *pFile = fopen("C:\\test.txt","a+"); } }; }
evt. weil ein #include fehlt - oder der Namespac enicht passt ... was mich in meinem Verdacht bestärkt...
Kann ich irgendwie aus der CPP Datei auf die eingetragenen Werte einer Textbox zugreifen?
...das Dir Grundlagen für C++ fehlen
außerdem solltest Du Dir einig werden ob Du C++ (fopen) oder C++/CLI (der Rest Deines Codes) machen willst ... wenn Du C++/CLI verwenden willst, dann schau mal unter System::IO nach den Streams um Dateien zu öffnen - ist wesentlich einfacher
ansonsten
String ^ mytext = TextBox1->Text;
hand, mogel
-
Also ich poste jetzt mal den ganzen Standard-Code des Projekts:
Form1.h
#pragma once namespace tagnacht { 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::Button^ button1; public: System::Windows::Forms::CheckBox^ checkBox1; 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->button1 = (gcnew System::Windows::Forms::Button()); this->checkBox1 = (gcnew System::Windows::Forms::CheckBox()); this->SuspendLayout(); // // button1 // this->button1->Location = System::Drawing::Point(61, 49); this->button1->Name = L"button1"; this->button1->Size = System::Drawing::Size(75, 23); this->button1->TabIndex = 0; this->button1->Text = L"button1"; this->button1->UseVisualStyleBackColor = true; this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click); // // checkBox1 // this->checkBox1->AutoSize = true; this->checkBox1->Location = System::Drawing::Point(36, 13); this->checkBox1->Name = L"checkBox1"; this->checkBox1->Size = System::Drawing::Size(80, 17); this->checkBox1->TabIndex = 1; this->checkBox1->Text = L"checkBox1"; this->checkBox1->UseVisualStyleBackColor = true; // // Form1 // this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; this->ClientSize = System::Drawing::Size(191, 84); this->Controls->Add(this->checkBox1); this->Controls->Add(this->button1); 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) { } }; }
tagnacht.cpp
// tagnacht.cpp: Hauptprojektdatei. #define _CRT_SECURE_NO_WARNINGS #include "stdafx.h" #include "Form1.h" #include <iostream> #include <stdio.h> using namespace std; using namespace tagnacht; [STAThreadAttribute] int main(array<System::String ^> ^args) { // Aktivieren visueller Effekte von Windows XP, bevor Steuerelemente erstellt werden Application::EnableVisualStyles(); Application::SetCompatibleTextRenderingDefault(false); // Hauptfenster erstellen und ausführen Application::Run(gcnew Form1()); // HIER MOECHTE ICH AUF DEN INHALT DER FORM ZUGREIFEN ABER WIE? return 0; }
-
Form1^ frm = gcnew Form1(); Application::Run(frm); // HIER ANNST DU ZUGREIFEN, WIE DU LUST HAST! // from->...
-
Bin am verzweifeln, warum geht das nicht:
Form1.checkBox1->Checked = true;Muss nicht erst ein Objekt der Klasse gemacht werden um drauf zuzugreifen?
-
nihao_ schrieb:
Bin am verzweifeln, warum geht das nicht:
weil Du Dir noch immer kein Buch mit Grundlagen für C++ genommen hast
Form1.checkBox1->Checked = true;
der Code könnte aus VB.NET und dem My-Namespace umgesetzt worden sein
Muss nicht erst ein Objekt der Klasse gemacht werden um drauf zuzugreifen?
ja - Jochen hat Dir das auch schon gepostet
Form1^ frm = gcnew Form1(); Application::Run(frm); // HIER ANNST DU ZUGREIFEN, WIE DU LUST HAST! // form->...
ich habe mal den Tippfehler gleich entfern - evt. hilft Dir das
hand, mogel
-
Form1^ frm = gcnew Form1(); Application::Run(frm); frm->checkBox1->Checked = true;
Und warum ist dann nicht die CheckBox checked wenn ich das mache?
-
nihao_ schrieb:
Form1^ frm = gcnew Form1(); Application::Run(frm); frm->checkBox1->Checked = true;
Und warum ist dann nicht die CheckBox checked wenn ich das mache?
Weil Du erst dann aus Run(..) rauskommst, wenn deine Form geschlossen wird.
Ich nehme an, Du möchtest die CheckBox als Default setzen.
Dazu: Verschiebe deinen Code in die Form und zwar in die InitializeComponents(..) Methode.Simon
-
Nein also ich wollte fopen() benutzen anstatt System::IO::File::Create(),
aber irgendwie geht dass nur in der cpp und nicht in der Form.h
-
Aha. Und was ist der Grund fopen() den .NET IO Funktionen vorzuziehen?
Simon
-
Weiß nicht, weil es halt naja ich sage mal "neu" ist und ich eig. nur "reines C++" schreiben wollte
-
nihao_ schrieb:
Weiß nicht, weil es halt naja ich sage mal "neu" ist und ich eig. nur "reines C++" schreiben wollte
fopen ist aber "C" und nicht "C++" oder "C++/CLI" ... am besten ist Du entscheidest Dich erstmal für eine der 3 Sprachen
-
Wie kann ich jetzt z.B. einen Socket mit TCP aufmachen und nen GET Request absetzen?
-
Namensraum System::Net...
http://msdn.microsoft.com/en-us/library/system.net.aspx
Dann z.B. mit dem WebRequestEntscheide dich für eine Programmiersprache, besonders als Anfänger!
Und BTW: C++/CLI und was das mit sich bringt ist meiner Meinung nach nicht für Anfänger geeignet.Simon
-
theta schrieb:
Namensraum System::Net...
http://msdn.microsoft.com/en-us/library/system.net.aspx
Dann z.B. mit dem WebRequestEntscheide dich für eine Programmiersprache, besonders als Anfänger!
Und BTW: C++/CLI und was das mit sich bringt ist meiner Meinung nach nicht für Anfänger geeignet.außer man ist Fan von verknoteten Gehirnwindungen