Position Form1-Fensters,beim start festlegen?maximieren(best.größe) und wieder festlegen-oh mannn!(Teil3.1)+"Beisp
-
Ich hab mich 1 Jahr erfolgreich gedrückt aber jetzt isses soweit ... ich muss mich in WindowsForms reinarbeiten...
und ich scheitere schon am Simpelsten
Ich möchte ganz einfach beim Start meine Position des Fensters festlegen dazu
hab ich mit "GetSystemMetrics
" die user bildschirmauflösung geholt.. (wobei ich die vermutlich garnicht brauch..
seh ich grad..)
jetzt möcht ich mein kleines Anwendungsfenster rechtsoben starten bzw. positionieren lassen. Meine Anwendung soll so ne art Widget werden...daher...
nungut jetzt las ich, weil ich so schön tüchtig bin im forum und bin dadurch hierhin gekommen...
http://msdn.microsoft.com/de-de/library/52aha046(VS.80).aspx da steht auch tollForm1->Location = Point(100, 100);
na da freute ich mich schon, weil ich dieses bei mir gefunden habe...fett makiert
[cpp]void InitializeComponent(void) { System::ComponentModel::ComponentResourceManager^ resources = (gcnew System::ComponentModel::ComponentResourceManager(Form1::typeid)); this->lbl_Abfahrt = (gcnew System::Windows::Forms::Label()); this->SuspendLayout(); // // lbl_Abfahrt // this->lbl_Abfahrt->Location = System::Drawing::Point(12, 9); this->lbl_Abfahrt->Name = L"lbl_Abfahrt"; this->lbl_Abfahrt->Size = System::Drawing::Size(100, 23); this->lbl_Abfahrt->TabIndex = 0; this->lbl_Abfahrt->Text = L"Abfahrt:"; // // Form1 // this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; this->ClientSize = System::Drawing::Size(250, 100); this->Controls->Add(this->lbl_Abfahrt); this->Icon = (cli::safe_cast<System::Drawing::Icon^ >(resources->GetObject(L"$this.Icon"))); [b]this->Location = System::Drawing::Point(100, 100);[/b] this->MaximizeBox = false; this->Name = L"Form1"; this->Text = L"Test-Monitor"; this->Load += gcnew System::EventHandler(this, &Form1::Form1_Load); this->ResumeLayout(false); }[/cpp]
schön und gut als test hab ich s.o. mal auf 100 gesetzt oder 1000 ... aber leider passiert da nix...
this->Location = System::Drawing::Point(100, 100);
warum?? wüsste nicht das ich irgendwo was überschreibe..wäre nett wenn ihr mir helft..danke schonmal im voraus..
ps.
naja des mit "Visual" c++ 2008-express is ja sehr schön codegenerierend... ich als alter consolen c++´ler (der gerne per hand arbeitet) bin zur Zeit überfordert.noch ne frage.. ist die STL eigentlich jetzt implementiert? las da was ,dass bei 2005 noch net so war.. nur mal als schnelle info..?
edit: anscheinend.. http://msdn.microsoft.com/de-de/library/bb384632.aspx funz das auch?
-
Zitat des Tages:
sten schrieb:
las was das das
EDIT: Da hilft auch editieren nicht, ich hab's für die Ewigkeit festgehalten...
-
_matze schrieb:
Zitat des Tages:
sten schrieb:
las was das das
schon korrigiert...
edit: fieslingzurück zum Thema...
-
Aber warum STL? Es gibt ja soviele nützliche .NET Klassen.
Zum anderen: Location im CTOR erst nach InitializeComponent() gesetzt?
Simon
-
theta schrieb:
Aber warum STL? Es gibt ja soviele nützliche .NET Klassen.
Zum anderen: Location im CTOR erst nach InitializeComponent() gesetzt?
Simon
[cpp]#pragma once namespace Test { 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: /// <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->SuspendLayout(); // // Form1 // this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; this->ClientSize = System::Drawing::Size(292, 270); this->Location = System::Drawing::Point(0, 100); this->Name = L"Form1"; this->Text = L"Test"; this->ResumeLayout(false); } #pragma endregion }; }[/cpp]
hmmm? verstehs net.. eher im..
-
ja, was denn??
-
theta schrieb:
ja, was denn??
ach jetzt weiss ich was du meinst
oh mann hehe mein titel passt... ich hab vergessen die
this->StartPosition = System::Windows::Forms::FormStartPosition::Manual;
zusetzen...ach nochwas.. finds blöd das man net per hand in der InitializeComponent(void)-methode fuhrwerken darf.. wenn man das macht gibs irgendwann böses meckern vom "designer"-compiler... oder wie man den nennt... ;).
danke ...
wie sagte einst Yoda :" Viel zu lernen du hast, noch lange kein Jedi du bist"
-
sodele ich hab mal was gemacht:
[cpp]#pragma once namespace Test { using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; using namespace System::Runtime::InteropServices; value class Win32 { public: [DllImport("User32.dll")] static int GetSystemMetrics(int); enum class SystemMetricIndex { // Same values as those defined in winuser.h. SM_CXSCREEN = 0, SM_CYSCREEN = 1 }; }; /// <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) { int hRes = Win32::GetSystemMetrics( safe_cast<int>(Win32::SystemMetricIndex::SM_CXSCREEN) ); int vRes = Win32::GetSystemMetrics( safe_cast<int>(Win32::SystemMetricIndex::SM_CYSCREEN) ); InitializeComponent(); Form1_Position(vRes,hRes); //neue Position in abhängigkeit der Userauflösung. // //TODO: Konstruktorcode hier hinzufügen. // } protected: /// <summary> /// Verwendete Ressourcen bereinigen. /// </summary> ~Form1() { if (components) { delete components; } } private: System::Windows::Forms::RichTextBox^ richTextBox1; System::Void Form1_Position(int vR , int hR) { this->Location = System::Drawing::Point(0+vR-200,50); this->richTextBox1->Text = "testbetrieb" ; } 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->richTextBox1 = (gcnew System::Windows::Forms::RichTextBox()); this->SuspendLayout(); // // richTextBox1 // this->richTextBox1->Anchor = static_cast<System::Windows::Forms::AnchorStyles>((((System::Windows::Forms::AnchorStyles::Top | System::Windows::Forms::AnchorStyles::Bottom) | System::Windows::Forms::AnchorStyles::Left) | System::Windows::Forms::AnchorStyles::Right)); this->richTextBox1->Location = System::Drawing::Point(12, 45); this->richTextBox1->Name = L"richTextBox1"; this->richTextBox1->Size = System::Drawing::Size(317, 234); this->richTextBox1->TabIndex = 0; this->richTextBox1->Text = L""; // // Form1 // this->AutoScaleDimensions = System::Drawing::SizeF(7, 14); this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; this->BackColor = System::Drawing::Color::FromArgb(static_cast<System::Int32>(static_cast<System::Byte>(89)), static_cast<System::Int32>(static_cast<System::Byte>(129)), static_cast<System::Int32>(static_cast<System::Byte>(191))); this->ClientSize = System::Drawing::Size(341, 291); this->Controls->Add(this->richTextBox1); this->Font = (gcnew System::Drawing::Font(L"Courier New", 8.25F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, static_cast<System::Byte>(0))); this->FormBorderStyle = System::Windows::Forms::FormBorderStyle::FixedDialog; this->Location = System::Drawing::Point(1000, 50); this->Name = L"Form1"; this->Opacity = 0.85; this->StartPosition = System::Windows::Forms::FormStartPosition::Manual; this->Text = L"monitor"; this->ResumeLayout(false); } #pragma endregion }; }[/cpp]
kann man das so machen? ich hab ne eigene Funktion geschrieben (da man ja in InitializeComponent(void) nichts verändern soll) um die Werte zu
überschreiben,und das Fenster an meine Stelle zu zeichnen. Hintergrund ist .. soll eine Minianwendung werden, die beim Start von windows dorthin projeziert wird.
-
ja, klar, so ist's gut.
-
theta schrieb:
ja, klar, so ist's gut.
... very danke..
-
[cpp]... this->SizeChanged += gcnew System::EventHandler(this, &Form1::Form1_SizeChanged); (cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->pictureBox2))->EndInit(); this->ResumeLayout(false); } #pragma endregion private: System::Void Form1_SizeChanged(System::Object^ sender, System::EventArgs^ e) { this->richTextBox1->Text = "testbetriebbbbb" ; int hRes = Win32::GetSystemMetrics( safe_cast<int>(Win32::SystemMetricIndex::SM_CXSCREEN) ); int vRes = Win32::GetSystemMetrics( safe_cast<int>(Win32::SystemMetricIndex::SM_CYSCREEN) ); this->Text= "MannoMann"; this->Location = System::Drawing::Point(vRes-200,50); } };[/cpp]
hab ne kuriosität bzw.. ichs raffs net.. ich hab ein Eventhandler gebaut der bei Maxmieren des Fensters verschiedene änderungen an meinem Fenster und darin enthaltenen Komponenten ausführt. Jetzt möchte ich natürlich das durch das Maximieren er nicht die Position des Fensters ändert.. Macht er aber.. da dacht ich ach dann setz ich ihn einfach wieder zurück.. aber
this->Location macht er einfach net .. er setzt mein fenster links oben hin. Warum? will einfach nur das er das fenster vergrößert aber eben nicht die (meine angegebene) Position ändert. hmmmm
komischerweise ändert er den namen des Form1..Fensters....und den text im textfeld auch..
-
Ist doch logisch, Du setzt das Fenster doch auf Max...
D.h. das Fenster füllt den ganzen Bildschirm aus, links oben nach rechts unten...
-
LogoHL schrieb:
Ist doch logisch, Du setzt das Fenster doch auf Max...
D.h. das Fenster füllt den ganzen Bildschirm aus, links oben nach rechts unten...achso- ne, ich habe die Maxisize-variable (InitializeComponent) gesetzt auf höchstens 300.. (hab ich vergessen zu sagen)
-
noch was.. zu der Maximieren und wieder Positionierenfrage ..
ich habe , bzw. nehmen wir an.. ,[cpp]this->FormBorderStyle = System::Windows::Forms::FormBorderStyle::None;[/cpp]
gewählt.. das schöne dabei ist, jetzt hab ich keine Rahmen mehr (gewollt), aber jetzt kann ich das Fenster nicht mehr verschieben ! geht das, das ich trotzdem wieder verschieben kann- ohne das ich FomrBorderStyle ändere ?