Писал на C++ Buildere, но смысл понятен, создание splash-заставки из bitmapa, main.h:
| Код | //---------------------------------------------------------------------------
#ifndef mainH #define mainH //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> //--------------------------------------------------------------------------- class TfrmMain : public TForm { __published: // IDE-managed Components void __fastcall FormCreate(TObject *Sender); void __fastcall FormClose(TObject *Sender, TCloseAction &Action); void __fastcall FormPaint(TObject *Sender); void __fastcall FormDblClick(TObject *Sender); private: // User declarations public: // User declarations Graphics::TBitmap* bmp; __fastcall TfrmMain(TComponent* Owner); void __fastcall FreeRegion(HRGN& hRgn); void _fastcall SetRegion(void); }; //--------------------------------------------------------------------------- extern PACKAGE TfrmMain *frmMain; //--------------------------------------------------------------------------- #endif
|
main.cpp:
| Код | //---------------------------------------------------------------------------
#include <vcl.h> #pragma hdrstop
#include "main.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" #define BMPNAME "splash.bmp" TfrmMain *frmMain; //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- void __fastcall TfrmMain::SetRegion(void) { HRGN hTempRgn=NULL,hRgn=NULL; bmp->LoadFromFile("splash.bmp");//загружаем картинку в BITMAP int iTransporentColor=RGB(255,255,255);//задаем не используемый цвет int iWidth=bmp->Width;//узнаем ширину картинки int iHeight=bmp->Height;//узнаем высоту картинки Width=iWidth;//задаем ширину формы Height=iHeight;//задаем высоту формы Position=poScreenCenter;//устанавливаем позицию hRgn=CreateRectRgn(0,0,Width,Height);//создаем прямоугольный регион по размерам формы for(int i=0;i<iWidth;i++) for(int j=0;j<iHeight;j++) if(bmp->Canvas->Pixels[i][j]==iTransporentColor)//если цвет точки BITMAPA отмечен как неисп. { hTempRgn=CreateRectRgn(i,j,i+1,j+1);//создаем регион-точку CombineRgn(hRgn,hRgn,hTempRgn,RGN_DIFF);//вычитаем регион-точку из основного DeleteObject(hTempRgn);//освобождаем ресурсы hTempRgn=NULL; } SetWindowRgn(Handle,hRgn,TRUE);//устанавливаем регион DeleteObject(hRgn);//освобождаем ресурсы hRgn=NULL; } //--------------------------------------------------------------------------- __fastcall TfrmMain::TfrmMain(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TfrmMain::FormCreate(TObject *Sender) { bmp=new Graphics::TBitmap();//создаем объект TBitmap if(FileExists(BMPNAME))//если файл с именем BMPNAME существует { SetRegion();//установить регион } } //---------------------------------------------------------------------------
void __fastcall TfrmMain::FormClose(TObject *Sender, TCloseAction &Action) { delete bmp;//удаляем BITMAP } //---------------------------------------------------------------------------
void __fastcall TfrmMain::FormPaint(TObject *Sender) { if(FileExists(BMPNAME))//если файл с именем BMPNAME существует BitBlt(Canvas->Handle,0,0,Width,Height,bmp->Canvas->Handle,0,0,SRCCOPY);//копируем BITMAP на форму } //---------------------------------------------------------------------------
void __fastcall TfrmMain::FormDblClick(TObject *Sender) { Close();//выход при двойном клике } //---------------------------------------------------------------------------
|
P.S. ну и проект... |