Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Вывод картинки произвольной формы без окна


Автор: Sl@va 27.10.2006, 21:00
Здравствуйте !
Ни кто не знает, как вывести на экран картинку произвольной формы, но только чтобы она была без всякого окна ?
Так например во многих программах, например такой как The Bat ! при старте на некоторое время выводится картинка, при этом она не находится ни в каком диалоговом окне, а просто выводится на экран.
Ни кто не знает, как такое можно сделать ?
Заранее спасибо.

Автор: SergeCpp 27.10.2006, 23:17
Посмотрите описание SetWindowRegion в MSDN...

http://www.codeproject.com/csharp/customforms.asp?df=100&forumid=94801&exp=0&select=904978

Автор: darkart 27.10.2006, 23:30
Писал на 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. ну и проект...

Автор: a_n_d_y 27.10.2006, 23:58
2 Sl@va, 
Как ни крути, а оаошко создавать таки-придется))))

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)