2008-11-20 51 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通知,所以你想要检测递归调用并在发生这种情况时不做任何事情。

更重要的是,您如何知道用户真正想要的方向?当您的应用程序启动时,您可以检查方向并保存。但是,如果用户在碰巧正在跑步的时候改变了方向,当你将它改回来时他们不会很高兴。也许你可以检查系统设置更改的通知,并检测用户是否自己更改了方向。