Category: NETCF

  • VS2005 and File Alignment

    One of the transparent benefits of building your projects with VS2005 is that the default File Alignment is now set at 512 bytes, rather than the 4096 bytes which was the default for device projects in VS2003. This means if you create a new project in both versions and add exactly the same code you should notice the output dll created by VS2005 is noticably smaller.


    One thing you may not realise is that the default value used in a VS2003 project is stored within the C# project file, which means if you import a VS2003 C# Smart Device project to VS2005 it will still use the value 4096. You can change this from the project properties > Build tab > Advanced button and set it to 512.

  • Divert system audio to a Bluetooth headset

    In the Windows Mobile 5.0 audio gateway implementation there are a couple of control codes to turn on audio routing through the bluetooth headset/handsfree device. I’ve only tried this with a couple of devices and had mixed (That’s a really bad audio pun sorry!) results but here’s a library to allow you to try it yourself. In theory it may work on some 2003 Second Edition devices too. I’d be interested to hear your feedback.


    To set audio routing just call


    InTheHand.Net.Handsfree.AudioGateway.RouteAudioToHandsfree = true;


    And set to false to return to normal audio use.


    Once fully tested and documented this will make it into the 32Feet package.

    InTheHand.Net.Handsfree.zip (2.54 KB)

  • Bug in OpenNETCF.VisualBasic GetSetting

    A fairly obvious bug managed to go unnoticed in the GetSetting method for about 18 months. The problem is fairly straight-forward – the method will never return a value if one is found (if not present it returns the default value you supply).


    I’ve fixed it for the next version, but what are you options for working around the issue with current code:-



    • Use the RegistryKey directly instead – OpenNETCF.Win32.RegistryKey directly matches the .NET v2.0 version so any code you write against this is very portable.

    • Use the attached updated OpenNETCF.VisualBasic.dll. However in order for this method to work you will have to manually copy the dll to your program folder, and make sure your reference points to this version of the dll – 1.4.51101 OpenNETCF.VisualBasic.zip (3.61 KB)

    • Grab the updated code from the Vault and build the code into your own dll/executable and call that instead of the OpenNETCF.VisualBasic version.

    It would be interesting to get some feedback on whether people are actually using this VB specific functionality, and if so how useful you find it, and what else you would like to see in future versions…

  • Installing .NETCF 2.0 Runtimes

    Marcus has posted some instructions on installing .NETCF v2.0 runtimes to a Windows Mobile 5.0 device. Of course you may wish to deploy to Pocket PC 2003 devices too, again it’s a RAM install, and you can follow the same basic steps. There are a few points to note:-



    • You can still build an Autorun in .NETCF v1.0 code as all Pocket PC 2003 devices will have at least the RTM release of v1.0 in ROM. Autorun on devices with multiple card slots can be flaky this was improved in v5.0
    • The CAB file for Pocket PC 2003 is much larger (5.1mb) since Pocket PC 2003 doesn’t support compressed CAB files. By default you’ll find it here:-


    C:Program FilesMicrosoft Visual Studio 8SmartDevicesSDKCompactFramework2.0v2.0WindowsCEwce400armv4NETCFv2.ppc.armv4.cab



    • The Autorun code will require modification because it relies on managed ConfigurationManager – you can either P/Invoke DMProcessConfigXML or use an available wrapper (if your device is a Phone Edition device) or OpenNETCF Registry wrapper – works for all PPC2003 devices.
    • You’ll need to modify how the Autorun determines the path of the SD card on which the files are contained. One solution is to check for potential storage cards with this code:-


    http://www.opennetcf.org/forums/topic.asp?TOPIC_ID=432



    • Place some token file on your SD card and check for it’s existence on each returned path, then when you have your SD card folder you can programmatically install the cab file(s). Again I shouldn’t need to give you any hints as to where to find a Process class for .NETCF v1.0

  • Use IMessageFilter From a VB .NETCF Project

    I posted this to the newsgroup earlier, but figured it was a useful thing to post for future reference. If you want to implement a custom IMessageFilter using OpenNETCF.Windows.Forms.ApplicationEx you have to be aware that VB.NET autogenerates a main proceedure for you if your project startup object is a form. Therefore it will use the Application.Run method and your filter will never be used. Instead you can implement a Sub Main as your startup object and use ApplicationEx:-


    Public Shared Sub Main()

    ApplicationEx.Run(New MyFormType())

    End Sub


     


    Then set your Startup object in project properties to your new Sub Main rather than the name of your form class.

  • SDF v1.4 Dlls

    A request came up on the newsgroups for just the dlls for the SDF. This could be useful if you are using the VS2005 Beta. Of course if you don’t know why you need these or what to do with them, then you can safely ignore this message and grab the package from http://www.opennetcf.org/download.asp?product=SmartDeviceFramework14

    OpenNETCF.1.4.zip (479.38 KB)

  • Useful new MessageWindow feature

    Earlier in the Beta for Visual Studio 2005 I submitted a product suggestion to support a very common scenario with the MessageWindow control, and I was delighted to find that in the July CTP it has been implemented.


    The MessageWindow class is provided as a mechanism to receive incoming windows messages and has become a key part of the .NETCF developers interoperability toolbox. .NETCF v2.0 extends the options we have available with new functionality such as support for passing callback functions into native code and COM interop. However there are still times when we will need the humble MessageWindow. One of the first tasks with using the MessageWindow is how to tell the sender where to send the messages. In some cases this involves passing the handle (HWND) of the MessageWindow in via a P/Invoke call, the other common way to identify a MessageWindow is by setting the text and using FindWindow.


    This neatly brings me back to the new feature in question. In v1.0 you had to override the WndProc and add your own handler for WM_GETTEXT (and optionally WM_SETTEXT) in order for your MessageWindow to have a caption. .NETCF v2.0 adds the Text property making life that little bit easier. Just set the Text property to something uniquely identifiable for your application, then you can use FindWindow from your native code to get the handle (HWND) of the MessageWindow and start sending messages to it.

  • One-handed Pocket PC Applications

    Mark has posted the final version of his MSDN article on designing for stylus-free usage on Windows Mobile. This covers both what you get for free in .NETCF v2.0 for navigating around forms with the d-pad and also what you can do to make some of the other intrinsic controls behave. Mark’s sample code includes wrappers around these “badly behaved” controls such as the DateTimePicker.

  • Service Packs and Fixes

    In order to determine all the known issues with .NETCF v1.0 and which Service Pack contained the fix, you would need to look through the fix list for each of the Service Packs in turn. For ease of reference I copied the three fix lists from SP1,2 and 3 and categorised them into the following table. The “o”s indicated in which service pack the issued was resolved. Below it is a table showing which version is preinstalled on the various Windows Mobile devices which have had .NETCF in ROM.




























































































































































































































































































































































































































































































































































































































































































































      RTM SP1 SP2 SP3
    Defects        
             
    Improved code cache performance and memory utilization on ARM processors   o o o
    Parsing of Numeric values is not working correctly on some locales (specially affects VB scenarios)   o o o
    App would not launch properly if it were already running and showing MessageBox when the user navigated out to Home   o o o
    Improved resource loading performance     o o
    Minor GUI performance improvements     o o
    Added support for new Smartphone languages: Finnish, Czech, Romanian, Slovakian, Norwegian, Hungarian, Polish, Turkish, Russian     o o
    Transitions between managed and native code can cause memory leaks on ARM platforms       o
    Stack corruption can occur on ARM platforms when local variables are created but never used       o
    Invoking a multicast delegate from a catch handler throws a MissingMethodException on ARM platforms       o
    Command line arguments containing double byte characters are truncated to a single byte.       o
    Memory corruption can occur on devices that have the native security model enabled and both .NET CF V1 SP3 and a pre-release version of .NET CF V2 installed.       o
    Deadlocks can occur when running under severe resource constraints.       o
    Data Misalignment occurs on Decimal fields in MIPSIV devices.       o
             
    Microsoft.WindowsCE.Forms        
    InputPanel: EnabledChanged Event fires inspite of setting the enabled property to the same value.     o o
    InputPanel: Setting the InputPanel.Enabled property when the form is closing throws an exception     o o
             
    System
    Double: conversion of 0.0F to a string and results in a memory leak     o o
    String: Native exception while calling String.Intern()   o o o
    Type: System.Type.GetType(string) fails to load types that reside on external assemblies if those assemblies are not already loaded   o o o
           
    System.Data
    DataRowCollection.Find Method Returning Incorrect Row   o o o
    DataRowCollection.Find() method throws wrong exception     o o
    DataSet: Improved performance of many data tasks, including populating DataSets, searching DataTables, DataSet.ReadXml() method when a schema is used, finding and indexing operations, setting DataSet.EnableConstraints property “>DataSet: Improved performance of many data tasks, including populating DataSets, searching DataTables, DataSet.ReadXml() method when a schema is used, finding and indexing operations, setting DataSet.EnableConstraints property      o o
    DataSet: Data is missing or loaded incorrectly by DataSet.ReadXml() in some cases.       o
    Fixed crash when SQLClient or SQLServerCe is installed     o o
           
    System.IO
    BinaryReader: BinaryReader.ReadBytes() returns less bytes than asked   o o o
           
    System.Net
    Improved network media sense / connection management experience   o o o
    HttpClient: Authentication state handling errors in http client   o o o
    HttpClient: Http client not using credentials from supplied proxy object   o o o
    HttpWebRequest: Fixed erroneous parsing of HttpWebRequest response stream     o o
    Socket: Force tear down of sockets after dialup disconnect   o o o
    Socket: An uncatchable ObjectDisposedException is thrown when the server closes the socket connection.       o
           
    System.Net.IrDA
    IrDAClient.DiscoverDevices device names garbled     o o
           
    System.Web.Services
    Web services: Compatibility issues   o o o
    Web services: Problem receiving empty arrays mixed with other data   o o o
    Web services: InvalidOperationException when polymorphic type is returned and in the same namespace as the service   o o o
    Web services: Not correctly handling the default values that VB creates for enums when using the DefaultValue attribute   o o o
    Web services: After repeatedly canceling asynchronous web request, all web service calls fail     o o
    Web services: An XmlException is thrown when deserializing a qualified name that has no prefix and there is no default namespace defined     o o
    Web services: Incorrect handling of null headers in SOAP messa     o o
    Web services: A NullReferenceException is thrown when a Web Method returns an empty array using the xsi:Nil attribute       o
    Web services: Modifying the SoapClientMessage.ContentType property does not modify the Http requests ContentType header.       o
    Web services: An ObjectDisposedException is thrown when a asynchronous web request is aborted before the response is received.       o
    Web services: Any array containing one or more elements is not sent to the Web Service correctly.       o
    Web services: An application may hang when invoking a Web Method that uses multiple XmlElementAttributes on a single argument, member or property.       o
    WebRequest.Proxy doesn’t allow spaces in the URL   o o o
           
    System.Windows.Forms
    Memory leak in the NumericUpDown, DomainUpDown, ComboBox and TextBox controls     o o
    The Focus method does not work correctly for the NumericUpDown and DomainUpDown controls     o o
    Auto scroll – scrollbars aren’t removed until control is inside bounds of scrollbars   o o o
    Auto scroll – with control sitting bottom left, should get both scrollbars when control moved over right edge   o o o
    ContextMenu: Support raising context menus from assigned hardware key, Pocket PC     o o
    ContextMenu: Fixed TreeView issues on Pocket PC 2003     o o
    ContextMenu: Fixed side effects on controls like Scrollbar and Label     o o
    ContextMenu: erroneous functionality when bound to ListBox     o o
    ContextMenu: Showing a context menu on Pocket PC for a textbox unselects the selected text in the textbox     o o
    ContextMenu: Empty ContextMenu on Pocket PC should not pop up     o o
    Control: Added support for ForeColor &/or BackColor for Button, Checkbox, ComboBox, DomainUpDown, Label, Listbox, ListView, NumericUpDown, RadioButton, Trackbar, TreeView     o o
    Control: If a focused control property is changed while the application is in the background it loses its focus   o o o
    Control: Don’t get GotFocus Event for first control in form   o o o
    Control: Focus should move to the next control when the current control with the focus gets disabled   o o o
    Control: Extend keyboard events to be enabled on all controls (Control.KeyUp, KeyDown, KeyPress)     o o
    Control: Improved Control.Enabled and Control.Parent property changing performance     o o
    Control: Native Exception occurs when using the get accessor for Control.Capture     o o
    Control: Invoke on a disposed control hangs the application.       o
    Form: ControlCollection Memory leak   o o o
    Form: Improved performance of Controls property   o o o
    Form: Tab support for Pocket PC based on Z-Order     o o
    Form: does not get the focus when all controls are removed from the form     o o
    Form: Navigation bar flickers when new form is being loaded     o o
    Form: ObjectDisposedException occurs when DataBinding a control to a form shown via Show()     o o
    Form: OK button eventually goes away when re-using recycled form for ShowDialog(     o o
    Form: Scrollbars should go away when app 100% client sized control is returned back to 100% inside client area   o o o
    ImageList: Unexpected exception while adding an image to an imagelist on an Hx4700 and hx4705       o
    ListView control allows setting the text alignment of its first column to HorizontalAlignment.Center and HorizontalAlignment.Right   o o o
    ListView: The Text property of a ListView column is reset to “” when removing the column from the ListView and then adding it back.     o o
    ListViewItem.Checked property always returns false if the CheckBoxes property of the listview control is set to false   o o o
    MainMenu: Support menu hotkeys on Pocket PC     o o
    MainMenu: InputPanel Button disappears from MainMenu on Pocket PC 2002     o o
    MainMenu: SIP button does not go away when the toolbar control is removed from a form that does not have a menu     o o
    ProgressBar: Setting the Minimum and Maximum properties of a progressbar no longer crashes the application.       o
    RadioButton: Native exception thrown while setting the Checked property to false   o o o
    ScrollableControl: thumb in wrong position after setting AutoScrollPosition   o o o
    ScrollableControl: throws not supported exception setting AutoScroll=false   o o o
    TextBox: Application terminates with a first-chance exception in gwes.exe when typing quickly in a textbox   o o o
    ToolBar: Tool Bar’s on Windows Mobile 2003 SE no longer lose their images when removed from the form.       o
             
    System.Xml
    XmlQualifiedName objects are corrupted if the namespace of the data is the same as that of the service   o o o
    XmlTextReader performance improvements     o o
             
             
    Devices
    Pocket PC 2003 o r r r
    Smartphone 2003   o    
    Pocket PC 2003 Second Edition     o r
    Smartphone 2003 Second Edition     o  
    Windows Mobile v5.0 Pocket PC       o
    Windows Mobile v5.0 Smartphone       o
    r = Available via RAM install        

  • Functionality in InTheHand.WindowsMobile.Forms

    As has already been shown with some of the other libraries in WindowsMobile In The Hand, the object model is generally designed to follow the Windows Mobile 5.0 APIs. There are a few examples where new functionality is exposed which is not found in the WM 5.0 APIs, some of which was designed specifically to complement Windows Mobile 5.0.


    In the case of the Forms assembly, none of the WM5.0 forms are supported, this is because functionality such as CameraCaptureDialog and SelectPicture dialog rely on new functionality in the underlying OS – prior to WM 5.0 each OEM implemented their own camera support.


    However in WindowsMobile In The Hand, a few new pieces of forms related functionality are added:-



    The MessageBox is designed to provide a softkey-enabled message box for Windows Mobile 5.0 Pocket PCs (although it can also be used on prior versions). When used in a Smartphone project it uses the standard compact framework implementation, on a Windows Mobile 5.0 Pocket PC it produces the following:-



    It’s been designed to follow the Smartphone experience so you can provide the same user experience on both platforms. It supports a full range of overrides for the Show method to specify buttons, icon etc. Here the MessageBoxIcon is used to draw a watermark image on the dialog, similar in spirit to the themed icons which are used on the Smartphone equivalent.


    MobileDevice provides a few helper methods to reset the device, and get the platform type identifier e.g. PocketPC or Smartphone.


    MobileKeys provides a mapping between the device specific key constants (as defined in winuserm.h) and the desktop key codes, so all of the members are of type System.Windows.Forms.Keys.


    OpenFileDialog is built specifically for Windows Mobile 5.0 Smartphone and matches the System.Windows.Forms version available in Pocket PC projects. Again if used in a Pocket PC project it utilises the existing implementation in System.Windows.Forms. It will currently raise a NotSupportedException if used on a Smartphone 2003 device.