J'ai quelques fenêtres ancrées aux bords/coins de la zone de travail, et j'ai besoin de savoir si/quand le WorkingArea de l'écran change afin que je puisse mettre à jour la position de ces fenêtres. J'ai essayé d'aborder cela en vain, si je me souviens bien.Comment puis-je savoir quand WorkingArea d'un écran change (c'est-à-dire que la barre des tâches est déplacée)?
Répondre
Un moyen serait d'enregistrer vos fenêtres comme une barre d'outils de bureau Application (AppBar) http://msdn.microsoft.com/en-us/library/bb776821(VS.85).aspx Ensuite, le système vous enverra des notifications lorsque la fenêtre doit être repositionné, redimensionné, etc. Par exemple, une barre d'accès reçoit une notification de ABN_POSCHANGED le système quand quelque chose se produit qui affectera la taille/position/visiblity etc. de l'AppBar. Voici un article de Code Project sur le faire avec C#, bien que je ne l'ai fait qu'en C++, donc je ne peux pas garantir l'article, mais ce devrait être un bon point de départ. http://www.codeproject.com/KB/dotnet/AppBar.aspx
Merci pour la réponse. Je noterai ceci comme une bonne idée, même si j'ai fini par adopter une approche différente (plus simple, mais pas aussi élégante) (voir article). – devios1
je fini juste prendre l'approche très simple de l'exécution d'un DispatcherTimer
qui fait tic tac toutes les deux secondes et vérifie simplement le workingarea courant contre la dernière vérification workingarea, l'envoi d'un événement si elles sont différentes.
1- Créez une propriété dans votre formulaire qui enregistre le dernier emplacement de workingArea ou de la dernière image (comme dans l'exemple de code).
2- Remplacer LocationChanged dans votre formulaire pour vérifier si le nouvel emplacement du formulaire est sur un nouveau WorkingArea. Si oui, le formulaire est sur un nouvel écran (zone de travail).
protected override void OnLocationChanged(EventArgs e)
{
base.OnLocationChanged(e);
WorkingScreen = Screen.AllScreens.ToList().FirstOrDefault(s => s.WorkingArea == Screen.GetWorkingArea(this));
}
Screen _WorkingScreen = null;
Screen WorkingScreen
{
get { return _WorkingScreen; }
set
{
if (WorkingScreen != value)
{
_WorkingScreen = value;
// Screen changed or working area changed!!!!
}
}
}
Salut Alnaouq et bienvenue sur le site! Ce serait bien si vous pouviez ajouter du texte pour clarifier comment et pourquoi votre exemple de code résout le problème pour lui donner un peu de contexte. – GeorgDangl
- 1. Comment mettre à jour Windows's Desktop WorkingArea?
- 2. Cacher l'application de la barre des tâches
- 3. Briser la barre des tâches
- 4. Barre inférieure flottante saccadée lorsqu'elle est déplacée
- 5. L'application est-elle visible dans la barre des tâches?
- 6. Comment savoir quand mon contrôle change de taille?
- 7. Arrêter la barre des tâches clignotante
- 8. Comment savoir quand Windows est inactif
- 9. Delphi: Comment savoir quand un TEdit change de taille?
- 10. Emplacement de la barre des tâches
- 11. Comment empêcher le formulaire en plein écran couvrant la barre des tâches?
- 12. .Net 4.0 parallèle - comment savoir quand la tâche est terminée
- 13. Win32: mode plein écran et la barre des tâches se cachant
- 14. lorsque Visual Studio est en mode plein écran, comment amener la barre des tâches "toujours au top"?
- 15. Barre des tâches Windows 7
- 16. wxPython: comment faire pour que l'icône de la barre des tâches réponde au clic gauche
- 17. Intégrer dans la barre des tâches
- 18. Icônes de la barre des tâches manquantes
- 19. Pour savoir si une fenêtre est en train d'être déplacée
- 20. Masquer la barre des tâches en utilisant C#
- 21. Comment fonctionne l'AutoHide de la barre des tâches (par programmation)
- 22. Comment trouver la hauteur de la barre des tâches?
- 23. Je dois savoir quand un VerticalPanel change de taille
- 24. Comment est-ce que je fais une image change quand la souris est dessus HTML?
- 25. Comment savoir quand une activité est organisée?
- 26. Comment savoir quand Big O est Logarithmique?
- 27. Comment savoir quand un wxFrame est fermé?
- 28. Comment définir l'icône de groupement de la barre des tâches
- 29. Comment afficher les notifications de la barre des tâches?
- 30. GTK + comment à la barre des tâches, faire fenêtre "solide"
Quel type de panneau utilisez-vous pour la zone de travail? Quelle langue, WinForms ou WPF? –
Eh bien j'utilise WPF pour la plupart (les fenêtres sont des fenêtres WPF), mais en utilisant WinForms pour obtenir le WorkingArea via System.Windows.Forms.Screen.PrimaryScreen.WorkingArea. – devios1