核心功能點
- Jump List: 任務欄右鍵菜單快捷操作
- Aero Peek: 懸停預覽縮略圖
- 縮略圖工具欄: 預覽中直接操作
- 覆蓋圖標: 任務欄圖標狀態提示
- 進度條: 任務欄按鈕顯示進度
關鍵 API 與接口
Jump List 實現
// 必需接口
#include <shobjidl.h> // ICustomDestinationList
ICustomDestinationList *pCDL = NULL;
HRESULT hr = CoCreateInstance(CLSID_DestinationList, NULL,
CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pCDL));
// 設置用戶任務
IObjectArray *pObjArray = NULL;
pCDL->BeginList(&cMinSlots, IID_PPV_ARGS(&pObjArray));
// 添加 ShellLink 對象...
pCDl->CommitList();
Aero Peek 實現
// 註冊縮略圖預覽
DwmRegisterThumbnailPreview(hwnd, ...)
// 設置縮略圖屬性
DWM_THUMBNAIL_PROPERTIES props = {0};
props.dwFlags = DWM_TNP_RECTDESTINATION | DWM_TNP_VISIBLE | DWM_TNP_OPACITY;
props.rcDestination = {0, 0, 200, 200};
props.fVisible = TRUE;
props.opacity = 255;
DwmUpdateThumbnailProperties(hThumbnail, &props);
學習資源
- CodeProject - 自定義 Jump List 教程
- StackOverflow - 檢測 Aero Peek 狀態
- CodeProject - Windows 7 控件開發指南
開發注意事項
- 需在 Manifest 中聲明
compatibility 節點啟用 Win7 特性
- 檢查
DwmIsCompositionEnabled() 確認 Aero 啟用
- 優雅降級:Win7 以下系統自動禁用相關功能
- x64 版本需注意指針截斷問題