在發表了Windows Phone 7發布啦以後,前天晚上又看了一些Windows Phone 7的視頻。
來自channel9的視頻,介紹了新出的Windows Phone 7的功能,看完這個視頻,第一感覺Windows Phone is awesome. 於之前的Windows Mobile PPC甚至Windows Mobile 6.5差別很大。由於沒有拿到真機,也沒有ROM,所以只能猜想一下。
多點觸摸(Multi-touch)
Multi-touch似乎成為觸控螢幕行動裝置的必備功能了,很多人也把之作為iPhone的制勝法寶,其實微軟在很久以前就推出了Microsoft Surface支援Multi-touch。
從視頻看Windows Phone7是完全支援Multi-touch的。其實之前HTC也類比了一些Multi-touch的功能,但是只能在HTC的Today Shell裡面使用,不能用於其他應用程式,所以作用不大,這次微軟推出自己的Multi-touch,我想是從底層實現的,能支援任何的應用程式,在視頻中示範了如何在IE上使用Multi-touch,效果還是很理想的。我想微軟可以像在Windows Mobile 6.5支援Gesture的API那樣通過訊息來支援多點觸摸。下面是iToday使用Gesture的代碼。
//
// FUNCTION: ProcessGesture(HWND, UINT, WPARAM, LPARAM)
//
// PURPOSE: Handles processing of WM_GESTURE command.
//
BOOL PanelManager::ProcessGesture(HWND hWnd, UINT, WPARAM wParam, LPARAM lParam)
{
BOOL fHandled = FALSE;
GESTUREINFO gi = {sizeof(gi)};
// Go get the gesture - will return FALSE if the gesture engine is not present in the system.
if (TKGetGestureInfo(reinterpret_cast<HGESTUREINFO>(lParam), &gi))
{
PanelBase *pPanel = m_oSwitcher.GetActivePanel();
if ( NULL == pPanel)
{
return FALSE;
}
switch (wParam)
{
case GID_PAN:
{
if (m_fAnimating)
{
//如?果?當?前?正?有?Animation進?行?,?停?止?並?顯?示?當?前?的?視?圖?
pPanel->SnapBackToFrame();
m_fAnimating = false;
}
if (GF_BEGIN == (gi.dwFlags & GF_BEGIN))
{
pPanel->RecordLastPanPoint(gi.ptsLocation);
}
else
{
pPanel->CalculateStartPointInMemDC(gi.ptsLocation);
pPanel->RecordLastPanPoint(gi.ptsLocation);
pPanel->ProcessPan( gi.ptsLocation );
}
fHandled = TRUE;
}
break;
case GID_SCROLL:
{
//要?考?慮?Switcher區?域?的?動?畫?和?Panel區?域?的?動?畫?是?否?可?以?同?時?進?行?,?目?前?這?樣?做?是?不?可?以?同?時?的?。?
if (!m_fAnimating)
{
HRESULT hr = pPanel->ProcessPanEnd(
(int)GID_SCROLL_VELOCITY(gi.ullArguments),
(int)GID_SCROLL_ANGLE(gi.ullArguments) );
if ( SUCCEEDED(hr) )
{
m_fAnimating = true; // we are now animating
}
}
fHandled = TRUE;
}
break;
case GID_HOLD:
break;
case GID_SELECT:
break;
case GID_END:
{
//要?考?慮?Switcher區?域?的?動?畫?和?Panel區?域?的?動?畫?是?否?可?以?同?時?進?行?,?目?前?這?樣?做?是?不?可?以?同?時?的?。?
if (!m_fAnimating)
{
HRESULT hr = pPanel->ProcessPanEnd( 0, 0 );
if ( SUCCEEDED(hr) )
{
m_fAnimating = true; // we are now animating
}
}
// GID_BEGIN/GID_END should always be send to DefGestureProc
}
break;
}
}
else
{
DebugPrintString(L"The gesture engine is not present in the system.\n");
}
return fHandled;
}
WPARAM wParam和LPARAM lParam是萬能變數,能自由轉換,這樣也能支援多點觸摸。
同步
Windows Moible 6.5推出了MyPhone功能,可以把手機上的資訊同步到微軟的線上帳號上。同時Windows Mobile還支援傳統的同步方式,例如ActiveSync。關於ActiveSync可以參考 Windows Embedded CE和Windows Mobile下ActiveSync開發 。
從視頻看,微軟的人說Windows Phone 7支援Zune Software來sync,這是ActiveSync compatible 的協議,如果是ActiveSync的協議,我想我們還是可以自由操控Windows Phone 7,原先基於ActiveSync開發的同步軟體還是可以繼續使用。之前看過一篇關於iPhone七宗罪的文章,其中之一是iPhone 只能使用iTune來同步資料,而且只能同步到一台機器去,不能用其他機器去同步資料,我希望Windows Phone 7不會把這個缺點複製了。之前網上一直流行說新版的Windows Phone7會封閉起來,不允許自己同步資料,不允許自己安裝軟體,希望不是這樣。
多任務
在視頻中看不到任何多任務的資訊,因此是否支援多任務在Windows Phone 7論壇上引起巨大的討論,見這Multitasking support連結,一下子就到13頁了。單任務也是iPhone七宗罪的其中一宗,有iPhone支援者說單任務是為了更好的提高使用者體驗,確實有這個原因。使用的Windows Mobile的時候,經常給那個關閉按鈕"X"所迷惑,最小化的程式也很難找到。因此有些手機廠商為使用者提供一個soft reset按鈕,當系統運行慢的時候可以重啟。iPhone不存在這個問題,但是同時又有其他問題,例如接到電話的時候其他程式會自動結束了。在視頻中,Windows Phone7的任務切換是點擊Start按鈕,這也是Windows Phone 7的三個硬體按鈕之一,作用重大,但是每次都會到Hubs頁面,到底有沒有關閉原先程式卻不知道。
其實支援多任務是必須的,Windows Phone7底層肯定支援多任務,否則Hubs頁面不可能同時更新不同的Hub的資訊。但是微軟是否給開發人員或者使用者提供多任務,多任務如何切換還是未知數,多任務做的不好會大大影響使用者體驗,原先的Windows Mobile就是這樣,希望微軟這次有大突破。
SDK
在First Windows Phone 7 apps sighted!文章中說,微軟會在下個月發布Windows Phone 7 SDK。但是不是官方資訊,不知道可靠程度。
當前在Windows Mobile 6.5下有三種開發模式: Native C++, .NET Compact Framework和Widget。可以參考一下Windows Mobile開發,Native C++ PK .NET Compact Framework 和Windows Mobile 6.5 新功能widget開發。
但是我更加期待的是Silverlight for Windows Phone或者WPF for Windows Phone。XNA等等模式,我不怕學習,我就怕我們還是需要用Win32來開發Windows Phone7,這會讓我徹底失望,可以想象如果用GDI做那個Hubs的頁面需要多長時間,不是不能做而是成本太大,開發人員會失去興趣。關於Silverlight可以參考 Silverlight for Windows Mobile非官方預覽。
我十分期待SDK,看能為我們帶來什麼驚喜。
發布時間
微軟的官方發布時間是holiday,什麼時候是holiday,這次微軟玩懸念。我想微軟是不想玩的,但是Windows Phone7還沒有完全準備好,到底什麼時候準備好,估計微軟還沒有準確的計劃,所以就說holiday。在美國一年有三大holiday,複活節,感恩節和聖誕節。複活節在4月初,是紀念耶穌為世人贖罪而死,然後複活的故事。不知道Windows Phone7會不會在複活節的時候覆活一下。如果等到聖誕節那就太久了,看看Android的升級速度,聖誕的時候Hubs都做好了,Windows Phone還在生產線上。
這些都是我的猜想,歡迎討論。