comment changer la couleur d'arrière-plan d'un contrôle de texte statique (quand un bouton est enfoncé ou dans un timer) dans mfc?
Je sais que cela peut être fait avec OnCtlColor(), mais il change de couleur lorsque le formulaire est chargé et les textes statiques sont à tirer, je veux le faire après la forme est chargé, avec un timer peut-être, j'ai cherché une solution mais je ne l'ai pas trouver, c'est ce que j'ai écrit:
void CTabFive::OnBnClickedButton1()
{
//TODO: Add your control notification handler code here
CWnd* pWnd = this->GetDlgItem(IDC_Chromosome1);
CDC* dc = pWnd->GetDC();
dc->SetBkColor(RGB(200,0,0));
pWnd->Invalidate();
pWnd->UpdateWindow();
Invalidate();
UpdateWindow();
//flag = true;
}
OnCtlColor devrait être appelée à chaque fois lorsqu'un contrôle est redessiné. Essayez d'invalider la fenêtre, et écrire OnCtlColor fonction qui fonctionne en fonction de l'état actuel - par exemple, l'utilisation de certaines variables définies par WM_TIMER gestionnaire.
Est-il de toute façon à invalider juste un contrôle de la forme non pas l'ensemble de la forme? parce que quand j'utilise l'invalider retrace l'ensemble de la forme, et il provoque un clin d'oeil!
Est-il de toute façon à invalider juste un contrôle de la forme non pas l'ensemble de la forme? parce que quand j'utilise l'invalider retrace l'ensemble de la forme, et il provoque un clin d'oeil!
OriginalL'auteur Saman Hakimzadeh Abyaneh | 2012-08-17
Vous devez vous connecter pour publier un commentaire.
Pas de temps d'attente est nécessaire. Ici, j'ai un bool m_coloured membre de la classe initialisé à false, et basculé dans la presse le bouton. Le OnCtlColor va dessiner dans le rouge ou dans le système de couleur en fonction de la valeur de m_coloured. Fonctionne très bien.
Pas facilement parce que les OnCtlColor est remplacée par la boîte de dialogue pas le contrôle. Si vous voulez seulement le contrôle de l'invalider, alors vous devez sous-classe de la CStatic de contrôle, remplacer seulement c'est OnCtlColor (pas la boîte de dialogue), et de l'appeler seulement c'est l'Invalider la place.
À l'aide de votre code, il ne changé la couleur de fond de texte écrit de la zone. Il ne dessine pas toute la couleur d'arrière-plan de texte statique de contrôle. Comment puis-je faire cela?
Je peux la couleur de l'ensemble de fond en retournant
(HBRUSH)CreateSolidBrush(yourDesiredCOLORREF)
deOnCtlColor
. Cependant, je n'ai pas réussi également à la couleur modale de cadre de bordure (si vous en avez un).OriginalL'auteur acraig5075