ERLEDIGT
JA
JA
ANTWORTEN
2
2
ZUGRIFFE
447
447
EMPFEHLEN
-
Aloah,
ich hab mir vorgenommen einen kleinen Bildschirmschoner zu programmieren indem ein Bild über den Bildschirm fliegt.
Wenn ich die Bilddatei Lokal von der Festplatte aufrufe funktioniert das, da ich das ganze aber als eine Datei halten will, kam die Idee mit der Resource File.
Habe das Bild usw in der Resourcefile angelegt und habs nach längerem Suchen dann so ausgelesen.
Code :1 2 3 4 5
... HBITMAP hbild; ... hbild = LoadBitmap(NULL, MAKEINTRESOURCE(IDB_BITMAP1)); ...
Jetzt habe ich ja ein HBitmap, vorher hab ich das Bild von der Festplatte in ein
Code :1
Bitmap ^bild;
eingelesen und so zeichnen lassen
Code :1 2 3
private: System::Void Form1_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) { e->Graphics->DrawImage(bild, p.X, p.Y, 240, 180); }
Doch wie mach ich das jetzt?
Kann ich das HBitmap irgendwie in ein Normales Bitmap packen oder wie zeichne ich das HBitmap das es über den Bildschirm fliegt.
Danke schonmal
PS: Wenn jemand eine andere Idee hat nehme ich diese auch gerne an... will aber das Programm / den Bildschirmschoner auf die EXE Datei beschränken.
Mit freundlichen Grüßen
pyr0t0n
Im anhang der ganze Code:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
#pragma once #include "Windows.h" #include "resource.h" namespace MeinBildschirmschoner { 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::IO; using namespace System::Reflection; public ref class Form1 : public System::Windows::Forms::Form { String ^text; Point p; Timer ^zeitgeber; int vx; int vy; //HBITMAP hbild; Bitmap ^bild; public: Form1(void) { InitializeComponent(); vx = 1; vy = 1; hbild = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP1)); p = Point(0,100); zeitgeber = gcnew Timer(); zeitgeber->Tick += gcnew EventHandler(this, &Form1::Animieren); zeitgeber->Interval = 2; zeitgeber->Start(); Cursor->Hide(); // //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; void Animieren(Object ^sender, EventArgs ^e) { p.X += vx; p.Y += vy; if(p.X > this->Width-240 || p.X < 0) { vx = -vx; } if(p.Y > this->Height-180 || p.Y < 0) { vy = -vy; } Refresh(); } #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->BackColor = System::Drawing::Color::Black; this->ClientSize = System::Drawing::Size(292, 266); this->DoubleBuffered = true; this->FormBorderStyle = System::Windows::Forms::FormBorderStyle::None; this->Name = L"Form1"; this->ShowInTaskbar = false; this->Text = L"Form1"; this->TopMost = true; this->WindowState = System::Windows::Forms::FormWindowState::Maximized; this->Paint += gcnew System::Windows::Forms::PaintEventHandler(this, &Form1::Form1_Paint); this->KeyDown += gcnew System::Windows::Forms::KeyEventHandler(this, &Form1::Form1_KeyDown); this->MouseDown += gcnew System::Windows::Forms::MouseEventHandler(this, &Form1::Form1_MouseDown); this->ResumeLayout(false); } #pragma endregion private: System::Void Form1_MouseDown(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) { Close(); } private: System::Void Form1_KeyDown(System::Object^ sender, System::Windows::Forms::KeyEventArgs^ e) { Close(); } private: System::Void Form1_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) { e->Graphics->DrawImage(bild, p.X, p.Y, 240, 180); } };****ie
-
Hallo,
mit HBITMAP brauchst du gar nicht zu arbeiten.
Füge das Bild einfach als eingebettete Resource hinzu (Neben bmp kannst du auch jpg oder png verwenden):
- Im Projektmappen-Explorer über Hinzufügen->Vorhandenes Element die Bilddatei ins Projekt einfügen.
- Bei den Projekteigenschaften zu Linker und Eingabe gehen und dort bei "Verwaltete Resourcendatei einbetten" den Dateinamen hinschreiben.
Das Laden (im Konstruktor) geht dann so:
Code cpp:1
bild = gcnew Bitmap(System::Reflection::Assembly::GetExecutingAssembly()->GetManifestResourceStream("meinbild.bmp"));
Gruß
MCoderGeändert von MCoder (10.07.08 um 09:27 Uhr)
"The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
--- Larry Wall
-
hehe,
da sucht man stundenlang und dann ist es so einfach.
Danke dir, funktioniert wunderbar.****ie
Ähnliche Themen
-
Resource über den ClassLoader laden
Von Tikonteroga im Forum Java GrundlagenAntworten: 4Letzter Beitrag: 09.11.10, 12:22 -
Über Controls zeichnen C#
Von WM2010 im Forum .NET Grafik und SoundAntworten: 1Letzter Beitrag: 14.06.10, 00:23 -
Wie mit den Graphics aus anderer Klasse zeichnen? (J2ME)
Von MiMi im Forum JavaAntworten: 8Letzter Beitrag: 17.10.07, 14:27 -
[C#]GDI+ objekte über Windowsformselemente zeichnen
Von Catscrash im Forum .NET Windows FormsAntworten: 0Letzter Beitrag: 07.05.07, 15:12 -
Graphics Objekt - schneller zeichnen?
Von MichiStroi im Forum .NET Grafik und SoundAntworten: 1Letzter Beitrag: 31.10.06, 08:51





Zitieren
Login






