Réglage de la barre de titre et les couleurs de bordure par programmation
Je suis en train de changer ma demande, s' de la barre de titre et les couleurs de bordure de la programmation. J'ai essayé beaucoup de choses mais sans succès, et a décidé de modifier ces couleurs à l'échelle du système. Parce qu'il est également acceptable pour moi de changer de barre de titre et les couleurs de bordure que ma demande est en cours d'exécution, et de revenir en arrière à la fin de mon application. (Gestion de l'environnement, avec un petit ensemble d'applications en cours d'exécution)
Est-il possible de changer ces couleurs de manière dynamique(processus à l'échelle ou à l'échelle du système, à moins que le processus de changement à l'échelle est possible)? Pouvez-vous suggérer un moyen pour réaliser cet objectif?
J'ai essayé quelque chose comme ce qui suit, mais il ne' t faire ce que je veux:
int aElements[2] = {COLOR_WINDOW, COLOR_ACTIVECAPTION};
DWORD aOldColors[2];
DWORD aNewColors[2];
aOldColors[0] = GetSysColor(aElements[0]);
aOldColors[1] = GetSysColor(aElements[1]);
aNewColors[0] = RGB(0x80, 0x80, 0x80); //light gray
aNewColors[1] = RGB(0x80, 0x00, 0x80); //dark purple
SetSysColors(2, aElements, aNewColors);
SetSysColors(2, aElements, aOldColors);
Merci d'avance
MODIFIER
C'est exactement ce que je veux:
- Si vous êtes sur Windows 10, vous êtes coincé avec une grosse goutte de blanc.
- Windows 8.1 pour le moment. J'ai oublié de mentionner que je vous remercie 🙂
- Remplacer
NC_PAINT
et tirer la barre de titre vous-même. Vous pouvez utiliserDrawFrameControl
de tirer tous les boutons et tout ce qui est nécessaire. - Avez-vous utilisé Microsoft Office dernièrement? Il n'y a plus de rendre la non-zone cliente d'une fenêtre qu'un appel à la
DrawFrameControl
. Ignorant les thèmes n'est pas très bon style. - Raymond Chen dit mieux que je le pouvais: Ne pas utiliser de l'état global de gérer un problème local de plus, Que faire si deux programmes a fait ça?
- Il est possible. De deux façons: 1. firefox façon. dwmextended pour le client. tirage de la barre de titre vous-même avec drawthemebackground... ou drawframecontrol. 2. supprimer la barre de titre anddraw tout le contenu vous-même.
- Je veux juste jouer avec les couleurs, les frontières et la barre de titre. Pouvez-vous me suggérer un exemple?
- Mais il n'est pas facile à personnalisé la barre de titre de la couleur. msdn.microsoft.com/en-us/library/windows/desktop/... catch22.net/tuts/custom-titlebar
- avez-vous essayé COLOR_WINDOW+1 et COLOR_ACTIVECAPTION+1 à la place?
- J'ai essayé celui-là, mais il n'a' t changer légende des couleurs 🙁
- La seule façon que je sais en œuvre de l'ensemble de
WM_NCPAINT
vous-même, mais ce n'est pas trivial. - Ok j'ai compris cela, j'ai cherché sur internet pendant des jours, mais je ne peux' t trouver tous les exemples qui change de ces couleurs. Avez-vous un tel exemple? Ma demande est très simple. Je veux seulement changer la barre de titre et les couleurs de bordure.
- La barre de titre & border font partie de la zone non client, et peint par WM_NCPAINT. Il n'y a pas de moyens faciles pour le personnaliser, c'est un tout-ou-rien.
- Avez-vous essayé d'utiliser le DWM? Question similaire (mais en C#) peut être trouvé ici: stackoverflow.com/questions/13660976/... Si vous pouvez "obtenir" la couleur, alors vous pouvez probablement le " set " de la couleur.
- Pouvez-vous expliquer pourquoi cette réponse n'est pas utile? J'ai clairement mentionné qu'à partir de ce bloc de code que vous pouvez avoir une idée.
Vous devez vous connecter pour publier un commentaire.
Je ne recommande pas à personnaliser la frontière et le titre de la redessiner.
Il est vraiment difficile de faire de la bonne façon. Office attire tout tout par lui-même dans l'espace client mais l'utilisation normale de la frontière.
À l'aide de NC_PAINT le droit chemin est une douleur et peut introduire d'scintillement.
En particulier le positionnement de la minimiser,maximiser et fermer les boutons est difficile, parce que tous les windows le fait différemment.
Également tenir compte de l'accessibilité, de plus grandes polices utilisées, les paramètres utilisateur personnalisés.
Quel est le but de changer les couleurs?
De changer les couleurs globales, vous devez avoir au moins séparer votre code
//appel cette fois au démarrage de votre application (par exemple, dans WM_CREATE)
//appel de ce lors de la fermeture de l'application (par exemple, dans WM_DESTROY)
Supprimer la deuxième SetSysColors(2, aéléments, aOldColors); ligne de code, ce qui revient à l'orignal couleur, puis essayez de nouveau. L'exemple de code que vous avez semble presque identique à la MSDN lien https://msdn.microsoft.com/en-us/library/windows/desktop/ms724940%28v=vs.85%29.aspx lien moins le sommeil. Leur exemple montre comment définir la couleur, dort et puis revient.
Je sais que vous êtes à l'aide de C++, mais je suis à portée de main avec C#. Afin que vous puissiez vous faire une idée, prendre regardez le code suivant, qui modifie l'apparence.
Aussi, vous pouvez utiliser le Dessin Personnalisé Frontières dans les Windows Forms projet de CodePlex. Ce projet est une petite bibliothèque qui permet aux utilisateurs de personnaliser Windows Forms, comme la personnalisation de windows " non-espace client.