2008年8月18日 星期一

隱藏 WinCE 的 Taskbar

WM5/6 或 WinCE 的軟體, 當需要全螢幕顯示時, 就需要將系統工作列(Taskbar)隱藏, 最常見的系統工作列隱藏方法, 便是找到 Taskbar windows, 並透過系統函數將它隱藏, 以 C++ 語言為例,

hTaskBarWnd = FindWindow(_T("HHTaskBar"), NULL);
ShowWindow(hTaskBarWnd, SW_HIDE);

還有另一種作法, 也是找到 Taskbar windows, 並將它搬離螢幕範圍, 例如下述將 Taskbar windows 搬至螢幕下方超過螢幕解析度之範圍,

MoveWindow(hTaskBarWnd, rc.left, rc.bottom, rc.right-rc.left, rc.bottom-rc.top, TRUE);

但在 WinCE 環境中, 有些軟體即使將 Taskbar 隱藏了, 但仍會發生並非真正全螢幕顯示情形, 問題大都出在沒有設定螢幕工作範圍, 而形成工作列雖被隱藏, 但程式執行時, 仍無法將工作視窗擴大至 Taskbar 原有之位置, 下述範例說明將 Windows CE 之視窗工作範圍設至全螢幕範圍, 

SetRect(&rc, 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN));
SystemParametersInfo(SPI_SETWORKAREA, 0, &rc, SPIF_UPDATEINIFILE);

以 TomTom 6 為例, TomTom 6 原本僅適用於 WM5 環境, 有人將它移植至 WinCE 環境中, 但於 WinCE 環境中使用 TomTom 即需將 WinCE 的工作列設定為自動隱藏, 有些人使用隱藏 Taskbar 程式隱藏工作列, 但執行 TomTom 6 於導航畫面回主選單時, 會出現嚴重的程式錯誤並異常結束程式, 其主因為有些隱藏 Taskbar 程式將視窗工作範圍設至全螢幕範圍, 但目前 TomTom 6 並無法於 WinCE 中以全螢幕範圍工作.

話說山不轉路轉, 路不轉人轉, 如果覺得設定工作列自動隱藏, 螢幕底部會有礙眼的 5 pixels gray bar, 二種方法可以解決,

1. 使用上述兩種隱藏工作列的方式, 可除去礙眼的 5 pixels gray bar, 但前提是工作列需設定自動隱藏, 此時 TomTom 螢幕工作範圍為 (螢幕底部 - 5 pixels) 範圍, 如 480 x 272 解析度, 便是 480 x 267.

2. 除了使用上述兩種隱藏工作列的方式外, 也可設定視窗工作範圍至 (螢幕底部 - 1 pixel), 這樣一來, TomTom 便何趨近全螢幕顯示, 如 480 x 272 解析度, 便是 480 x 271, 如下述 C++ 語法

SetRect(&rc, 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN)-1);
SystemParametersInfo(SPI_SETWORKAREA, 0, &rc, SPIF_UPDATEINIFILE);

這個方法唯一的缺點, 就是導航道路畫面和導航指示畫面間的空隙加大, 會有約 4 pixels 的空間出現.

Photobucket
<圖一>自動隱藏 Taskbar 時, 螢幕下方會有 5 pixels 的 gray bar

Photobucket
<圖二>隱藏 Taskbar 並將工作區加大, 螢幕下方 gray bar 不見了

透過同樣的程式技巧, 也可運用於某些無法全螢幕作業的軟體,

Photobucket
<圖三>螢幕上方有 explorer 的命令列

Photobucket
<圖四>隱藏螢幕上方的 explorer 的命令列, 達成全螢幕效果


View My Stats

4 則留言:

匿名 提到...

请问能否把Garmin去上面taskbar的程序贴出来啊
bow

Haily 提到...
作者已經移除這則留言。
Haily 提到...

Hi Notfaker,

我現在也有 gray bar 與畫面會不更新的困擾. 我是用 MIO H610 解鎖的(wince 4.2)
有沒有什麼方法解? 換哪些DLL?

謝謝啦!

notfaker 提到...

回覆: Haily 提到...

目前看到的原本就是非完整移植的純測試欣賞版, 會有一些問題就不足為奇. 很多人在談如何修正這些問題, 那裏在談就不是這個 Blog 所討論的主軸了.