2010-07-14 2 views
3

J'essaie de comprendre comment dessiner un bouton personnalisé sur la barre de légende des fenêtres lors de l'utilisation du thème Aero dans Vista ou Win7. J'ai besoin d'appliquer cela à un certain nombre d'applications différentes sans changer le code d'origine, donc ce sera dans une procédure de raccordement. Comme je ne peux pas modifier le code d'origine, je ne peux pas utiliser DwmExtendFrameIntoClientArea. Je suis assez sûr que cela peut être fait, ou du moins truqué vraiment bien, parce que j'ai vu une application qui peut le faire. J'ai regardé de près différentes fenêtres pendant que cette autre application est en cours d'exécution, et je ne crois pas qu'elles modifient le style de la fenêtre ou l'étendent dans la zone client.Comment puis-je dessiner un bouton personnalisé sur une barre de légende de thème Aero sans étendre la zone non-client?

En tant que test, j'ai essayé d'utiliser le message WM_NCPAINT pour peindre quelque chose dans la barre de légende. Lorsque le thème Aero est actif, rien de ce que je peins n'apparaîtra. Si je reçois un DC pour l'ensemble de l'écran au lieu de simplement la fenêtre, alors je peux "peindre" sur la barre de légende, mais bien sûr, il est vraiment peint à l'écran. Il y a toutes sortes de problèmes avec cette approche, alors ça ne marche pas. Si quelqu'un a de bonnes idées, ou même de bons conseils, j'apprécierais vraiment l'aide!

Répondre

0

Étant donné que vous ne pouvez pas étendre la zone client, une technique consiste à créer une fenêtre enfant flottante WS_EX_LAYERED, avec le propriétaire défini sur la fenêtre de niveau supérieur afin qu'il reste au-dessus de cette fenêtre uniquement.

Vous pouvez connecter le WndProc de la fenêtre cible aux messages WM_MOVE et WM_SIZE.

Questions connexes