How would one create the top bar such as in Firefox 4's Orange bar?
I don't want to do my own window class as I still want to be hardware accelerated rather than sofware rendered.
Is there a way to do this?
You'll need to do your own Window drawing, with custom chrome, in order to achieve this type of effect. Here is some sample code showing the technique.
I don't want to do my own window class as I still want to be hardware accelerated rather than sofware rendered.
With WPF, provided you're on a proper rendering tier, the window will still stay hardware accelerated, as WPF uses hardware acceleration for its rendering anyways.
Related
I would like to overlay own content above a Direct3D v9 game (made by a third party).
Overlay Interactive Button
Specifically, I would like to overlay a clickable button control, like Steam does, for instance, though I'm attempting a much simpler interface.
Ideally, I would be able to overlay a WPF button or a Windows Form button or whole UserControl, but if that is not possible then creating a functioning button from primitives would suffice as well.
Text Overlay Working with SharpDX
I have a working sample of overlaying text based on the work of Justin Stenning
Namely with the help of SharpDX.Direct3D9.Font DrawText method
How to Overlay a Button or UserControl with SharpDX
I looked through relevant samples in https://github.com/sharpdx/SharpDX-Samples but was not able to find a way to include or draw native controls with SharpDX
Is it possible?
If not, are there any samples of drawing a clickable button from scratch?
Please bear in mind I'm a novice in the DirectX world :)
Your biggest problem isn't going to be getting the controls to render on top of a DX scene; it's going to be getting them to respond to input afterwards. You can probably rig up a way to get the visuals copied to a DX surface, but I have no idea how you would capture input, translate it, and deliver it back to the WPF components. If it's even possible, it's almost certainly more trouble than it's worth.
There are a couple game-oriented Xaml solutions out there that you may want to check out. WPF for Games is a partial C++ implementation of WPF based on Direct3D, and there's also the proprietary Noesis GUI.
I have to play a video in my C# program and I have to make it so that users can't interact with it, since the PC will be set in a public area.
I tried unchecking Enable Control and I also set uiMode to 'none', but CTRL+P (Pause) still works. This makes me think that other hotkeys do as well.
How can I set it so that you can't do anything with the video?
Edit:
I'm using Winforms, because it seems to be easier. I'm not really a C# developer, I have 0 experience and it resembles VB back from school.
In case you are developing WPF application, there is MediaElement you can use. It doesn't have any control for user interaction. Developer has to built it manually using buttons, progress bar, etc in case he need to provide control for user interaction.
And the usage is very straightforward :
<MediaElement Source="path_to_video-file.mp4" />
For reference :
Sample Application in MSDN
http://www.wpf-tutorial.com/audio-video/playing-video/
PS: It turns out that you are developing winform apps instead of WPF. In case this option still interesting for you to try, you can use ElementHost to embed WPF control in winform.
This is one of many tutorials available on net about how to use ElementHost control : http://tech.pro/tutorial/799/wpf-tutorial-using-wpf-in-winforms.
Have you tried putting another transparent WINDOW in front of the media player (area only if needed). While not totally befinner level, that is not exactly super science either.
As WINDOWS can go in front, that should block any interaction with the media player while - due to transparency - still showing the video.
MAybe even a control works (panel with nothing on it), but given that media player is a native control it may be needed to hide it behind a transparent window.
WOuld help to know what UI technology you use.... Winforms or WPF.
I have a C# application that has an existing WinForm that I now need to display upside down.
The application will be displayed on a touchscreen Windows 7 device. If two people are using the device, one person is viewing it right-side-up while another user will be simultaneously viewing it upside-down. I will need to have one control displayed right-side-up while another control is displayed upside-down, each duplicate forms. Both need to be functional. It is not necessary for the title bar and Windows close, maximize, and minimize to be rotated.
Is there a way to easily rotate this Form and all of its contents without having to rewrite it from scratch?
Unfortunately, rotating controls is not directly possible in WinForms.
At least, not if you want them to retain their functionality. It would be relatively simple to draw the control into a bitmap, rotate the bitmap, and then draw that back to the desired location on the form. But you would obviously lose the ability to interact with the controls. They would just be static representatives of their original selves.
But making functional upside-down controls just isn't going to happen. I mean, you could try to write a bunch of custom drawing code for owner-drawn controls, but you'll still run into a bunch of bugs, corner cases, and compatibility problems. The Win32 controls that WinForms is based on just don't support this. No big surprise, really, considering they were invented some 20–25 years before anyone thought of computer screens that you could carry around in your pocket and rotate in any direction. There is a good reason that UI technologies like WPF came out around the time that touch screens and tablets did.
There are some possibilities that can be explored when it comes to flipping the entire screen, but that's not going to help when you want different controls going different directions. (And I guess it betrays my vantage point as a desktop app guy when I say this, but that just sounds like an incredibly confusing UI.)
If you absolutely have to have this, someone else is going to have to give you another route to hack it, perhaps along the lines of Dhawalk's comment: hosting the WinForms control inside of a WPF app that does provide built-in support for rotated controls. I don't know enough about this to make any concrete suggestions down that path. From a few minutes of searching, it appears that WindowsFormsHost does not actually support rotation transforms, so this may be a non-starter anyway.
I am writing a WPF application using Csharp. Its a touch application that has four browser windows displayed. Two upside down. The screen will be built into a table and lie flat. Four people will use the table - two on one side and two on the other. Thus the need for the upside down (or 180 degree rotation) browsers. I have tried using SilverLight and its Browser Brush. This works to display the browser content upside down BUT to interact with the browser you have to make the browser control active (instead of the Brush) and this turns the content back the right way up. I guess what I need is a Browser control that can be rotated in the normal way and work rotated. IE in Dot Net wont work.
Sascha Barber and Chris Cavanagh have blog posts about an alternative WebBrowser Control based on Chromium that behaves like a real WPF control. Check out http://sachabarber.net/?p=597 and http://chriscavanagh.wordpress.com/2009/08/25/a-real-wpf-webbrowser/
If it is WPF application you can use a simple RotateTransform to rotate controls any degree you want. So upside down should be no problem.
Sample/Tutorial
I'm working on a C# application that needs to use Direct3D in a control in a windows form,
AND (at the same time) fullscreen on a secondary monitor.
Basically, I want a Windows Forms application on one screen with a user-interface to control the graphics, and I'd like to show preview-graphics in a small control, and full-blown superduper megafancy graphics fullscreen on a secondary monitor.
What's the best way to approach this?
(For example, I know XNA can render in a Windows Forms control, but is it possible to then add a fullscreen window on another monitor as well?)
AFAIK the only way to do this is to create 2 complete Direct3DDevices. You create one as fullscreen on monitor 2 and then you create the other as a normal windowed device. This should do what you want. Be warned, though, that you won't be able to share resources between the 2 devices ~(They will need to be created on each) and that performance will be worse than having 2 full screen swap chains on one device.
I know you said Windows Forms, but I will still suggest you use WPF. The advantage is that you will be able to use the same technology for both windows.
WPF is a very nice replacement for traditional windows forms. It also stimulates you to design better solutions with better separation of model and view.
On the other hand, WPF is all rendered on top of directx. It provides you with a nice 3D engine where you can easily implement all sort of things, for some examples, take a look on the following links:
http://www.codegod.de/webappcodegod/render-3ds-3d-models-with-wpf-and-xaml-AID433.aspx
http://www.wpftutorial.net/IntroductionTo3D.html
You can't have true fullscreen like that (as far as I remember), but you can make a border-less window which you can then make as big as the screen itself. It will look as if its fullscreen, but you will still suffer from windowed-mode performance penalties. (they are acceptable)