Fokus?



  • wie kann ich überprüfen ob meine anwendung also das fenster den fokus hat und nich minimiert oder von anderen fenstern überdeckt ist?



  • Ich bin mir nicht sicher, was Du tatsächlich bewirken möchtest, aber ich kann es mal versuchen, zu erläutern.

    Mit GetActiveWindow bekommst Du das aktive Fenster. Dieses kannst Du mit Deinem Eigenen vergleichen. Wenn Deine Anwendung allerdings eine Dialogbox offen hat und diese aktiv ist, dann liefert GetActiveWindow diese Dialogbox als aktives Fenster.

    Deshalb glaube ich auch, dass es sinnvoller ist, nicht mit dem Kriterium "aktives Fenster" zu arbeiten. Um aber ein besseres Kriterium zu finden, müsste man das tatsächliche Vorhaben kennen, wie ich anfangs erwähnt habe.

    Gruß André



  • mit fokus meinte ich einfach, dass das fenster gerade im vordergrund is.

    oder anders das programm wesen task gerade in der leiste eingedrückt is und desen titelleiste farbig und nich grau...
    ich hoffe ihr wisst jetzt was ich meine.



  • Also ist die eigentliche Frage, ob die Applikation aktiv ist.
    Stellt sich die nächste Frage: Reicht es aus, wenn Du bemerkst, wann jemand die Applikation aktiviert, oder musst Du es ständig wissen/abfragen können?

    Für den ersten Fall gibt es die Möglichkeit, die Message WM_ACTIVATE. Mit dieser Nachricht erfährt man, ob man den Fokus erhält oder gerade verliert. Ich bin mir nicht sicher, aber ich glaube, das wird jeweils an die Parent-Fenster weitergereicht, bis es jemand auswertet.

    Wenn Du MFC verwdnen kannst, ist es noch einfacher. Dort kannst Du OnActivateApp oder OnActivate abfangen.

    Gruß André



  • also am besten wäre es wenn ich es abfragen könnte!
    ich arbeite nich mit dem mfc.



  • In dem Fall kannst du dir auch einfach den letzten Aktiv-Status merken:

    bool istact=true;
    
    //in der Message-Auwertung:
      ...
      case WM_ACTIVATE:
      {
        BYTE act=msg.wParam & 0xFF;
        istact= (act!=WA_INACTIVE);
        break;
      }
    
    //irgendwo anders:
    if(istact) TRACE("Funktion XYZ - ich bin aktiv\n");
    

    (PS zur Erklärung: WM_ACTIVATE Nachricht)



  • ja an sowas hatte ich auch schon gedacht,
    danke


Anmelden zum Antworten