Jump to content

  • Log In with Google      Sign In   
  • Create Account


SlimDX and WPF issue


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
3 replies to this topic

#1 Saoblol   Members   -  Reputation: 143

Like
0Likes
Like

Posted 07 July 2012 - 10:10 AM

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(); window.Show(); 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); VEngine.Run(scene); }[/source]

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, 07 July 2012 - 10:13 AM.


Sponsor:

#2 Gavin Williams   Members   -  Reputation: 642

Like
0Likes
Like

Posted 10 July 2012 - 01:39 AM

I've never worked this out myself, but you can download a working project from http://slimdxcontrol.codeplex.com/ that demonstrates one method using his library which renders SlimDX into a D3DImage control.

#3 Dsmith   Members   -  Reputation: 96

Like
0Likes
Like

Posted 24 July 2012 - 10:48 AM

that is an old and nonworking example.

#4 Saoblol   Members   -  Reputation: 143

Like
0Likes
Like

Posted 08 August 2012 - 04:07 PM

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;
	  this.grid_Viewport.Children.Add(host);
	}

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



Solved!

Found the solution after googling a lot:

Add WindowsFormsIntegration to your references, then:

YourWindow window = new YourWindow(); //Your WPF window class
System.Windows.Forms.Integration.ElementHost.EnableModelessKeyboardInterop(window);

Done :) Hope this helps someone too.

Edited by Saoblol, 22 August 2012 - 01:46 AM.





Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS