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 |
---|
// 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