🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: de.comp.lang.c++
4 messages
4 total messages Started by Hans-Heiner Schlachter Fri, 29 Mar 1996 09:35
Handle probleme bei Hintergrundbitmap (OWL C++)
#1934
Author: Hans-Heiner Schlachter
Date: Fri, 29 Mar 1996 09:35
85 lines
2427 bytes
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();
} 
Re: Handle probleme bei Hintergrundbitmap (OWL C++)
#1960
Author: 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)
Re: Handle probleme bei Hintergrundbitmap (OWL C++)
#1982
Author: js
Date: Wed, 03 Apr 1996 19:07
8 lines
773 bytes
Geht es auch irgendwie, wenn das Fenter von TDialog abgeleitet ist?
Ich habe Probleme an DC eines Dialogfensters ranzukommen. Paint wird
dort ja offensichtlich dort nicht aufgerufen. Oder andersherum, wie
bekomme ich ein TFrameWindow modal?

Danke !

Juergen
Re: Handle probleme bei Hintergrundbitmap (OWL C++)
#1986
Author: Carsten Kuensken
Date: Wed, 03 Apr 1996 22:58
18 lines
1020 bytes
s1547@fb1.fhtw-berlin.de (js) wrote:

>Geht es auch irgendwie, wenn das Fenter von TDialog abgeleitet ist?
>Ich habe Probleme an DC eines Dialogfensters ranzukommen. Paint wird
>dort ja offensichtlich dort nicht aufgerufen. Oder andersherum, wie
>bekomme ich ein TFrameWindow modal?

>Danke !

>Juergen

Hallo Jürgen.

Dein Window bekommst du mit dem ExStyle WS_EX_DLGMODALFRAME modal.  

Für Borland C++ siehe unter TWindowAttr / ExStyle.

Tschau Carsten (carsten.kuensken@marl.netsurf.de)
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads