Windows SideShow 支援兩類 Gadget:本地 Gadget (內建於裝置韌體) 與 常規 Gadget (PC 端動態下發)。本文聚焦本地 Gadget 開發,其本質是運行於 .NET Micro Framework (MF) 上的 SideShow 主程式所載入的 DLL 組件,實現 IDeviceApplication 介面。
作者將既有 MF 俄羅斯方塊遊戲在 1 小時內移植為本地 Gadget,展示開發效率。

public interface IDeviceApplication {
ApplicationForm GetForm(); // 返回主視窗
GlanceData GetGlanceData(); // 主選單顯示資料
void Install(IApplicationCache cache); // 安裝時調用
void SetShellAttributes(ShellAttributes attributes); // 設定圖示/標題
void Uninstall(); // 解除安裝
}
public ApplicationForm GetForm() {
if (form == null) form = new ElsForm(); // 遊戲視窗類
return form;
}
// 視窗樣式枚舉
public enum Style {
Default = 0, TitleBar = 1, FullScreen = 2,
SizeToContent = 4, Frame = 8, Centered = 16, DimBackground = 32
}
// 繪圖覆寫
public override void OnRender(DrawingContext dc) {
base.OnRender(dc);
els.Draw(dc); // 遊戲繪圖邏輯
}
public void SetShellAttributes(ShellAttributes attributes) {
attributes.Name = "Tetris";
attributes.Icon16Data = Resources.GetBytes(Resources.BinaryResources.ICON_16); // 16x16 標題列
attributes.Icon32Data = Resources.GetBytes(Resources.BinaryResources.ICON_32); // 32x32 未選中
attributes.Icon48Data = Resources.GetBytes(Resources.BinaryResources.ICON_48); // 48x48 選中放大
}
public GlanceData GetGlanceData() {
GlanceData glance = new GlanceData();
glance.Primary = "YeFan's Tetris";
if (ElsGame.bGameRunFlag) glance.Secondary = new string[] { "[Run]" };
return glance;
}
注意:圖示為 BMP 格式原始位元組陣列,非 .ico 檔。
public override ArrayList GetMenuItems() {
ArrayList list = new ArrayList();
list.Add(new MenuItem("New game", 0));
list.Add(new MenuItem("Replay game", 1));
return list;
}
public override void ExecuteMenuItem(MenuItem selected) {
switch (selected.Id) {
case 0: ElsGame.bGameRunFlag = false; els.Init(); break; // 新遊戲
case 1: GameTimer.Start(); break; // 繼續遊戲
case 2: this.GoBack(); break; // 返回
}
}
IDeviceApplication,視窗繼承 ApplicationForm,否則平台無法載入。OnRender 覆寫配合 DrawingContext,與標準 MF 圖形程式設計無異。Resources.BinaryResources) 內嵌組件。Install/Uninstall 可為空,但需實現;SetShellAttributes 只在註冊/更新時調用一次。MenuItem.Id 對應 ExecuteMenuItem 邏輯,建議用常數定義。現有 MF 應用 (遊戲、工具) 移植極簡單:
1. 創建 SideShow 本地 Gadget 專案 (需 SDK 中的 OEM 範本)。
2. 將核心邏輯類複製過來。
3. 實現 IDeviceApplication 介面包裝現有邏輯。
4. 註冊圖示資源。
5. 編譯部署至裝置/模擬器。
.NET Micro Framework 與 SideShow 平台已停止更新。現代嵌入式 .NET 開發請關注:
- nanoFramework:MF 社區延續分支,支援 ESP32/STM32 等 MCU。
- Meadow:Wilderness Labs 推出的 .NET Standard 執行環境。
- Windows IoT / UWP:完整 Windows 內核精簡版。
但本地 Gadget 的「介面契約 + 宿主載入」架構思想,在插件系統、模組化韌體設計中仍具參考價值。