Frage

Ich entwickle eine Anwendung für Pocket PC, die im Landschaftsmodus ausgeführt werden soll.

Ich habe die Funktionsetscreenorientation (int Winkel) geschrieben, die den Bildschirm dreht. Diese Funktion wird auf die Anwendungsstart und bei der Anwendung Schließung aufgerufen. Ich möchte die Bildschirmausrichtung ändern, wenn ich auch die Ausrichtung minimiere/maximale. Dazu habe ich die folgende Funktion bearbeitet:

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

Das Problem ist, dass die Funktion, wenn ich die Anwendung minimiere, mehr als einmal ausgeführt wird, sodass der Bildschirm zuerst auf 0 Grad zurückgedreht und dann auf 270 Grad gedreht wird.

Während des Debuggens kann ich sehen, dass das zweite Mal, dass die Funktion ausgeführt wird, der folgende Wincore -Code ausgeführt wird:

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

Kennt jemand eine andere Möglichkeit, die Bildschirmausrichtung auf der Anwendung festzulegen, minimieren/maximieren oder einen Trick, der eine mehrfache Funktionsausführung verhindern könnte?

War es hilfreich?

Lösung

Zum einen scheint es wahrscheinlich, dass Setscreenorientierung Ihnen eine weitere On -Grat -Benachrichtigung geben wird, sodass Sie rekursive Anrufe erkennen und nichts tun möchten, wenn dies passiert.

Noch wichtiger ist, woher wissen Sie, welche Orientierung der Benutzer wirklich will? Wenn Ihre Bewerbung startet, können Sie die Orientierung überprüfen und speichern. Aber wenn der Benutzer die Orientierung geändert hat, während Sie zufällig ausgeführt wurden, werden er nicht glücklich sein, wenn Sie sie wieder ändern. Vielleicht können Sie Benachrichtigungen über Systemeinstellungen ändert und feststellen, ob der Benutzer die Orientierung selbst geändert hat.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top