Bitmap als Fensterhintergrund

Im heutigen Multimedia Zeitalter legen die Anwender großen Wert auf eine optisch ansprechende Software. Meist wird die Software sogar mehr nach dem Erscheinungsbild als nach dessen Fähigkeiten beurteilt. Aus diesem Grund wird hier nun gezeigt, wie man ein Fenster mit einer Bitmap optisch aufpeppt. Damit lassen sich Anwendungen erstellen, die erheblich ansprechender für einen Anwender sind, als die "normalen" Fenster..

Übersicht    

Beispielprogramm

// Beispielprgramm BMPWND
 
#include <owl/applicat.h>
#include <owl/framewin.h>
#include <owl/dibitmap.h>
 
class CDibWindow : public TWindow
{

TDib* dib;

 

public:

CDibWindow(TWindow* parent=0);

~CDibWindow();

 

protected:

void Paint(TDC& dc, bool erase, TRect& rect);

 

DECLARE_RESPONSE_TABLE(CDibWindow);

};
 
DEFINE_RESPONSE_TABLE1(CDibWindow, TWindow)

EV_WM_PAINT,

END_RESPONSE_TABLE;
 
class CApp : public TApplication
{

public:

CApp(const char far* name = 0):TApplication(name) {}

void InitMainWindow();

};
 
CDibWindow::CDibWindow(TWindow* parent)
{

Init(parent, 0, 0);

dib = new TDib("EYE.DIB");

}
 
CDibWindow::~CDibWindow()
{

delete dib;

}
 
void CDibWindow::Paint(TDC& dc, bool erase, TRect& rect)
{

TMemoryDC memDc;

HBITMAP hbmp;

TBitmap *bmp;

 

int w = dib->Width();

int h = dib->Height();

TRect clientRect = GetClientRect();

 

if(dib->BitsPixel() <= 8) { // Bitmap hat eine Palette

bmp = new TBitmap(*dib);

// werden Paletten unterstützt, dann Palette realisieren

if(GetDeviceCaps(dc, BITSPIXEL) <= 8) {

TPalette *pal = new TPalette(*dib);

memDc.SelectObject(*bmp);

dc.SelectObject(*pal);

dc.RealizePalette();

delete pal;

}

else

memDc.SelectObject(*bmp);

}

else {

hbmp = CreateDIBitmap(dc,dib->GetInfoHeader(), CBM_INIT,dib->GetBits(),dib->GetInfo(),DIB_RGB_COLORS);

bmp = new TBitmap(hbmp);

memDc.SelectObject(*bmp);

}

 

for(int y=0; y < clientRect.Height(); y+= h) {

for(int x=0; x < clientRect.Width(); x += w) {

dc.BitBlt(x, y, w, h, memDc, 0,0, SRCCOPY);

}

}

memDc.RestoreBitmap();

delete bmp;

}
 
void CApp::InitMainWindow()
{

SetMainWindow( new TFrameWindow(0, "Bitmap im Hintergrund", new CDibWindow));

}
 
int OwlMain(int argc, char *argv[])
{

return CApp("BMPWND").Run();

}
 

 

Übersicht    

Stand: 29.11.98 22:59:04
© 1998 by Hans Joachim Kiefer, hajokiefer@handshake.de