When I make a DocumentWindow transparent 'setOpaque(false)' and then load in a VST plugin, the plugin does not show, only the title bar shows. I am doing this so I can have a window with rounded corners for showing plugins.
Any advice?
When I make a DocumentWindow transparent 'setOpaque(false)' and then load in a VST plugin, the plugin does not show, only the title bar shows. I am doing this so I can have a window with rounded corners for showing plugins.
Any advice?
The way that win32 does transparency is a total bodge, and transparent windows don't behave like normal ones - they can't contain child windows. So you can't use them for holding plugins.
The best you could do is to float a transparent title bar next to a normal plugin window and move them around together.
Ok, you convinced me not to mess with the transparent window for now, but how do you make a window float above the main window, but disappear when another app is made active? In other words, behave like the main app window.
You can check Process::isForegroundProcess to see whether you're in front, or react to focus gain/loss events on your windows.
Well gain/loss events on your windows would be nice but it doesn't work. If you have you app open and click any other app to open it, gain/loss events to the main window do not get called. Am I missing something?
You can't always get a reliable event to tell you that the front process has changed - in my code I ended up having a timer to poll it occasionally.
This has been requested by many people. Host plugins need to be above the main window but not above the other apps. I am looking into the WM_ACTIVATEAPP in windows, about to hack the juce code. If this mesasage were directed to the main window, it could hide/show all of the setAlwaysOnTop windows. Am I correct?
I found a simple solution.
In the main window override:
void globalFocusChanged (Component *focusedComponent)
{
static bool bInFront = true;
if (Process::isForegroundProcess() != bInFront)
{
bInFront = Process::isForegroundProcess();
pAudioEngine->ShowHideAllWindows (bInFront);
if (bInFront)
toFront (true);
}
}
You could add a window type floating ( for plugins, toolbars, etc. ) and have have the desktop hide/show them on this call.