Messageboxes, tabcontrols, directx oh my

Recommended Posts

Burnt_Fyr    1665

tl,dr: What windowstyles/functions can i use to force a message box to display over directx render windows.

In my current project, I've got a main window, a tab control, a child window for the tab, and it has a child window with a directx swapchain bound to it.

hwndmain
-htab
-htabview1
--h3dview (has directx swapchain)



When the user wants to open a file, I check to see if one is open, and if so pop open a message box to ask if they would like to save the current file. This message box does not pop up over of the childwindow with the swapchain. It will appear if any other tab window is showing,however, eventually each tab will have 1 or more swapchains attached to it. If i press a key that the Messagebox responds to(such as escape or alt) then it is drawn correctly.

Edited by Burnt_Fyr

Share on other sites
cozzie    5029
Good question, I'd like to know too.
I have this only when running in fullscreen, not in windowed mode.

Share on other sites
Burnt_Fyr    1665

If your having issues with fullscreen render modes and message boxes, look here. From what i've read, it will not help me with windowed swapchains

Share on other sites
ongamex92    3255

If you are using WinApi then look at that : http://msdn.microsoft.com/en-us/library/windows/desktop/ms632600(v=vs.85).aspx

---->

WS_CLIPCHILDREN 0x02000000L

Excludes the area occupied by child windows when drawing occurs within the parent window. This style is used when creating the parent window.

That should work because winapi widgets are actually child wnds.

Share on other sites
Burnt_Fyr    1665

If you are using WinApi then look at that : http://msdn.microsoft.com/en-us/library/windows/desktop/ms632600(v=vs.85).aspx

---->

WS_CLIPCHILDREN 0x02000000L

Excludes the area occupied by child windows when drawing occurs within the parent window. This style is used when creating the parent window.

That should work because winapi widgets are actually child wnds.

Clipchildren is already specified for hwndMain, and the message box appears fine on any tab except the one containing the window with the d3dswapchain. And in win32, there are no "widgets", windows, and controls only

Share on other sites
Burnt_Fyr    1665

{bump}

Share on other sites
cozzie    5029
The WS_CLIPCHILDREN option didn't work for me.
I now simply call ShowWindow(..., SW_MINIMIZE);, this works for my needs (including ShowCursor(true)

Share on other sites
Burnt_Fyr    1665

The WS_CLIPCHILDREN option didn't work for me.
I now simply call ShowWindow(..., SW_MINIMIZE);, this works for my needs (including ShowCursor(true)

Share on other sites
cozzie    5029
Jep, but I didn't find anything else to try.
I only have one window (main window), no children

Share on other sites
Burnt_Fyr    1665

::SetDialogBoxMode does not require child windows, so should allow message boxes to popup over your fullscreen d3dwindow

Share on other sites
Burnt_Fyr    1665

Looking at some other projects, it seems that my test project with multiple swapchains has the same issue, so it is unlikely related to the tabcontrol.

Share on other sites
Burnt_Fyr    1665

I've now narrowed down the problem to just a single child window. I've got a test project that creates a main window, and a child window, my renderer is coupled to the child window, and I cannot get a message box to show above the window.

Share on other sites
Burnt_Fyr    1665

This thread pointed me to a solution. I was not using begin/end paint, which caused windows to do... something. I'm still not 100% sure what was going on, as I don't see how it would  have affected z order. Can someone with some more experience shed some light?

Edited by Burnt_Fyr