Новичок
Профиль
Группа: Участник
Сообщений: 4
Регистрация: 5.4.2011
Репутация: нет Всего: нет
|
По экрану монитора неупорядоченно падают снежинки... Хотелось бы сделать прогу еще красивее) Как тут заставить снежинки вращаться(анимация)? Можно еще картинку поставить на форму и чтоб по картинке спускались снежинки)) в MainUnit.h: | Код | #ifndef MainUnitH #define MainUnitH //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> #define MAXFLAKES 500 //Количество снежинок //--------------------------------------------------------------------------- class TMainForm : public TForm { __published: // IDE-managed Components void __fastcall FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift); void __fastcall FormCreate(TObject *Sender); void __fastcall FormDestroy(TObject *Sender); void __fastcall FormActivate(TObject *Sender); private: HDC FhdcScreen,FhdcScreenCopy, FhdcBackBuffer; HBITMAP FScreenCopy, FBackBuffer,FFlake; HBRUSH Fbrush; int FSW,FSH,FFW,FFH; DWORD Fstart,Fcount; TPoint FSnow[MAXFLAKES]; void __fastcall OnIdle(TObject *Sender, bool &Done); // User declarations public: // User declarations __fastcall TMainForm(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TMainForm *MainForm; //--------------------------------------------------------------------------- #endif
|
в MainUnit.cpp: | Код | #include <vcl.h> #pragma hdrstop
#include "MainUnit.h" //--------------------------------------------------------------------------- #pragma package(smart_init)
#pragma resource "*.dfm" TMainForm *MainForm; int RAND_X[]={-1,-1,0,1,1}; int RAND_Y[]={2,1,0,1,2}; //--------------------------------------------------------------------------- __fastcall TMainForm::TMainForm(TComponent* Owner) : TForm(Owner) {
} //--------------------------------------------------------------------------- void __fastcall TMainForm::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { if (Key == VK_ESCAPE) { Close(); }
} //--------------------------------------------------------------------------- void __fastcall TMainForm::FormCreate(TObject *Sender) {
FSW=GetSystemMetrics(SM_CXSCREEN); FSH=GetSystemMetrics(SM_CYSCREEN); FhdcScreen=GetDC(NULL); if (FhdcScreen==NULL) { return; } FhdcScreenCopy=CreateCompatibleDC(FhdcScreen); FhdcBackBuffer=CreateCompatibleDC(FhdcScreen); FFlake = LoadImage(NULL, "flake.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);//Загрзка снежинки if (FFlake == NULL) ShowMessage("ERROR. cant load from file"); BITMAP bm; GetObject(FFlake, sizeof(bm), &bm); FFW=bm.bmWidth; FFH=bm.bmHeight; FScreenCopy=CreateCompatibleBitmap(FhdcScreen, FSW+FFW, FSH); FBackBuffer=CreateCompatibleBitmap(FhdcScreen, FSW, FSH); if (FScreenCopy != NULL) { SelectObject(FhdcScreenCopy, FScreenCopy); }
BitBlt(FhdcScreenCopy, 0, 0, FSW, FSH, FhdcScreen, 0, 0, SRCCOPY); if (FBackBuffer != NULL) { SelectObject (FhdcBackBuffer, FFlake); BitBlt(FhdcScreenCopy, FSW,0,FFW,FFH,FhdcBackBuffer,0, 0,SRCCOPY); SelectObject (FhdcBackBuffer, FBackBuffer); Fbrush=CreateSolidBrush(RGB(300,200,255)); SelectObject(FhdcBackBuffer,Fbrush); } randomize (); for (int a=0; a<MAXFLAKES; a++) { FSnow[a].x=rand()%(FSW-FFW); FSnow[a].y=-rand()%FSH; } BorderStyle=bsNone; ShowCursor(false); SetWindowPos(Handle, HWND_TOPMOST, 0, 0, FSW, FSH, SWP_SHOWWINDOW); Application -> OnIdle = OnIdle; Fcount=0; Fstart=GetTickCount();
} //--------------------------------------------------------------------------- void __fastcall TMainForm::FormDestroy(TObject *Sender) { Application -> OnIdle = NULL; SetWindowPos(Handle, HWND_TOPMOST, MainForm -> Left, MainForm-> Top, MainForm-> Width, MainForm-> Height, SWP_SHOWWINDOW); ShowCursor(true); DeleteObject(Fbrush); DeleteObject(FFlake); DeleteObject(FBackBuffer); DeleteObject(FScreenCopy); DeleteDC(FhdcBackBuffer); DeleteDC(FhdcScreenCopy); ReleaseDC(NULL, FhdcScreen); } void __fastcall TMainForm::OnIdle(TObject*Sender,bool&Done) { Done=false; if (GetTickCount()>Fstart+10) { BitBlt(FhdcBackBuffer,0,0,FSW,FSH,FhdcScreenCopy,0,0,SRCCOPY); for (int a=0;a<MAXFLAKES ;++a) { FSnow[a].x+= RAND_X[rand()%5]; FSnow[a].y+= RAND_Y[rand()%5]; if(FSnow[a].y>FSH) FSnow[a].y=-rand()%(FSH/4); if (FSnow[a].x<-FFW) FSnow[a].x=FSW; else if(FSnow[a].x>FSW) FSnow[a].x=FSnow[a].x-FSW; if( FSnow[a].y>=-FFH) //TransparentBlt(FhdcBackBuffer,FSnow[a].x,FSnow[a].y,FFW,FFH,FhdcScreenCopy,FSW,0,FFW,FFH,0x0); BitBlt(FhdcBackBuffer,FSnow[a].x,FSnow[a].y,FFW,FFH,FhdcScreenCopy,FSW,0,0x00E20000); } BitBlt(Canvas->Handle,0,0,FSW,FSH,FhdcBackBuffer,0,0,SRCCOPY); Fstart=GetTickCount(); } }
//---------------------------------------------------------------------------
void __fastcall TMainForm::FormActivate(TObject *Sender) { ShowWindow(Handle, SW_SHOW); } //---------------------------------------------------------------------------
|
Присоединённый файл ( Кол-во скачиваний: 4 )
________.rar 365,61 Kb
|