Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Снегопад. на C++Builder, По экрану монитора неупорядоченно падают 
:(
    Опции темы
Ilgizka
  Дата 10.5.2011, 08:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0417 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.