• Advertisement
Sign in to follow this  

SlimDX and WPF issue

This topic is 2048 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hi, I'm currently switching my project from WindowForms to WFP, but I'm having problems with rendering into an WPF Image Control.

This is what I do to get the Handle of the Image Control, but instead the scene is rendered across the whole window, not just the specified Image area

[source lang="csharp"]static void InitializeTileEditor()
WaterScene scene = new WaterScene();

window = new MainWindow();

HwndSource source = (HwndSource)HwndSource.FromVisual(window.image_Viewport);
//IntPtr viewportHandle = new WindowInteropHelper(Application.Current.MainWindow).Handle;

VEngine.Initialize(window, source.Handle, 1280, 720, 60, true);

I tried two ways of acquiering the handle, but both had the same result.

Any Ideas how I get the exact handle of the Image Control?

Edit: The handle will be used in the 3D Intialization of SlimDX to create the factory

[source lang="csharp"]factory.SetWindowAssociation(viewportHandle,
WindowAssociationFlags.IgnoreAll |
WindowAssociationFlags.IgnoreAltEnter);[/source] Edited by Saoblol

Share this post

Link to post
Share on other sites
Solved this for now by hosting a WindowForm Picturebox in the WPF Grid element, not very pretty but it does the job and doesnt have an impact on performance. Will probably look into it again when im closer to release, but I'd like to prioritize on other stuff first.

Code example for anyone who wants to do it the non-pretty way too:

private void window_TileEditor_Loaded(object sender, RoutedEventArgs e)
System.Windows.Forms.Integration.WindowsFormsHost host = new System.Windows.Forms.Integration.WindowsFormsHost();
this.viewport = new System.Windows.Forms.PictureBox();
this.viewport.MouseEnter += new System.EventHandler(this.viewport_MouseEnter);
this.viewport.MouseLeave += new System.EventHandler(this.viewport_MouseLeave);
this.viewport.Width = 1280;
this.viewport.Height = 720;
host.Child = this.viewport;

[s]Sadly, Im encountering another problem with WPF just after getting rid of this one. Since I need to update the Engine over and over, I cant use window.ShowDialog() since that halts the application, and window.Show() works but when using that, some of the WPF controls don't work properly anymore (cant type into text fields, but still can paste into them and delete stuff, just not type new characters directly, stuff like that)

Im already calling the Application.DoEvents() method but some stuff still doesnt work. Anything I forgot to do there?

Thanks again[/s]


Found the solution after googling a lot:

Add WindowsFormsIntegration to your references, then:

YourWindow window = new YourWindow(); //Your WPF window class

Done :) Hope this helps someone too. Edited by Saoblol

Share this post

Link to post
Share on other sites
Sign in to follow this  

  • Advertisement