Pergunta

Estou desenvolvendo um aplicativo para Pocket PC que deve ser executado no modo paisagem.

Eu escrevi a função SetScreenorientation (int ângulo), que gira a tela. Esta função é chamada no Start e no Application Start e no Application. Quero alterar a orientação da tela quando minimizar/maximizar a orientação também. Para fazer isso, editei a seguinte função:

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

O problema é que, quando minimizo o aplicativo, a função é executada mais de uma vez, a tela primeiro gira de volta para 0 graus e depois gira para 270 graus.

Enquanto depuração, posso ver que na segunda vez, a função é executada, a seguinte parte do código Wincore é executada:

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

Alguém conhece outra maneira de definir a orientação da tela no aplicativo Minimize/maximize ou qualquer truque que possa impedir a execução de múltiplas funções?

Foi útil?

Solução

Por um lado, parece provável que a SetScreenorientation ofereça outra notificação onsize, então você deseja detectar chamadas recursivas e não fazer nada quando isso acontecer.

Mais importante, como você sabe qual orientação o usuário realmente deseja? Quando o seu aplicativo é iniciado, você pode verificar a orientação e salvar isso. Mas se o usuário mudar a orientação enquanto você estiver em execução, eles não ficarão felizes quando você a alterar. Talvez você possa verificar as notificações das configurações do sistema alterações e detectar se o usuário alterou a orientação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top