This was my first attempt at a Windows CE application. The CE device was a WASP WDT3200 barcode scanner. I hadn't done much mobile development, but I was familiar enough to know I would probably need an SDK and an emulator for testing, so I started Googling.
After some research, I downloaded and installed the Windows CE Standard SDK 5.0 – I determined the CE version by checking the Properties of the WDT3200 from My Device, which essentially equates to My Computer. Although Windows CE is a kernel and can be configured by OEMs as needed and their specific SDKs deployed, the Windows CE Standard SDK worked well enough for my needs. I also discovered the Standalone CE Emulator, but I didn't really need it. Finally, I found ActiveSync, which is required to deploy an application to a Windows CE device from Windows XP.
After installing the CE Standard SDK, I started Visual Studio and selected Project > Smart Device > Smart Device Project. I think the default project type was for Windows Mobile (what's the difference?), but if you right click on the project you can Change the Target Platform. Setting this to Windows CE changed the Look and Feel of the forms, etc.
Coding was pretty much the same as regular, thanks to the .NET CF. There are obviously differences between CF and full-blown .NET, but I didn't run into any of them because the application was pretty simple.
When deploying the application, I received an error message relating to a .NET CF not installed condition. Turns out the Devices tab of the Project Properties Page has a "Deploy the latest version of the .NET Compact Framework (including Service Packs)" checkbox that, well, does just that.
There was some bootstrapping I wanted to do during application startup, but I didn't find the application events in CF, so I wrote a main(args) method and used the Application.Run(FormObject) method. Seemed to work just fine.
I configured the barcode reader to append a Tab character to the input from the scanner, so that when a scan is completed, the Tab will move the focus to the next field. This worked pretty well for changing focus of text fields, but I ran into a problem when the next object in the tab sequence was a button. The click event would fire when the button received focus. I worked around this by setting the TabStop property of the buttons to False.
And that's basically it. My next step is to figure out the syncing from WASP to PC. That will be a separate blog post.