Pregunta

Estoy desarrollando una aplicación para Pocket PC que debería ejecutarse en modo horizontal.

Escribí la función SetScreenOrientation (int angle), que gira la pantalla. Esta función se llama al inicio de la aplicación y al cerrar la aplicación. Quiero cambiar la orientación de la pantalla cuando también minimizo / maximizo la orientación. Para hacer esto, edité la siguiente función:

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);
    }
}

El problema es que cuando minimizo la aplicación, la función se ejecuta más de una vez, por lo que la pantalla gira primero a 0 grados y luego gira a 270 grados.

Durante la depuración puedo ver que la segunda vez que se ejecuta la función se ejecuta el siguiente código de 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;
...
}
}

¿Alguien sabe alguna otra forma de establecer la orientación de la pantalla en la aplicación para minimizar / maximizar o algún truco que pueda evitar la ejecución de múltiples funciones?

¿Fue útil?

Solución

Por un lado, parece probable que SetScreenOrientation le dará otra notificación de OnSize, por lo que desea detectar llamadas recursivas y no hacer nada cuando eso suceda.

Más importante aún, ¿cómo sabes qué orientación realmente quiere el usuario? Cuando su aplicación se inicia, puede verificar la orientación y guardarla. Pero si el usuario cambió la orientación mientras estaba ejecutando, no estará contento cuando la vuelva a cambiar. Tal vez pueda verificar las notificaciones de cambios en la configuración del sistema y detectar si el usuario cambió la orientación por sí mismo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top