[code] Win32 Moving/Showing/Hiding Toolbars and Dialogs
-
Good question I don't know the answer to, but wouldn't the reliable way be to have the dialog send a message back to ruby when it's ready?
Or can you change the dialog to a toolwindow before you .show() it? Will need to test.
-
Maybe the .show event of the dialog triggers as it's displayed? But I'm not sure if it wait for the HTML - which you do not want - as that will lag.
And can you do anything before calling show? You need a handle to the window - how are you getting that at the moment?
-
What does it mean when I get a negative value for a window style? How do I decode it into it's positive representation?
-
From GetWindowLong?
-
yeah.
s = get_style("Ruby Console") -1798569916
-
hm....
Are you receiving the data in the correct data type?
-
Turns out the negative return value is not a problem - I just wasn't using it right.
-
@thomthom said:
Maybe the .show event of the dialog triggers as it's displayed? But I'm not sure if it wait for the HTML - which you do not want - as that will lag.
And can you do anything before calling show? You need a handle to the window - how are you getting that at the moment?
Using FindWindow - which is a basic search by window name and class.
-
For a WebDialog, I couldn't find a handle until it was shown. I used EnumWindows and EnumChildWidows to locate it.
But I didn't see a lag when applying the ToolWIndow class immediately after .showing the webdialog.
-
Neat!
-
The Win32API.so file does not support the use of callbacks needed by EnumWindows and EnumChildWindows. So I have had to move to win32/api.so, which does support callbacks. But this will also allow more interesting things to be done, such as finding resizing Sketchup by its drawing area, and sending values to the Measurements box via a plugin.
-
When there is multiple SketchUp windows open - how do you find the one you want?
-
Hopefully, the window titles are different. If not, I'm not sure.
-
So you look for windows with "<filename> - SketchUp (Pro)"
-
Too fast... here's how to get the exact name. (But is_pro? is for windows 7+)
def su_window_name pro = Sketchup.is_pro? ? " Pro" ; "" if ((title = Sketchup.active_model.title).empty?) return ("Untitled - SketchUp" + pro) else return (title += ".skp - SketchUp" + pro) end end
-
But when there is two untitled windows there could be problems?
-
Yes, but in that case how would any program know which one the user meant?
You can find all of the matching windows. It's just hard to know which the user meant to use.
-
@jim said:
Yes, but in that case how would any program know which one the user meant?
If you'd created the window then you'd get the handle from there. (Would be nice if the API could expose the handles in the Ruby API)
I suppose that if it is possible to get an array of matching windows one could filter out the window you want by checking if one of them is the active - if it's the active SU window you want. (Assuming SU is the currently active window)
Or maybe by Z-Order? Assuming that the top most is the most recent - again if that is what you want... -
In most cases you'd get the window the user is working on, right?
So how about
GetForegroundWindow - then, in case one of the toolbars or webdialogs are the active window, iterate down the hierarchy using GetParent - checking for matching window title? -
If you have an API which supports EnumWindows, you can use GetProcessId and GetWindowThreadProcessId to filter on windows in the current process.
Advertisement