2017-06-02 9 views
-2

J'ai passé de nombreuses heures sur google et n'ai pas trouvé de résultats pertinents sur ce sujet particulier.vérifier l'application actuelle cliquée dans la barre des tâches? (C++, Windows API)

J'ai une application que je veux être minimisée lorsque l'utilisateur clique dessus dans la barre des tâches (si elle n'est pas déjà réduite). Le problème semble être lié au fait que la fenêtre est sans frontières. Lorsque je le mets à avoir une bordure, il se réduit très bien en cliquant dessus dans la barre des tâches, sans aucune intervention de code. Mais j'ai besoin de la fenêtre sans bordure parce que je fais une "bordure personnalisée" en utilisant la zone client.

tl; dr comment vérifier si l'application en cours est cliquée dans la barre des tâches?

Merci beaucoup! Samuel

+2

Mauvaise question. Vous êtes intéressé à savoir que votre fenêtre devrait minimiser (ou pourquoi elle ne se réduit pas automatiquement), mais vous posez plutôt des questions sur votre solution. C'est ce qu'on appelle le [problème XY] (https://meta.stackexchange.com/q/66377/205381). – IInspectable

+0

Cliquer sur le bouton de la barre des tâches envoie les notifications normales 'WM_SYSCOMMAND' à la fenêtre, comme' SC_MINIMIZE' et 'SC_RESTORE'. La frontière (ou l'absence d'un) ne devrait pas affecter cela. Votre code gère-t-il correctement ces messages lorsque vous supprimez la bordure? –

+0

Je ne sais pas pourquoi j'ai eu deux réputation négative de cela. C'est une question parfaitement valide. N'y a-t-il pas de place sur Internet je ne suis pas attaqué par des trolls? Eh bien, au moins, j'ai obtenu une réponse à ma question et j'ai réduit ma demande. C'est ce qui est important. –

Répondre

3

Il n'est pas nécessaire de bricoler avec la barre des tâches.

Assurez-vous simplement que les styles WS_MINIMIZEBOX|WS_MAXIMIZEBOX sont définis pour votre fenêtre. Sinon, votre fenêtre ne traitera pas WM_SYSCOMMAND avec wParam de SC_MINIMIZE et SC_RESTORE.

Certains éditeurs de ressources comme celui de Visual Studio ne permettent pas de définir WS_MINIMIZEBOX|WS_MAXIMIZEBOX lorsque vous supprimez la bordure de la fenêtre standard. Vous pouvez ajouter les styles par programme comme ceci:

DWORD style = GetWindowLong(hwnd, GWL_STYLE); 
SetWindowLong(hwnd, GWL_STYLE, style | WS_MINIMIZEBOX | WS_MAXIMIZEBOX);