2008-11-20 50 views
2

我正在開發一款應該以橫向模式運行的袖珍PC。Pocket PC上的屏幕旋轉

我寫了旋轉屏幕的函數SetScreenOrientation(int angle)。該函數在應用程序啓動和應用程序關閉時調用。我想在最小化/最大化方向時更改屏幕方向。要做到這一點我編輯下面的函數:

void CMainFrame::OnSize(UINT nType, int cx, int cy) 
{ 
    RECT r; 
    GetWindowRect(&r); 

    RECT rstatus; 
    rstatus.left = 0; 
    rstatus.top = 0; 
    rstatus.right = r.right; 
    rstatus.bottom = TOOLBAR_HEIGHT; 
    m_wndStatus.MoveWindow(&rstatus, TRUE); 

    RECT rcamera; 
    rcamera.left = 0; 
    rcamera.top = 0; 
    rcamera.right = r.right; 
    rcamera.bottom = r.bottom - TOOLBAR_HEIGHT; 
    m_wndCameraView.MoveWindow(&rcamera, TRUE); 

    if(nType == SIZE_MAXIMIZED) 
    { 
     CScreenOrientation::SetScreenOrientation(270); 
    } 
    if(nType == SIZE_MINIMIZED) 
    { 
     CScreenOrientation::SetScreenOrientation(0); 
    } 
} 

的問題是,當我最小化應用程序,以便在屏幕第一旋轉回到0度功能被執行一次以上,然後將其旋轉到270度。

在調試,我可以看到該函數執行下面的一段wincore代碼的第二次執行:

BOOL CWnd::OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult) 
{ 
... 
switch (lpEntry->nSig) 
    { 
... 
case AfxSig_v_u_ii: 
     (this->*mmf.pfn_v_u_i_i)(static_cast<UINT>(wParam), LOWORD(lParam), HIWORD(lParam)); 
     break; 
... 
} 
} 

有誰知道任何其他方式來設置應用程序的屏幕方向最小化/最大化或任何可能阻止多個函數執行的技巧?

+0

一些WinMo設備有硬件QWERTY鍵盤(HTC Raphael,Sony X1等)。當鍵盤打開時,屏幕應設置爲橫向模式。所以你必須檢查什麼屏幕模式應該設置退出。順便說一句,我有類似的問題。 – 2008-11-20 09:07:01

回答

1

首先,看起來SetScreenOrientation可能會給你另一個OnSize通知,所以你想要檢測遞歸調用並在發生這種情況時不做任何事情。

更重要的是,您如何知道用戶真正想要的方向?當您的應用程序啓動時,您可以檢查方向並保存。但是,如果用戶在碰巧正在跑步的時候改變了方向,當你將它改回來時他們不會很高興。也許你可以檢查系統設置更改的通知,並檢測用戶是否自己更改了方向。