SetClassLong_() and #GCL_HBRBACKGROUND

Just starting out? Need help? Post your questions and find answers here.
eriansa
Enthusiast
Enthusiast
Posts: 277
Joined: Wed Mar 17, 2004 12:31 am
Contact:

SetClassLong_() and #GCL_HBRBACKGROUND

Post by eriansa »

I am subclassing a containergadget so that it's background is a pattern brush.

All is well, but, as expected, all subsequent containergadgets share this setting.

How can I avoid that?

tia.
srod
PureBasic Expert
PureBasic Expert
Posts: 10589
Joined: Wed Oct 29, 2003 4:35 pm
Location: Beyond the pale...

Post by srod »

Don't use #GCL_HBRBACKGROUND! :wink:

You are setting a class-style bit here which will effect all instances of this registered window class.

One way around this is to simply process #WM_ERASEBKGND within your container gadget's subclass procedure and use your patterned brush with FillRect_() etc.
I may look like a mule, but I'm not a complete ass.
eriansa
Enthusiast
Enthusiast
Posts: 277
Joined: Wed Mar 17, 2004 12:31 am
Contact:

Post by eriansa »

srod wrote: You are setting a class-style bit here which will effect all instances of this registered window class.

One way around this is to simply process #WM_ERASEBKGND within your container gadget's subclass procedure and use your patterned brush with FillRect_() etc.
Yep, I know.
But if I subclass a window to have a pattern based background, all subsequent windows do not share that.
I can easily give multiple windows different background brushes, but I can't do that with containergadgets... :?

Furthermore : using a callback + FillRect_() is slower than letting windows take care of the redraw.
srod
PureBasic Expert
PureBasic Expert
Posts: 10589
Joined: Wed Oct 29, 2003 4:35 pm
Location: Beyond the pale...

Post by srod »

Purebasic Window's use different registered classes in order to avoid this problem! :wink:

As for #WM_ERASEBKGND being slower than Windows... Windows uses exactly the same method!!!
I may look like a mule, but I'm not a complete ass.
eriansa
Enthusiast
Enthusiast
Posts: 277
Joined: Wed Mar 17, 2004 12:31 am
Contact:

Post by eriansa »

srod wrote:Purebasic Window's use different registered classes in order to avoid this problem!
Ok, I understand. Thanks!

Perhaps a stupid question :
Can't I do the same with the "PureContainer"-class?
srod
PureBasic Expert
PureBasic Expert
Posts: 10589
Joined: Wed Oct 29, 2003 4:35 pm
Location: Beyond the pale...

Post by srod »

Not sure what you mean?

Why not use an image gadget?

Code: Select all

If OpenWindow(0, 100, 100, 640, 600, "ListIcon Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget) And CreateGadgetList(WindowID(0))

  UseJPEGImageDecoder()
  LoadImage(1, #PB_Compiler_Home + "Examples\Sources\Data\terrain_texture.jpg")
  ResizeImage(1, 300, 300)
  ImageGadget(1, 0, 0, 300,300, ImageID(1))
  UseGadgetList(GadgetID(1))
    StringGadget(2, 20,20, 80, 30, "")

  Repeat 
    EventID = WaitWindowEvent() 
  Until EventID = #PB_Event_CloseWindow 
EndIf 
I may look like a mule, but I'm not a complete ass.
Marco2007
Enthusiast
Enthusiast
Posts: 648
Joined: Tue Jun 12, 2007 10:30 am
Location: not there...

Post by Marco2007 »

@Srod: thanx for the tip with UseGadgetList + GadgetID :D
PureBasic for Windows
Post Reply