Question: How do you do UI development on Windows CE ?


Windows CE supports an extremely diverse set of embedded devices, ranging from the obvious, and well known devices such as Windows Mobile, Personal Navigation Devices, robotics, set top boxes, pig slicing machines (still need to see if I can get a video of this!), and a whole range of other interesting devices.

Many of these devices require some level of user interaction, and therefore a user interface of some kind – Windows CE ships with the “Standard Shell”, which provides a Windows 95/desktop experience, there’s also the Thin Client shell, Command Shell, and Network Media Device UI.

But, what if you’re building a device that doesn’t easily fit into one of the categories above? – perhaps a Set Top Box, or GPS Navigation device, each of these needs a custom user experience that doesn’t fit with one of the standard shells that we ship with Windows CE, how do you develop a UI for these devices?

And now, the questions…

  1. Do you develop your applications/UI using C/C++/Win32, MFC, or C#/VB (.NET Compact Framework) ?
  2. If you are using C/C++/Win32 then are you considering moving to C#/VB at some point in the future? – if not, why not ?
  3. What are your top 3 pain points when creating new CE based products as far as the UI development API / framework is concerned ( is it too hard to write win32, I need cooler UI, etc ).
  4. What are your UI needs going forward ( wizabang flashy UI / simple surfaces / I don’t care about UI /etc )
  5. Would you prefer new/interesting Win32 UI controls (if so, what controls are we missing?), or support for something like Silverlight ?
  6. Is the WPF/Silverlight Designer/Developer experience useful for your devices?

– Mike

Comments (17)

  1. Rama says:

    Hi Mike

    I am trying to consider many different options for the UI development on Win CE for a mobile robot with Kiosk. I definitely need a cool UI with lot of Jazzy stuff preferably cooler stuff that is available on WPF or Silverlight.

    I am not sure whether I am asking for more considering the small footprint that these applications must have.

    Do you think it is feasible?

    Thanks

    Rama

  2. David White says:

    We are struggling with that right now. A lot of head units use WinCE underneath and we are writing software for them. It is mostly UI interaction. We are wrestling right now with the wxWidgets, MFC, ATL, or .Net question. I am fighting with my partners right now on it. If we look at devices kind of in that class like Garmin we here they run wxWidgets. It just seems as if there is no clear UI guidance on the Windows Mobile platform. Or if there is I can not find it.

    What would you recommend for a very UI intensive application?

  3. pdohara@smallwarz.org says:

    The project I am working on has a different UI.  The device will run a Compact Framework application, but I am writing a Shell replacement.  Since it must be able to load at start up, I am writing a native app in C++.  Since the application development is actually happening in CF, I am not using any additional libraries such as ATL or MFC.  The good news is that the UI is not very interactive.  There is some network monitoring, but mostly the new Shell is responsible for letting the user know what is going on when the application is not running.  The other decision we have made is to avoid things that will need to be translated.  As such I have been digging into the Windows CE Imaging APIs.

    Any suggestions on a good resource for gaining a better understanding of these APIs?

    Pat O

    Cognex, Corp.

  4. Jimmy Grewal says:

    Hi Mike,

    Rich UI development on WinCE 5/6 is currently a real pain.  At present, we are using .NET Forms to achieve results which would be much better, easier to implement, and perform better if using a WinCE native WPF or Silverlight implementation.

    Bringing a modern UI framework to WinCE 6 is critical if you want people to build consumer devices with rich user experiences using this platform.  Most of the recent consumer devices I’ve seen running WinCE and having compelling user interface have built their UI using Flash or Flash Lite, which is less than ideal.

    Since the .Net MF team has already implemented something, and there has been a demo of Silverlight on Windows Mobile 6, I’m hoping that Silverlight or WPF for Windows CE 6.0 is just around the corner.

    -Jimmy.

  5. Kris Benson says:

    Hey Mike,

    I wasn’t sure how to contact you–other than leaving a comment on your blog. SO, here it is! I went to high school with Shingo Suga when he was an exchange student in Fargo, ND. We’ve lost touch over the years, and I am interested in getting back in touch. If you could please send him my email address, I’d really appreciate it. I’d love to hear from him. Thank you so much!

    Kris

    kbenson43@gmail.com

  6. I think that Silverlight is a very promising tool to develop rich user interfaces quickly and simply.

    I hope that the CE version could be interfaced with both .NET and C/C++ based components to be able to develop quickly (with .NET) but also to develop fast visualization controls without needing a pentium 4 class processor to handle them.

    And I hope that it’s runtime won’t eat half or my RAM and flash!

    I would like also to see more ways to customize the low-level UI drawing routines.

    There are some customizable features but implementing them is not that easy and some controls (edit box, combos) don’t support customization or support it in a very limited way.

    Being able to customize the UI at a low level will allow reuse of the UI of OS components and will also allow to integrate third party applications with a coherent look and feel, avoiding the need to re-implement some features only because their UI don’t fit the required graphic style.

    I would like also to have an easy way to customize resources inside PB to let those configuration dialogs fit my 320×240 screen πŸ™‚ (and not only a 240×320 one…).

    IMHO UI customization is a very important issue both for device "branding" ("You mean that those buttons will remain gray and not integrate in our 1Mega$ corporate trademarked pink-orange toned graphics style?") and for user friendliness ("do you think I’ll be able to click those small buttons while working at -20C wearing two pairs of glowes or that I’ll have to come back inside my tent only to change the device IP address?").

    On the other side I hope that people will focus on ease of use and not only on graphical effects and features.

    For example I love the wii (may I talk about it here? :P) because it put focus not only on graphics but on the way you interact with games, and after you played with it there are no gigapolygons accelerated grapics engines that can give the same amusement, IMVHO.

    I hope to see this kind of "interaction" technologies applied on more devices, and CE could be a great OS to support this kind of features. I would like to have some free time to write a wii controller driver πŸ™‚

  7. kdarling says:

    We use DHTML inside a custom browser shell written in C#.

    IE 6 is very powerful, and a lot of neat UI stuff can be done with it.  If WM also had IE 6, that would make life so much easier.

    MS was way ahead with HTAs and behaviors, then dropped the ball.  Now everyone’s trying to make a platform based off HTML/Javascript.

    If IE had SVG support, that’d be even better. Also looking forward to Silverlight mobile.  Also want to know progress of using widget engine on mobile.

  8. gkendall says:

    We have the same scenario as kdarling – DHTML in a custom browser shell.  SVG support would be a great benefit.

  9. Lekhnarayan Prasad says:

    Hi,

    I am searching the net for a weak to download the trial pack or free version of WINDOWS CE FOR VISUAL C or C++ but am enable to find out. We are having licence of Visual Stdio .NET 2005 licence but it dose not have the option of WIN CE 5.0 option in Visual C++ which is my area of intrest. Can anyone help me out?

  10. Dan McCarty says:

    I’ve done or worked on large applications for CE in:

    – MFC

    – Win32

    – .Net CF

    MFC makes life a little easier, but MS support for the CE version is nonexistant and the changes from v4 in CE5/eVC to v8 in CE6/VS2005 are undocumented.  I wonder if MFC development is as dead end?

    Win32 will always be around but the usual caveats apply.  Prepare to spend most of your time doing memory management, string manipulation and manual resource handling.

    .Net is handy for little utilities (I’m sure Chris Tacke will disagree here) but falls down as a large-scale app.  It’s far too slow and ponderous for a mobile device, even with the Compact version.  (I’ve only played with the Micro version so I can’t speak to that.)  (For reference, I’ve worked with what I understand was the largest .Net implementation on CE.  Maybe the device was underpowered.)  And from the viewpoint of someone who works with PB a lot, including .Net 1.0/2.0 means waiting 10 – 15 more minutes for each build.  The first thing I do with our platform is pull it out, even if it means I can’t run a lot of our utilities.

    My current app is using none or all of the above, depending on how you look at it: a container app using Win32, a plug-in style architecture (plugins can be written in native code…Win32/MFC/ATL) that mostly runs a web browser which displays content in HTML, AJAX and Flash.  It’s an interesting architecture, though it remains to be seen if it’s production grade.

    (Also, somewhat tangentially, VS2K5 is a great editor but it’s still a 900lb gorilla.  eVC, on the other hand, is quirky and unsupported, but so fast by comparison and much more rewarding for development.)

  11. mikehall says:

    Lekhnarayan, Windows CE 6.0 is the current shipping version of the product, this is a plug-in to Visual Studio 2005 – the download can be found here – http://www.microsoft.com/windows/embedded/eval/trial.mspx

    The Windows CE 5.0 product was a stand-alone tool that wasn’t integrated into Visual Studio.

    – Mike

  12. Christopher Matthews says:

    I have been developing a UI for Windows CE 6 for the passed year. We use a QVGA display and have a wheel and 6 buttons to allow user input. At first it was very slow as I was treating it as if I was developing on a powerful PC, using lots of custom controls. As soon as I realised that the bottle neck was displaying the information to screen, I used GDI and drew the images and text myself and now have a super fast user interface!

    I do find it quite annoying when you expect simple things to be included in the basic license that are not though. For instance I was hoping to display help using the web browser control, but seeing as it means getting the full license at a cost of $9 I have now got to develop my own html handler.

  13. GamleErik says:

    Another alternative to MFC is Qt for Windows CE / Windows Mobile. It’s a cross-platform framework, so (assuming you have a Qt project) you can basically take any C++ project and recompile it for your device and it will use the native libs. It also supports SVG and some pretty advanced Canvas stuff – but unfortunately it’s not commercially released yet..

  14. Sean says:

    A couple of comments:

    Agree with comments above on the inappropriateness of .NET CF / Win32 / MFC for WINCE ARM based product.

    Your best option is Ajax/browser UI,  WTL, or Qt for Windows CE by Trolltech

    Even if you do somehow get a UI that performs marginally well on an ARM processor under WinCE, you are still left with a really disappointing infrastructure below the UI.

    What if you want an audio/video framework to handle streaming/playback of media content?  Will it work well with a kludged/hacked UI?  You will probably have to roll your own.  

    Part of the problem is the closed nature of WinCE development.   You don’t have a Gstreamer framework, DBUS IPC, or Telepathy IM engine you can role in and integrate with Glib/Gobject based UI.  This is were community based development for embedded Linux is at a great advantage.

    There is a reason why when you want to differentiate you role your own.  WinCE is great for cookie cutter designs and rolling out products fast on reference designs.  But when you really want to do something different, it is nice to have community based projects like those you see for embedded Linux.  There are few if any such eco systems for WinCE.

    Sean

  15. I don’t want to start a linux vs Windows war, but I don’t understand what’s "closed" in WinCE development.

    Using Windows Media Player or the low level Direct Show infrastructure inside a Windows application does not look like a nightmare. And also the browser based UI can be implemented in .NET or in C/C++ applications using COM.

    I’m not a linux expert but, judging from what some of my customers that used linux told me, integrating different components in an embedded linux device isn’t that easy.

    IIRC Qt is C++ only and it may not be so easy to integrate it with a C-based media-framework or an external DB etc. You may have to use different libraries for files, strings, XML etc. and there is no  a "gluing" system, like COM on CE.

    On CE many components are available inside the OS "distribution" and they have a more or less coherent interface and will work on the same kernel.

    I appreciated some community based projects (I’m writing this using firefox, for example), but I saw also other project generating different "trees", each with its own features or being abandoned without reaching a stable version.

  16. Espen Riskedal (Trolltech ASA) says:

    If people are more interested in Qt/CE (Qt for Windows CE) feel free to read the blog entries:

    http://labs.trolltech.com/blogs/2007/06/28/qtce-where-are-we/

    http://labs.trolltech.com/blogs/2007/03/28/were-porting-qt-4-to-windows-ce-and-windows-mobile/

    From our experience porting Qt to Windows CE and Windows Mobile we really understand the pain some of the people here mention. Supporting different languages, styles, oritentaion and screen size is a big problem if you have to write specialized code for each variation of this. These are some of the things we try to make easier with Qt.

    I see a lot of you are actually using DHTML and Explorer and that is a clear sign that the current APIs don’t cut it πŸ˜‰

    Just to clear out some of the comments above.

    1. Qt is not C++ only, there is also Java support through Qt Jambi.

    2. In general "interfacing" with C-based libraries is NOT difficult using C++.

    3. There is no problem embedding COM or ActiveX controls in Qt, even in the CE version. We have ActiveQt for that.

    4. All the libraries for handling files, strings, XML and more are cross-platform (Win, WinCE, X11, Mac, Linux, Linux Embedded) and has more functionality than the ones available through Win32 on the Windows CE platform πŸ™‚ And yeah, we actually support several modules like SVG and SQLite etc. which are hard to get other places for Windows CE.

    Ok, I’ll stop the horrible sales rant now. But if you’re doing C++ development for Windows CE and needs a mature framework I’d give Qt a glance at least.

  17. SCK says:

    Hi Mike,

    I’m developing an application for WinCE 6.0 for which I need the Microsoft File Viewers. I am unable to locate the same using Platform Builder in VS 2005.