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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top