[英]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.