Date post: | 19-Dec-2015 |
Category: |
Documents |
View: | 219 times |
Download: | 0 times |
Pocket PC Application Pocket PC Application DevelopmentDevelopment
Robert TurnerRobert Turner
Application Development ConsultantApplication Development Consultant
Microsoft UKMicrosoft UK
AgendaAgenda
eMbedded Visual Tools eMbedded Visual Tools developmentdevelopment Tools overviewTools overview What’s newWhat’s new
Pocket PC SpecificsPocket PC Specifics Intelligent client capabilities and UI Intelligent client capabilities and UI
designdesign Browser capabilitiesBrowser capabilities
Application InstallationApplication Installation
Windows CE 3.0Windows CE 3.0
Highly componentised OSHighly componentised OS OEM’s can pick and chooseOEM’s can pick and choose Two logo’ed configurations enable Two logo’ed configurations enable
device consistency for the majoritydevice consistency for the majority Pocket PCPocket PC Handheld PC 2000Handheld PC 2000
Adoption of changes back into the Adoption of changes back into the OSOS
Tools LandscapeTools LandscapeChoosing the correct toolChoosing the correct tool
eVBeVB eVCeVCPlatformPlatformBuilderBuilder
LOBLOBAppsApps
UI UI ExploitiveExploitive
AppsApps
Device Drivers/Device Drivers/Time CriticalTime Critical
Programming ModelsProgramming ModelsEmbedded devices and applicationsEmbedded devices and applications
Subset/Superset: Win32 APIs
Win32 APIsDevice Specific
Custom WinCE OS Configuration
Custom Hardware
PocketPC SDK OEM SDK OEM SDK
HardwareDevelopment
ApplicationDevelopment
OSDevelopment
Win32 APIsDevice Specific
Win32 APIsDevice Specific
Pocket PC App Platform DiagramPocket PC App Platform Diagram
WinCE 3.0 (Cedar): Win32, OLE, Winsock, etc
VBMFCATL
Your App Goes Here
GAPI
WinInet
pIE
HTMLJScript
XMLXSL
RapierShell APIs
POOM
Mail API
ADO
What’s New In Embedded What’s New In Embedded Visual Tools ?Visual Tools ? eVC/eVB are standalone, no longer eVC/eVB are standalone, no longer
VS add-insVS add-ins Separate from but co-exist with VS and VS Separate from but co-exist with VS and VS
SPsSPs Remove support for Win32 desktop Remove support for Win32 desktop
developmentdevelopment Customer BenefitsCustomer Benefits
Greatly simplified setup, UI with embedded Greatly simplified setup, UI with embedded focusfocus
IDE tailored for platform-specific support IDE tailored for platform-specific support through Windows CE SDKsthrough Windows CE SDKs
Lower cost - no longer need VS installedLower cost - no longer need VS installed
New Features In 3.0 IDE - eVCNew Features In 3.0 IDE - eVC
Wizards - eVCWizards - eVC 2 New Pocket PC Specific Wizards2 New Pocket PC Specific Wizards
WCE Pocket PC appWCE Pocket PC app WCE Pocket PC MFC appWCE Pocket PC MFC app
Add functionality specific to Pocket Add functionality specific to Pocket PC UIPC UI Check for previous instanceCheck for previous instance Create Pocket PC menu bar Create Pocket PC menu bar
SHCreateMenuBarSHCreateMenuBar SHHandleWMSettingChangeSHHandleWMSettingChange SHInitDialog in about dialogSHInitDialog in about dialog
What Is New In MFC For What Is New In MFC For Pocket PC? - eVCPocket PC? - eVC
Property sheetsProperty sheets Flat tabs, not 3DFlat tabs, not 3D
Dialog boxesDialog boxes Full Screen, no borderFull Screen, no border
Find and replace text dialog and toolbarFind and replace text dialog and toolbar CFindReplaceDialog CFindReplaceDialog
Document list for browsing filesDocument list for browsing files Like standard pocket PC appsLike standard pocket PC apps CCeDocListCCeDocList
More API’s For Pocket PC - eVCMore API’s For Pocket PC - eVC
Context menuContext menu Hold stylus down – Tap ‘n HoldHold stylus down – Tap ‘n Hold Automatic within MFCAutomatic within MFC
Borderless WindowsBorderless Windows Internet Explorer style re-BarsInternet Explorer style re-Bars Custom Today ItemsCustom Today Items
About eVBAbout eVB eVB language is a subset of that used by eVB language is a subset of that used by
the desktop version of Visual Basicthe desktop version of Visual Basic Small, lightweight, and interpreted, Small, lightweight, and interpreted,
Related to VBScriptRelated to VBScript eVB combines the robust power of eVB combines the robust power of
Visual Basic with the compact portability Visual Basic with the compact portability and ease of use characteristic of and ease of use characteristic of VBScriptVBScript
What’s New In eVB 3.0What’s New In eVB 3.0
IDEIDE Standalone toolsetStandalone toolset Focus on Platform functionalityFocus on Platform functionality Limits features based on PlatformLimits features based on Platform
Toolbox, Properties, Intellisense, …Toolbox, Properties, Intellisense, … Integrated Debugger (ethernet-enabled)Integrated Debugger (ethernet-enabled)
RuntimeRuntime Pocket PC specific runtime Pocket PC specific runtime Access to Windows CE APIs through VB Access to Windows CE APIs through VB
style Declare statementstyle Declare statement
Key is SimplifyKey is Simplify
Remove complexityRemove complexity Flat controls & Page-based dialogsFlat controls & Page-based dialogs Single tapSingle tap Redesign of control panelsRedesign of control panels Remove redundant menus, introduce tap & Remove redundant menus, introduce tap &
holdhold Use colour sparinglyUse colour sparingly
UI Design Principles UI Design Principles The form factor is critical, optimize for itThe form factor is critical, optimize for it Design for the 80% / 20% case rather than Design for the 80% / 20% case rather than
the 100% casethe 100% case More content, less app More content, less app Reduce redundancy, and reduce effortReduce redundancy, and reduce effort Windows affinity, not wholesale copy Windows affinity, not wholesale copy Consistency with what users expect, not Consistency with what users expect, not
for its own sake for its own sake Single click - convention onlySingle click - convention only Ease up on the eyesEase up on the eyes Simple NOT simplisticSimple NOT simplistic
New ShellNav bar on top (start button +
title bar), command bar on bottom, system tray on home screen only
New User ModelSingle tap, autosave
everywhere, close cards/documents (no cancel)
Flat look & feel Pages instead of cascading
menus, flat buttons, fewer controls
Feature consolidationRemoved redundant
menus/buttons, redesigned control panel
Client Area
New
Start Menu
App Name
SIP
Menu Bar
App Menu
Redesigned UIRedesigned UI
Designing For Pocket PCDesigning For Pocket PC
Flat interfaceFlat interface Menu bar controlMenu bar control Simple interactionSimple interaction Popup menusPopup menus OK buttonsOK buttons Minimize data inputMinimize data input
The Flat Look The Flat Look Design StuffDesign Stuff
Works better on small screens w/range of Works better on small screens w/range of resolutions incl. greyscaleresolutions incl. greyscale
3D is so…last century3D is so…last century Detail - eVCDetail - eVC
Mostly standard Win32. Avoid Mostly standard Win32. Avoid WS_DLGFRAME and WS_DLGFRAME and WS_EX_WINDOWEDGE WS_EX_WINDOWEDGE
CCM_SETVERSION with CCM_SETVERSION with COMCTL32_VERSIONCOMCTL32_VERSION
Others inherit for free (except PropSheets)Others inherit for free (except PropSheets)
Navigation BarNavigation Bar
Design StuffDesign Stuff Start at 0,0, prime real estateStart at 0,0, prime real estate Title should only be app name, should Title should only be app name, should
not changenot change Instantly conveys a sense of placeInstantly conveys a sense of place OK button, closes dialogs & docsOK button, closes dialogs & docs No cancel, just undoNo cancel, just undo
Read is often different from editRead is often different from edit Tray objects only appear on TodayTray objects only appear on Today
Navigation Bar - eVCNavigation Bar - eVC
Respecting spaceRespecting space CreateWindows at CW_USEDEFAULT, CreateWindows at CW_USEDEFAULT,
CW_USEDEFAULT origin, NOT at (0,0)CW_USEDEFAULT origin, NOT at (0,0) And/Or use SHSipInfoAnd/Or use SHSipInfo
si.cbSize = sizeof(si);si.cbSize = sizeof(si);if( SHSipInfo(SPI_GETSIPINFO, 0, &si, 0) )if( SHSipInfo(SPI_GETSIPINFO, 0, &si, 0) ){{
if (dwStyle & WS_POPUP)if (dwStyle & WS_POPUP) {{ x = si.rcVisibleDesktop.left;x = si.rcVisibleDesktop.left;
y = si.rcVisibleDesktop.top;y = si.rcVisibleDesktop.top;}}
//Consider the menu at the bottom, please.//Consider the menu at the bottom, please. iDelta = (si.fdwFlags & SIPF_ON) ? 0 : iDelta = (si.fdwFlags & SIPF_ON) ? 0 :
MENU_HEIGHT;MENU_HEIGHT;cx = si.rcVisibleDesktop.right - cx = si.rcVisibleDesktop.right - si.rcVisibleDesktop.left;si.rcVisibleDesktop.left;cy = si.rcVisibleDesktop.bottom - cy = si.rcVisibleDesktop.bottom - si.rcVisibleDesktop.top - iDelta;si.rcVisibleDesktop.top - iDelta;
hwnd = CreateWindow(lpClassName, hwnd = CreateWindow(lpClassName, lpWindowName, lpWindowName, dwStyle, x, y, cx, cy, dwStyle, x, y, cx, cy, hWndParent, hMenu, hWndParent, hMenu, hInstance, lpParam);hInstance, lpParam);
}}
Navigation Bar - eVCNavigation Bar - eVC
Navigation Bar - eVCNavigation Bar - eVC Shared ResourcesShared Resources
Title comes from your top level window Title comes from your top level window texttext
OK buttonOK button Remove WS_CAPTION and WS_SYSMENU bits, Remove WS_CAPTION and WS_SYSMENU bits,
add WS_EX_CAPTIONOKBTNadd WS_EX_CAPTIONOKBTN For Dialogs, use SHInitDialog:For Dialogs, use SHInitDialog:
SHINITDLGINFO shidi;SHINITDLGINFO shidi;shidi.hDlg = hwnd;shidi.hDlg = hwnd;shidi.dwMask = SHIDIM_FLAGS;shidi.dwMask = SHIDIM_FLAGS;shidi.dwFlags = shidi.dwFlags = SHIDIF_SIZEDLGFULLSCREEN | SHIDIF_SIZEDLGFULLSCREEN | SHIDIF_DONEBUTTON;SHIDIF_DONEBUTTON;
SHInitDialog(&shidi);SHInitDialog(&shidi);
OK Button - eVBOK Button - eVB
To add set ShowOK property = TrueTo add set ShowOK property = True Handling OK button clickHandling OK button click
Private Sub Form_OKClick()Private Sub Form_OKClick()
Me.HideMe.Hide
End SubEnd Sub Included by default for main formIncluded by default for main form
Navigation Bar - eVCNavigation Bar - eVC Hiding the NavBarHiding the NavBar
Use SHFullScreenUse SHFullScreen WithWith
dwState = SHFS_HIDETASKBAR | dwState = SHFS_HIDETASKBAR | SHFS_HIDESIPBUTTON | SHFS_HIDESIPBUTTON | SHFS_HIDESTARTICON; // to hideSHFS_HIDESTARTICON; // to hide
dwState = SHFS_SHOWTASKBAR | dwState = SHFS_SHOWTASKBAR | SHFS_SHOWSIPBUTTON | SHFS_SHOWSIPBUTTON | SHFS_SHOWSTARTICON; // to showSHFS_SHOWSTARTICON; // to show
Must be foreground windowMust be foreground window Do this on WM_ACTIVATEDo this on WM_ACTIVATE
New Menu BarNew Menu Bar Design StuffDesign Stuff
Moved to bottom so hand does not Moved to bottom so hand does not obstruct operationsobstruct operations
Menus & toolbar buttons mixed on Menus & toolbar buttons mixed on ONE bar, no overlapping rebarONE bar, no overlapping rebar
Tooltips Tooltips if the icon isn’t 100% self-evident, just if the icon isn’t 100% self-evident, just
use a menu or textuse a menu or text Buttons and menus should NOT be Buttons and menus should NOT be
redundantredundant
MenuBar - eVBMenuBar - eVB Adding buttons programmaticallyAdding buttons programmatically
Dim mnuAssets As MenuBarLib.ItemDim mnuAssets As MenuBarLib.Item
Set mnuAssets = Set mnuAssets = menubar1.Controls.AddMenu("Assets", menubar1.Controls.AddMenu("Assets", "mnuAssets")"mnuAssets")
mnuAssets.Items.Add 1, "mnuAssetsAdd", "Add"mnuAssets.Items.Add 1, "mnuAssetsAdd", "Add"
mnuAssets.Items.Add 2, "mnuAssetsList", "List“mnuAssets.Items.Add 2, "mnuAssetsList", "List“
Responding when menuBar buttons are Responding when menuBar buttons are clickedclickedPrivate Sub menubar1_MenuClick(ByVal Item As Private Sub menubar1_MenuClick(ByVal Item As
MenuBarLib.Item)MenuBarLib.Item)
Select Case Item.KeySelect Case Item.Key
Case "mnuAssetsAdd"Case "mnuAssetsAdd"
AssetNumber.Text = ""AssetNumber.Text = ""
New “New” ButtonNew “New” Button Design StuffDesign Stuff
Quick input is criticalQuick input is critical Shared with all appsShared with all apps On Today page and a user option to On Today page and a user option to
turn on everywhereturn on everywhere Don’t spam itDon’t spam it
You can spam it in your own appYou can spam it in your own app
MenuBar new New… - eVBMenuBar new New… - eVB New button enabled through properties New button enabled through properties
of MenuBar Controlof MenuBar Control Detecting when New is clicked,Detecting when New is clicked,
Private Sub MenuBar1_NewClick()Private Sub MenuBar1_NewClick()
MsgBox ("New Button Clicked")MsgBox ("New Button Clicked")
End SubEnd Sub
InputInput Design StuffDesign Stuff
Design with the SIP Design with the SIP Put it up for people and take it downPut it up for people and take it down Try not to make it danceTry not to make it dance Input is hard, make it easy…Input is hard, make it easy… Remember it is pluggable, Remember it is pluggable,
recommended 80 pixels highrecommended 80 pixels high Could be different!Could be different!
Input - eVCInput - eVC SIP friendliness (the rules)SIP friendliness (the rules) SHSipPreference(HWND hwnd, SHSipPreference(HWND hwnd,
SIPSTATE eState)SIPSTATE eState) SIP_UP on WM_SETFOCUSSIP_UP on WM_SETFOCUS SIP_DOWN on WM_KILLFOCUSSIP_DOWN on WM_KILLFOCUS Do nothing if you’re not an input controlDo nothing if you’re not an input control
WC_SIPPREF magic controlWC_SIPPREF magic control CONTROL "",-1,WC_SIPPREF, CONTROL "",-1,WC_SIPPREF,
NOT WS_VISIBLE,-10,-10,5,5NOT WS_VISIBLE,-10,-10,5,5 Input DialogsInput Dialogs
SHInputDialog(hwnd, uMsg, wParam)SHInputDialog(hwnd, uMsg, wParam)
Input - eVCInput - eVC Main WndProc - save & restore sip state per Main WndProc - save & restore sip state per
windowwindowcase WM_INITDIALOG/WM_CREATE:case WM_INITDIALOG/WM_CREATE:
this->sai.cbSize = this->sai.cbSize = sizeof(SHACTIVATEINFO);sizeof(SHACTIVATEINFO);
break;break;
case WM_ACTIVATE:case WM_ACTIVATE:SHHandleWMActivate(hWnd, wParam, lParam, SHHandleWMActivate(hWnd, wParam, lParam,
&this->sai, 0);&this->sai, 0);break;break;
case WM_SETTINGCHANGE:case WM_SETTINGCHANGE:
SHHandleWMSettingChange(hDlg, wParam, SHHandleWMSettingChange(hDlg, wParam, lParam, &this->sai));lParam, &this->sai));
break;break;
case WM_SIZE:case WM_SIZE://sizing goo here.//sizing goo here.break;break;
Controlling the SIP - eVBControlling the SIP - eVB SIPBehaviorSIPBehavior
This property determines underThis property determines underwhat conditions the input panel what conditions the input panel appears.appears.
objectobject.SIPBehavior [= .SIPBehavior [= valuevalue]]
SIPVisibleSIPVisible This property determines the visibility of the input This property determines the visibility of the input
panel.panel. object.object.SIPVisible [SIPVisible [= Boolean= Boolean]]
SIPChangeSIPChange This event occurs when the display state of the This event occurs when the display state of the
input panel changes.input panel changes. Private Sub Private Sub formform_SIPChange( _SIPChange( BooleanBoolean ) )
Handling SIP - eVCHandling SIP - eVC
Determine and set SIP StatusDetermine and set SIP Status SipGetInfo( )SipGetInfo( ) and and SipSetInfo( )SipSetInfo( )
SIPINFO Structure contains…SIPINFO Structure contains… Flags – Sip ON, OFF and LockedFlags – Sip ON, OFF and Locked Rectangle of Visible ScreenRectangle of Visible Screen Rectangle of SIPRectangle of SIP
Call Call SipGetInfo( )SipGetInfo( ) to determine to determine current status and current status and SipSetInfo( )SipSetInfo( ) to to change status.change status.
PerformancePerformance For best results and maximum For best results and maximum
efficiency, streamline applications for efficiency, streamline applications for Windows CE-based devicesWindows CE-based devices Think about the functionality you NEED on Think about the functionality you NEED on
the device.the device. Multiple forms?Multiple forms?
Think UI Simplicity.Think UI Simplicity. Use TabStrip control to group tasks.Use TabStrip control to group tasks. Use multiple frames on one form and move Use multiple frames on one form and move
frames into view as needed. See NWind frames into view as needed. See NWind sample from SQLCE for examplesample from SQLCE for example
Pocket IE CapabilitiesPocket IE CapabilitiesOverviewOverview
HTML 3.2 CompliantHTML 3.2 Compliant JavaScript 1.1 compliantJavaScript 1.1 compliant XML Object ModelXML Object Model SSLSSL Active X supportActive X support
NOTE: Emulator does not run JScript
HTML CapabilitiesHTML Capabilities
HTML 3.2 supportHTML 3.2 support Lightweight & ubiquitousLightweight & ubiquitous
FramesetsFramesets Per HTML 4.0 specPer HTML 4.0 spec Borders always visible even with Borders always visible even with
BORDER=0BORDER=0 Linked wav files will be played without Linked wav files will be played without
user interactionuser interaction
HTML CapabilitiesHTML Capabilities
DHTMLDHTML Useful on the desktop, but still Useful on the desktop, but still
heavyweight for handheldsheavyweight for handhelds CSSCSS
Use XSL stylesheets insteadUse XSL stylesheets instead Animated GIFs, background images Animated GIFs, background images
and soundsand sounds
JScript CapabilitiesJScript Capabilities HTML 3.2-based object modelHTML 3.2-based object model
Not the IE4 OMNot the IE4 OM Core script support:Core script support:
Scripting against FORM elementsScripting against FORM elements Scripting against the XML OMScripting against the XML OM
JScript CapabilitiesJScript Capabilities
Not supported:Not supported: Dynamic frameset creationDynamic frameset creation Dynamic script generationDynamic script generation Window.openWindow.open
Detecting Pocket IEDetecting Pocket IEServer-side VBScriptServer-side VBScript
'Check for Windows CE'Check for Windows CE
if (InStr(Request.ServerVariables("HTTP_USER_AGENT"), if (InStr(Request.ServerVariables("HTTP_USER_AGENT"), "Windows CE")) then"Windows CE")) then
{ add Windows CE specific code }{ add Windows CE specific code }
elseelse
{ add code for other platforms }{ add code for other platforms }
end ifend if
'Check for Pocket PC'Check for Pocket PC
if (InStr(Request.ServerVariables("HTTP_UA_OS"), if (InStr(Request.ServerVariables("HTTP_UA_OS"), "POCKET PC")) then"POCKET PC")) then
{ add Pocket PC specific code }{ add Pocket PC specific code }
elseelse
{ add code for other platforms }{ add code for other platforms }
end ifend if
Detecting Pocket IEDetecting Pocket IEClient-side JScriptClient-side JScript
var strNav = navigator.userAgent;var strNav = navigator.userAgent;
var isCE = strNav.indexOf("Windows CE");var isCE = strNav.indexOf("Windows CE");
if(isCE > -1) {if(isCE > -1) {
{ add Windows CE specific code }{ add Windows CE specific code }
}}
else {else {
{ add code for other platforms }{ add code for other platforms }
}}
var isPPC = strNav.indexOf("240x320");var isPPC = strNav.indexOf("240x320");
if(isPPC > -1) {if(isPPC > -1) {
{ add Pocket PC specific code }{ add Pocket PC specific code }
}}
else {else {
{ add code for other platforms }{ add code for other platforms }
}}
XML CapabilitiesXML Capabilities Same XML component as IE5Same XML component as IE5 Markup and transfer of data as XMLMarkup and transfer of data as XML How it works:How it works:
Data-as-XML delivered from server embedded Data-as-XML delivered from server embedded in HTML page - an XML ‘Data Island’in HTML page - an XML ‘Data Island’
Data read out of page, parsed, and placed into Data read out of page, parsed, and placed into a data treea data tree
JScript accesses the XML OMJScript accesses the XML OMand manipulates the dataand manipulates the data
XML CapabilitiesXML Capabilities Render the XML data in the browser Render the XML data in the browser
as HTMLas HTML Use XSL to transform XML into HTMLUse XSL to transform XML into HTML
Describe appearance of HTML page Describe appearance of HTML page with XMLwith XML Instead of CSS, markup page with XSLInstead of CSS, markup page with XSL Minimize round-trips to the serverMinimize round-trips to the server Easy support for multiple browser typesEasy support for multiple browser types
<SCRIPT LANGUAGE=“JSCRIPT”><SCRIPT LANGUAGE=“JSCRIPT”>
var xmlhttp = new ActiveXObject ("Microsoft.XMLHTTP");var xmlhttp = new ActiveXObject ("Microsoft.XMLHTTP");
xmlhttp.Open("POST", "XMLlog.asp", false);xmlhttp.Open("POST", "XMLlog.asp", false);
var strXML = "<changeprice SKU='" + var strXML = "<changeprice SKU='" + document.forms[0].SKU.value + "' document.forms[0].SKU.value + "' Price='" + iNewPrice + "'/>";Price='" + iNewPrice + "'/>";
// Send request to logging page // Send request to logging page
xmlhttp.Send(strXML);xmlhttp.Send(strXML);
// Show response (success or failure)// Show response (success or failure)
alert(xmlhttp.responsetext);alert(xmlhttp.responsetext);
</SCRIPT></SCRIPT>
Using the XMLHTTP ObjectUsing the XMLHTTP Objectthe requestthe request
<%@ LANGUAGE="VBSCRIPT" %><%@ LANGUAGE="VBSCRIPT" %>
<% Response.ContentType = "text/xml"<% Response.ContentType = "text/xml"
set XMLReq = Server.CreateObject("Microsoft.XMLDOM")set XMLReq = Server.CreateObject("Microsoft.XMLDOM")
XMLReq.load(Request)XMLReq.load(Request)
set xmlAction = XMLReq.selectSingleNode("//changeprice")set xmlAction = XMLReq.selectSingleNode("//changeprice")
iSKU = xmlAction.GetAttribute("SKU")iSKU = xmlAction.GetAttribute("SKU")
iPrice = xmlAction.GetAttribute("Price")iPrice = xmlAction.GetAttribute("Price")
{ open recordset containing the requested SKU }{ open recordset containing the requested SKU }
if not rsData.eof thenif not rsData.eof then
rsData("Price") = iPricersData("Price") = iPrice
rsData.updatersData.update
response.write "Price changed successfully to $" & response.write "Price changed successfully to $" & iPrice & "."iPrice & "."
elseelse
response.write "No record found for this SKU."response.write "No record found for this SKU."
end if %>end if %>
Using the XMLHTTP ObjectUsing the XMLHTTP Objectthe responsethe response
Security CapabilitiesSecurity Capabilities
For secure transactions, Pocket IE For secure transactions, Pocket IE supports:supports: SSLSSL
64-bit certificates64-bit certificates 128-bit encryption (add-on)128-bit encryption (add-on)
ActiveX CapabilitiesActiveX Capabilities
Straightforward – just like the desktopStraightforward – just like the desktop COM component accessed from <OBJECT> COM component accessed from <OBJECT>
tagtag Script can call ActiveX components, but not Script can call ActiveX components, but not
vice-versavice-versa Must be installed on device directlyMust be installed on device directly
No auto-downloadNo auto-download Great hook for rich device-web interaction Great hook for rich device-web interaction
scenariosscenarios
Efficient Use of Pocket IEEfficient Use of Pocket IESuggestionsSuggestions
Keep it simple – just the essentialsKeep it simple – just the essentials Avoid >2 frames per pageAvoid >2 frames per page Use tables sparingly; allow for dynamic Use tables sparingly; allow for dynamic
resizingresizing Single-column formatSingle-column format
Pocket IE pages should Pocket IE pages should nevernever require require horizontal scrollinghorizontal scrolling
Makes single-handed reading easyMakes single-handed reading easy
AppInstall Distribution AppInstall Distribution MethodsMethods AppInstall supports multiple distribution AppInstall supports multiple distribution
methods:methods: Web to device (via Pocket Internet Explorer)Web to device (via Pocket Internet Explorer) CF Card to device (via AutoRun/Explorer)CF Card to device (via AutoRun/Explorer) Device to device (via IR)Device to device (via IR) Desktop to device (via AppMgr)Desktop to device (via AppMgr)
Accomplished by distributing the CAB Accomplished by distributing the CAB files themselvesfiles themselves
With CEF, only need to distribute one CAB With CEF, only need to distribute one CAB file to support all Pocket PC devicesfile to support all Pocket PC devices
AppInstall OverviewAppInstall Overview
11
BB
Desktop Desktop SetupSetup
CabWizCabWizINFINF
AppAppFilesFiles
AppMgrAppMgrINIINI
CabWizCabWiz(desktop)(desktop)
CEAppMgrCEAppMgr(desktop)(desktop)
WCELoadWCELoad(device)(device)
CABCABFilesFiles
22
33
44 CC
AA
AppMgr Register-only FlagAppMgr Register-only Flag New flag to register your app onlyNew flag to register your app only Will not run the AppMgr UIWill not run the AppMgr UI UsageUsage
CEAppMgr.exe /register “<INI file>” [“<INI CEAppMgr.exe /register “<INI file>” [“<INI file>”]file>”]
ExampleExample CEAppMgr.exe /registerCEAppMgr.exe /register ““C:\MyApp\Game1.ini”C:\MyApp\Game1.ini” ““C:\MyApp\Game2.ini”C:\MyApp\Game2.ini”
CE-Operating System CE-Operating System Min/Max VersionMin/Max Version AppMgr now uses CE-Operating AppMgr now uses CE-Operating
System min/max version information System min/max version information in the CABs to determine which CAB in the CABs to determine which CAB to downloadto download
Allows supporting all Allows supporting all Palm-size/Pocket PC devices with a Palm-size/Pocket PC devices with a single CabWiz INF and AppMgr INI single CabWiz INF and AppMgr INI filefile
CE-Operating System CE-Operating System Min/Max VersionMin/Max Version[CEDevice.PPC1] ; Palm-size PC black/white[CEDevice.PPC1] ; Palm-size PC black/whiteVersionMin = 2.1VersionMin = 2.1VersionMax = 2.1VersionMax = 2.1
[CEDevice.PPC2] ; Palm-size PC colour[CEDevice.PPC2] ; Palm-size PC colourVersionMin = 2.11VersionMin = 2.11VersionMax = 2.11VersionMax = 2.11
[CEDevice.PPC3] ; Pocket PC and beyond[CEDevice.PPC3] ; Pocket PC and beyondVersionMin = 3.0VersionMin = 3.0VersionMax = 100.0 ; arbitrary high valueVersionMax = 100.0 ; arbitrary high value
CE-Operating System CE-Operating System Version InformationVersion Information
AppInstall does not support H/PC 1.0AppInstall does not support H/PC 1.0 CE API to get Platform Name:CE API to get Platform Name:
SystemParametersInfoSystemParametersInfo(SPI_GETPLATFORMTYPE, …)(SPI_GETPLATFORMTYPE, …)
Device Device PlatformPlatform CE OSCE OSH/PC 2.0H/PC 2.0 “HPC”“HPC” 2.02.0
H/PC 3.0H/PC 3.0 “HPC Pro”“HPC Pro” 2.112.11
Palm-size PC 1.0Palm-size PC 1.0 “Palm PC”“Palm PC” 2.12.1
Palm-size PC 2.0Palm-size PC 2.0 “Palm PC”“Palm PC” 2.112.11
Pocket PCPocket PC “Palm PC”“Palm PC” 3.03.0