65.9K
CodeProject is changing. Read more.
Home

screensaver in Managed c++

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.33/5 (5 votes)

Jun 28, 2005

viewsIcon

36991

downloadIcon

561

another screensaver code, but this one is managed c++ only, no MFC, winipi stuff

Introduction

This code based on The .NET Screen Saver http://www.codeproject.com/useritems/dotnetscr.asp C#.

Actually it is a conversion from C# to C++ managed with some minor changes.

It works with .NET Framework version 1.1., not sure with prior releases.

compile and run: execute run.bat

For begginers

windows2000: copy scr file to folder \winnt\system32 and change screen saver properties. This is a jayssaver.cpp

//    Author: howdyeveryone


#using <mscorlib.dll>
using namespace System;
using namespace System::IO;

#using <System.Windows.Forms.dll>
using namespace System::Windows::Forms;

#using <System.dll>
using namespace System::ComponentModel;

#using <System.Drawing.dll>
using namespace System::Drawing;
using namespace System::Drawing::Imaging;



__gc class ScreenSaverSetting:public Form {
private:
    Button        *pbtnOk;
    void         eventKeyOkClick(Object* sender,  EventArgs* e);
public:
    ScreenSaverSetting();
    ~ScreenSaverSetting();
};


ScreenSaverSetting::ScreenSaverSetting() {

    this->Text = "Screen Saver Setting Here";
    this->Location = Point( 100, 100 );
    this->Width = 600;
    this->Height = 500;
    this->FormBorderStyle = FormBorderStyle::Fixed3D;        

    pbtnOk = new Button();
    pbtnOk->Size = Point( 70, 30 );
    pbtnOk->Location = Point( 400, 400 );
    pbtnOk->Text = "Ok";
    pbtnOk->add_Click(new EventHandler(this, eventKeyOkClick));

    this->Controls->Add(pbtnOk);

}

ScreenSaverSetting::~ScreenSaverSetting() {
}



void ScreenSaverSetting::eventKeyOkClick(Object* sender,  EventArgs* e)   {
    this->Close();
}


__gc class ScreenSaver:public Form {
private:

    PictureBox    *ppbxPhoto;
    IContainer    *pcont;
    Timer        *ptmrPhoto;

    Point        pntMouse;
    Rectangle    recVisible;
    void eventTimerPhotoTick(Object* sender,  EventArgs* e);
    void eventKeyDown(Object *sender, KeyEventArgs *e );
    void eventLoadForm(Object *sender, EventArgs *e );
    void eventMouse(Object *sender, MouseEventArgs *e);
public:
    ScreenSaver();
    ~ScreenSaver();

};



ScreenSaver::ScreenSaver() {

//        this
    this->SuspendLayout();

    this->AutoScaleBaseSize = System::Drawing::Size( 5, 13 );
    this->BackColor = Color::Black;
    this->ClientSize = System::Drawing::Size(292, 273);
    this->FormBorderStyle = FormBorderStyle::None;
    this->Name = "ScreenSaverForm";
    this->Text = "ScreenSaver";        
    this->KeyDown += new KeyEventHandler(this, eventKeyDown);
    this->MouseDown += new MouseEventHandler(this, eventMouse );
    this->MouseMove += new MouseEventHandler(this, eventMouse );
    this->Load += new EventHandler( this, eventLoadForm);    
    this->Bounds = Screen::PrimaryScreen->Bounds;
    this->Cursor->Hide();
    this->TopMost = true;

//        ppbxPhoto
    ppbxPhoto = new PictureBox();
    ppbxPhoto->Name = "pictureBox";
    ppbxPhoto->Location = Point( 46, 86 );
    ppbxPhoto->SizeMode = PictureBoxSizeMode::StretchImage;
    try {
           ppbxPhoto->Image = Image::FromFile( "setup.bmp" );  // put your image file here
      } catch (Exception* e)    {
              Console::WriteLine(S"Image file not found or invalid format");
            Console::WriteLine(e->Message);
        return;
    }

    ppbxPhoto->Location = Point( 46, 86 );
    ppbxPhoto->Size = System::Drawing::Size( 200, 133);
    recVisible = Rectangle( 0, 0, this->Bounds.Width -   ppbxPhoto->Width,
                        this->Bounds.Height - ppbxPhoto->Height );

    ppbxPhoto->TabIndex = 0;
    ppbxPhoto->TabStop = false;

//        timers
    pcont = new System::ComponentModel::Container();
    ptmrPhoto = new Timer( pcont );
    ptmrPhoto->Tick += new EventHandler( this, eventTimerPhotoTick);    
    ptmrPhoto->Interval =  10000;
    ptmrPhoto->Enabled = true;

    this->Controls->Add(ppbxPhoto);
    this->ResumeLayout(false);
}

ScreenSaver::~ScreenSaver() {
    if ( pcont != 0 )
       pcont->Dispose();

    if ( ppbxPhoto->Image != 0 )
       ppbxPhoto->Image->Dispose();

}



void ScreenSaver::eventTimerPhotoTick(Object* sender,  EventArgs* e) {

    Random *prnd = new Random();
       ppbxPhoto->Location = Point( prnd->Next(recVisible.Width), 
                    prnd->Next(recVisible.Height));

    ppbxPhoto->Visible = false;
    ppbxPhoto->Update();
    ppbxPhoto->Visible = true;
    ppbxPhoto->Update();

}


void ScreenSaver::eventKeyDown(Object *sender, KeyEventArgs *e ) {
          this->Close();
}

void ScreenSaver::eventMouse(Object *sender, MouseEventArgs *e)    {
    
            if (!pntMouse.IsEmpty)
            {
                if (pntMouse != Point(e->X, e->Y))
                    this->Close();
                if (e->Clicks > 0)
                    this->Close();
            }
            pntMouse = Point(e->X, e->Y);

}



void ScreenSaver::eventLoadForm( Object *sender, EventArgs* e ) {

    this->Cursor->Hide();
    this->TopMost = true;
    this->Activate();

}



int main( int argc, char* argv[]) {
    if ( argc > 2 ) {
      Console::WriteLine( "Wrong parameter number" );
      return 1;
      }

    if ( argc == 1 ) {
       Application::Run( new ScreenSaver() );
           return 0;
    }

    String *pstr = argv[1];
    String *pstr1 = pstr->ToLower()->Trim()->Substring(0,2);

    if ( String::Compare( pstr1, "/c") == 0 )    {
       Application::Run( new ScreenSaverSetting() );
       return 0;
       }

    if ( String::Compare( pstr1, "/s") == 0 )    {
       Application::Run( new ScreenSaver() );
    }
    return 0;
}    // end main