Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод картинки произвольной формы без окна 
:(
    Опции темы
Sl@va
Дата 27.10.2006, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 22.11.2004
Где: Нижний Новгород

Репутация: нет
Всего: нет



Здравствуйте !
Ни кто не знает, как вывести на экран картинку произвольной формы, но только чтобы она была без всякого окна ?
Так например во многих программах, например такой как The Bat ! при старте на некоторое время выводится картинка, при этом она не находится ни в каком диалоговом окне, а просто выводится на экран.
Ни кто не знает, как такое можно сделать ?
Заранее спасибо.
PM MAIL WWW ICQ Skype   Вверх
SergeCpp
Дата 27.10.2006, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


 
**


Профиль
Группа: Участник
Сообщений: 955
Регистрация: 8.8.2005
Где: At Home

Репутация: 15
Всего: 124



Посмотрите описание SetWindowRegion в MSDN...

И вот ещё тут...
PM MAIL WWW ICQ   Вверх
darkart
Дата 27.10.2006, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 379
Регистрация: 9.11.2005

Репутация: 2
Всего: 31



Писал на 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. ну и проект...

Присоединённый файл ( Кол-во скачиваний: 9 )
Присоединённый файл  BitmapRegion.rar 16,31 Kb
PM MAIL WWW ICQ Skype GTalk   Вверх
a_n_d_y
Дата 27.10.2006, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 23.10.2006
Где: Ukraine::Kiev

Репутация: 1
Всего: 1



2 Sl@va, 
Как ни крути, а оаошко создавать таки-придется))))
PM MAIL ICQ Skype MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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