Rotazione dello schermo su Pocket PC
-
08-07-2019 - |
Domanda
Sto sviluppando un'applicazione per Pocket PC che dovrebbe funzionare in modalità orizzontale.
Ho scritto la funzione SetScreenOrientation (int angle), che ruota lo schermo. Questa funzione viene chiamata all'avvio dell'applicazione e alla chiusura dell'applicazione. Voglio cambiare l'orientamento dello schermo quando minimizzo / massimizzo anche l'orientamento. Per fare ciò ho modificato la seguente funzione:
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);
}
}
Il problema è che quando minimizzo l'applicazione, la funzione viene eseguita più di una volta, quindi lo schermo ruota prima di 0 gradi e poi ruota di 270 gradi.
Durante il debug posso vedere che la seconda volta che viene eseguita la funzione viene eseguito il seguente codice 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;
...
}
}
Qualcuno conosce un altro modo per impostare l'orientamento dello schermo sull'applicazione minimizza / massimizza o qualsiasi trucco che potrebbe impedire l'esecuzione di funzioni multiple?
Soluzione
Per prima cosa, sembra probabile che SetScreenOrientation ti darà un'altra notifica OnSize, quindi vuoi rilevare chiamate ricorsive e non fare nulla quando ciò accade.
Ancora più importante, come fai a sapere quale orientamento l'utente vuole veramente? All'avvio dell'applicazione è possibile verificare l'orientamento e salvarlo. Ma se l'utente ha cambiato l'orientamento mentre era in esecuzione, non sarà contento quando lo cambi. Forse puoi controllare le notifiche delle modifiche alle impostazioni di sistema e rilevare se l'utente ha cambiato l'orientamento da solo.