🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: de.comp.lang.c++
Article #1960

Re: Handle probleme bei Hintergrundbitmap (OWL C++)

#1960
From: Carsten Kuensken
Date: Sat, 30 Mar 1996 23:50
163 lines
4283 bytes
Hans-Heiner Schlachter <schl@bipa.HL.Siemens.de> wrote:

>Hallo da draussen,
>Ich habe hier ein kleines Codefragment fuer die Anzeige
>einer Hintergrundbitmap, wie sie auch unter dem Windows-
>Setup erscheint. Leider ist es mir nicht moeglich, diese Bitmap
>in das aktuelle Fenster anzuzeigen (sie wird immer zuerst geladen).
>Die Ursache liegt wahrscheinlich in dem falsch uebergebenen 
>Windowshandle. Kann mir jemand darauf eine Antwort und Loesung geben?
>Vielen Dank im voraus
>               Matthias Gottwald
>e-mail an: werkstu@bipd.hl.siemens.de

>//*********** Code ****************************************************
>#include <owl\owlpch.h>
>#include <stdio.h>
>#include "test.rh"

>#define APP_NAME    "INSTALL"        // Name der Anwendung

>class TGDIWindow : public TWindow
>{
>public:
>	 TGDIWindow();
>	 virtual ~TGDIWindow();

>protected:

>	 virtual void SetupWindow();

>private:
>};

>TGDIWindow::TGDIWindow() : TWindow(0,0,0)
>{
>	 Invalidate();
>	 UpdateWindow();

>	 TClientDC dc(*this);

>	 TBitmap bmp(*GetModule(),BMP_PIC);

>	 TMemoryDC memdc(dc);
>	 memdc.SelectObject(bmp);

>	 dc.BitBlt(20,20,bmp.Width(),bmp.Height(),memdc,20,20,SRCCOPY);

>	 memdc.RestoreBitmap();
>}

>void TGDIWindow::SetupWindow()
>{
>	TWindow::SetupWindow();
>}

>TGDIWindow::~TGDIWindow()
>{
>}

>class TGDIFrameWindow : public TFrameWindow
>{
>public:
>	 TGDIFrameWindow (TWindow* parent, const char far *title = "",
>							  TWindow *clientWnd = 0,
>							  BOOL shrinkToClient = FALSE)
>		  : TFrameWindow (parent, title, clientWnd, FALSE)
>};

>class TGDIApp : public TApplication
>{
>public:
>	 TGDIApp() : TApplication() {}

>	 void InitMainWindow()
>	 {
>		  SetMainWindow(new TGDIFrameWindow(0,APP_NAME,new TGDIWindow));
>	 }
>};


>//#########################################################################
>// M A I N
>//#########################################################################
>int OwlMain(int, char**)
>{
>  return TGDIApp().Run();
>} 


Hallo Hans-Heiner

Die Anzeige deiner Bitmap gehört nicht in den Konstruktor. Denn in
diesem Moment existiert dein Fenster noch gar nicht !!!!!
So wie du es versuchst wird durch *this ein Handle auf den Desktop
erzeugt. Sprich: Deine Bitmap wird direkt in den Desktop kopiert und
nicht in dein Fenster !

Versuchs mal so:

void TGDIWindow::SetupWindow()
{
	TWindow::SetupWindow();
	
	<< Anzeige deiner Bitmap >>
}

Die Aufrufe von Invalidate und UpdateWindow (???) kannst du dabei
streichen, da dein Fenster sowieso neu gezeichnet wird.

Allerdings wird deine Bitmap so nur einmal angezeigt!
Normalerweise gehört die Bitmap Anzeige In TGDIWindow::Paint(..)
Diese Funktion wird (automatisch) immer dann Aufgerufen, wenn dein
Fenster (oder ein Teil davon) neu gezeichnet werden muß.(siehe Online
Hilfe für die Parameter usw...)

Also in etwa so:

...........................
class TGDIWindow : public TWindow
{
public:
	 TGDIWindow();
	 virtual ~TGDIWindow();

protected:
	<<       virtual void Paint(TDC&, BOOL, TRect&);    >>
	 virtual void SetupWindow();

private:
};

TGDIWindow::TGDIWindow() : TWindow(0,0,0)
{}

<<<<< 

void TGDIWindow::Paint(TDC &dc,BOOL,TRect &rc)   // siehe Hilfe

{
	 TBitmap bmp(*GetModule(),BMP_PIC);
	 TMemoryDC memdc(dc);
	 memdc.SelectObject(bmp);
	 dc.BitBlt(20,20,bmp.Width(),bmp.Height(),memdc,20,20,SRCCOPY);
	 memdc.RestoreBitmap();
             .... Was sonst noch so gezeichnet werden muß ......
}

>>>>>>>>>

void TGDIWindow::SetupWindow()
{
	TWindow::SetupWindow();
}

TGDIWindow::~TGDIWindow()
{
}
.......................

Ich hoffe das hilft etwas. Wenn du sonst noch fragen hast, schreibe
mir einfach.

Tschau Carsten (carsten.kuensken@marl.netsurf.de)
Technical Details
Message-ID: <4jke6t$qgi@ra.ins.de>
Path: arc1-ca.pugleaf.net!ins.net!news
References: <4jgass$1h2@rudi>

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!ins.net!news
From: carsten.kuensken@marl.netsurf.de (Carsten Kuensken)
Newsgroups: de.comp.lang.c++
Subject: Re: Handle probleme bei Hintergrundbitmap (OWL C++)
Date: Sat, 30 Mar 1996 23:50:49 GMT
Organization: INS - Informationstechnik, Netzwerke und Systeme Vertriebs-GmbH
Message-ID: <4jke6t$qgi@ra.ins.de>
References: <4jgass$1h2@rudi>
NNTP-Posting-Host: port13.castrop-rauxel.netsurf.de
X-Newsreader: Forte Free Agent 1.0.82