簡體   English   中英

Pocket PC上的屏幕旋轉

[英]Screen Rotation on 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;
...
}
}

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

一方面,SetScreenOrientation可能會給您另一個OnSize通知,因此您希望檢測遞歸調用,並且在發生這種情況時不執行任何操作。

更重要的是,您如何知道用戶真正想要的方向? 當您的應用程序啟動時,您可以檢查方向並保存。 但是,如果用戶恰巧在跑步時更改了方向,那么當您將其改回時,他們將不會感到高興。 也許您可以檢查系統設置更改的通知,並檢測用戶是否自行更改了方向。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM