August 2008 - Posts

Windows 7 support for DirectX in WinForms

Three weeks ago, at the start of our beta period for v17.2, I described a fascinating new feature for our data grid in WinForms: sidestepping GDI+ and going straight to DirectX for way faster rendering. At the time I mentioned that, unfortunately, it was limited to apps running under Windows 8 or later.

Well, no more. I am delighted to announce that this new direct-to-DirectX support is now available for grids in apps that run on Windows 7 as well. It’s there in the current version, no need to wait for the next minor.


DevExpress Universal v17.2 released

I am pleased to announce that we have just released DevExpress Universal v17.2. This includes our suites for WinForms, ASP.NET, WPF, as well as DevExtreme. CodeRush Ultimate has also been updated.

For what’s new in this release, please go to this page and read all about the new features and enhancements.

This page shows the Resolved Issues introduced in this release. There are a great number, let me tell you, so apologies if it takes a little while to load the page…

For every major release, no matter how hard we try and minimize the impact, some new features and enhancements are bound to cause a few breaking changes. You can read about the v17.2 breaking changes here.

We are extremely grateful to everyone who provided feedback on our products, who used and tested the beta and provided information on the issues they found, and, of course, to all our customers who use our products every day. It’s simple: we would never be able to produce such robust and full-featured controls without this invaluable help. We are of the opinion that the new enhancements and features in v17.2 will validate your trust in our products.

(PS: worry not, VCL Subscription customers, the new release of that is coming…)

Unified criteria-based filtering in WinForms grids (coming soon in v17.2)

In the v17.2 release of DevExpress WinForms, we’re adding a valuable new feature across our full range of grid-based controls (Data Grid, Property Grid, Pivot Grid and Vertical Grid): a criteria-based filtering system. This filtering system is common across all the grid controls (hence, unified) and uses a criteria-based language to define filters.

// Set active filter for Chart
chartControl.SeriesTemplate.FilterString =
    "[Year]>=2015 And [Company]='DevAV Center' And [Sales]>50000";

The legacy methods in these controls to filter data still work (and you can still use them), but we recommend switching to this new criteria-based filtering. After all, doing so will help your users immeasurably: they only have to learn one way of filtering.

The filtering engine itself receives a few moderate enhancements:

  • a new “Blanks” item in filtering pop-ups;
  • HTML-formatting for filter and data items;
  • new PrepareTemplate, CustomizeTemplate and QueryFilterCriteria events that provide the ability to modify filtering UI templates and criteria expressions.

With v17.2, you can expect one filtering UI enhancement implemented in, say, the Data Grid to be automatically expanded to the rest of the supported data-aware controls, since all of them now share a unified filter editor set.

As an example, the image below illustrates the HTML-formatting applied to a Data Grid pop-up and an editor set generated by the Filtering UI Context component.

Speaking of the Filtering UI Context component, it has been refined as well. The most important enhancement is that it no longer requires you to build a filtering Model anymore. Instead, you associate a target control (e.g., a Grid View) with the component with a couple of clicks at design time and thereby instantly generate all the filtering UI editors required.

Other improvements include:

  • An ability to change editor types and settings directly at design-time

  • Automatic two-way binding: any filtering operation a user performs in the generated UI reflects within the data-aware control’s UI, and vice versa.

  • New filtering editor templates.

Major speed enhancements in WinForms grid (coming soon in v17.2)

Now that we’ve published the beta for v17.2, it’s time to reveal a major new enhancement for our WinForms grid. After reading this, I’m going to bet you’ll be downloading the installer and trying it out for yourself. Let us know your results!

WinForms. It’s been around since the very first days of .NET. Our first control for the run-time, released before .NET had even come out of beta (2002!), was XtraGrid, and we’ve released numerous other controls and suites for the platform since then. And after 15 years, Microsoft has pretty much frozen new development for WinForms. It’s got that taint of “legacy”.

And yet… People are still writing new thick-client apps for Windows. They have existing successful business apps in daily use that need maintaining and enhancing. Indeed, in every major release we provide new functionality and even new controls for WinForms. It is not going away.

MicrosoftDirectXOne big issue is that, compared to 15 years ago, the monitors and display adapters we use for Windows have become faster and have much higher resolution and WinForms has not kept up. We are now talking about and using 4K screens, so called because they are roughly 4,000 pixels horizontally (the main standard is 3840×2160, which is twice the resolution horizontally and vertically of the 1080p standard, or 4 times the number of pixels). Not only that, but the standard for drawing graphics on the screen has changed: it used to be GDI+ but is now DirectX. One of the big differences between the two is DirectX renders graphics through hardware acceleration, whereas the older GDI+ does not; simply put, DirectX is faster. Poor old WinForms still uses GDI+ under the hood.

Given all this, our WinForms team at DevExpress decided to do an experiment, or a spike in development-speak: could they take one of our more complicated WinForms controls—oh, let’s say that original control we wrote, the good old data grid – and change its rendering code to use DirectX and hardware acceleration instead of the “built-in” WinForms GDI+? Would anyone notice the purported speed improvements?

[…time passes, lots of work is done…]

Well? The result? Wow. To be blunt: this is going to revolutionize WinForms.

A big example: one of the most intensive rendering tasks we can do with the data grid is to scroll the rows in the grid pixel-by-pixel. On one of our hi-res test machines, with GDI+ we get about 22 frames per second. In other words, what’s happening in crude terms is for each frame the code is scrolling the data rows by a pixel and then adding another single row of pixels. Every second on the test machine, we can do that 22 times with GDI+. Just about flicker free. With DirectX? 72 FPS, over three times faster. That’s just butter smooth. Our competition, for the same task, is way behind (which also goes to show how well we’d optimized the grid up to now).

With a scroll by page example (where each frame is a new page), we used to get 25 FPS. With DirectX, 35 FPS.

But that’s not all. In essence, all of this work is done way down in the depths of the grid. The DirectX grid is totally compatible with the old GDI+ grid: all that needs to be done is to set a single option. So, you already have an app with our grid but want that extra rendering speed? Recompile with v17.2, set the option, and you’re away. Get on your users’ Christmas card lists again.

There are some limitations that you should be aware of with this new functionality. The biggest one is that it does not work under Windows versions that are older than 8, with Windows 7 being the biggest example. I’d have to say that, given that the end of extended support for Windows 7 is only 2 years away, is not that big of an issue. For these older operating system versions, if you set the DirectX hardware-acceleration option, it’s simply ignored and you automatically just get standard GDI+ speeds. (Ditto, if there’s some issue with DirectX rendering, there’s an auto-fallback to GDI+).

UPDATE 20-Nov-2017: Windows 7 is now supported!

Next, if you are doing any of your own drawing in the grid by using the window handle for example, it’ll be ignored, but then again it’s bad practice. If, however, you do have some custom draw handlers that use e.Graphics , you must now use the e.Cache.* methods instead. We plan to introduce some special tools and/or modes to catch potential problems with custom draw later.

In v17.2, the only control that will have this enhanced DirectX support will be the aforementioned data grid, XtraGrid. We have plans to upgrade our other major controls in future versions (v18.1, v18.2, and so on). Note that we have our ideas on the order to enhance them (tree list, pivot grid, and so on), but we’d love to hear from you what would be most important to you in your WinForms apps.

DevExpress v17.2 beta has just been released!

Just a quick note to say that the beta for DevExpress v17.2 has just been published. Be the first kid on the block that downloads it and tries it out. Usual caveats: it is a beta, so beware. Things work, sure, but there may be some issues that are still undiscovered or still being worked on. Me, personally, I’d advise to not use it in production yet. We would love to hear from you if you do test it out, via our usual support channels.

For information on What’s New in this beta please check out this page. To download the actual install, log in to the Download Center and have at it!

We shall now kick off the publication of blog posts that discuss the new features and enhancements in this release. so stay tuned.

More Posts