tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
2
ZUGRIFFE
447
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    pyr0t0n pyr0t0n ist offline Mitglied Brokat
    Registriert seit
    Sep 2002
    Ort
    Herten
    Beiträge
    258
    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

  2. #2
    MCoder MCoder ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jul 2005
    Ort
    München
    Beiträge
    2.448
    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ß
    MCoder
    Geändert von MCoder (10.07.08 um 09:27 Uhr)
     
    "The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
    --- Larry Wall

  3. #3
    pyr0t0n pyr0t0n ist offline Mitglied Brokat
    Registriert seit
    Sep 2002
    Ort
    Herten
    Beiträge
    258
    hehe,

    da sucht man stundenlang und dann ist es so einfach.

    Danke dir, funktioniert wunderbar.
     
    ****ie

Ähnliche Themen

  1. Resource über den ClassLoader laden
    Von Tikonteroga im Forum Java Grundlagen
    Antworten: 4
    Letzter Beitrag: 09.11.10, 12:22
  2. Über Controls zeichnen C#
    Von WM2010 im Forum .NET Grafik und Sound
    Antworten: 1
    Letzter Beitrag: 14.06.10, 00:23
  3. Antworten: 8
    Letzter Beitrag: 17.10.07, 14:27
  4. [C#]GDI+ objekte über Windowsformselemente zeichnen
    Von Catscrash im Forum .NET Windows Forms
    Antworten: 0
    Letzter Beitrag: 07.05.07, 15:12
  5. Graphics Objekt - schneller zeichnen?
    Von MichiStroi im Forum .NET Grafik und Sound
    Antworten: 1
    Letzter Beitrag: 31.10.06, 08:51