I tried it on a new project and then it worked, and tried on another project and it stopped working again. All I did was make a new project, add a pushbutton and an action event and add the two lines of code. Below is the screen grab. Something isn’t right, and it would be nice to figure out a constant way to replicate the inconsistent problem with a feedback case. I’ll see what I can do in the next few hours.
Joost, this declare looks like it is the default setting for the system colours, which defaults to whatever the background colour is for all windows on the computer, and not the specific background colour for a window in Xojo.
To get the background colour of the window in a specific Xojo instance, it looks like the WNDCLASS.hbrBackground data will provide this information, in probably colorindex format for windows (needs to reverse red and blue colours for Xojo). The GetClassInfo declare should be able to get this information from the program. Example 5-3 in the Declares book would need to be modified and updated, and its close to what is needed with a few modifications. I’ve run out of time tonight and let me know if you need a hand with this.
Actually I was looking for that, since I don’t have the hasbackcolor property of the window set to true, in order to make sure the color-settings of the Windows OS will be used for the xojo window, whatever they are.
Coloring the window myself is not an option since some controls, like tabpanel, will not adapt my setting.
I played with “Code 94. Example 5-3: GetClassInfo Code”
Joost, I am running into the same problem that you are seeing and am always getting the hbrBackground colour of zero. When the GetClassInfo (or GetClassInfoEx) function is called, then the program looks for the Windows OS name of the control. This means that a pushbutton1 control has the name “Button”, and a Combobox1 control has a name “ComboboxEx32”. Below is the code that retrieves these names.
Declare Function GetClassName Lib "user32.dll" Alias "GetClassNameW" (hwnd As Int32, lpClassName As Ptr, nMaxCount As Int32) As Int32
Dim MyClassName as new MemoryBlock(255)
Call GetClassName(Window1.handle, MyClassName, 255)
System.DebugLog "MyClassName: " + MyClassName.WString(0)
When I retrieve the name of Window1, which should be “Window”, I get “RBWindow”. This doesn’t have the same name that Windows OS uses and the GetClassInfo function fails. I am not sure how Xojo builds a window, and I am not able to get a successful GetClassInfo call.
Think there is a lot of legacy to deal with here.
The reason I wanted this is that I would like to have Textfields/areas with transparent background. Since this is not possible, I wanted to give the background the same color as the control it is on top of. And as I am using much page-panels, which don’t have an option to set a backgroundcolor other than what’s given by OS, I need the color given to the panel by OS.
Anyway, there are still more important things to get done than this one.