Question

J'essaie d'implémenter une fonctionnalité de glisser-déposer pour un système matériel développé au cours de mon travail. Une partie de ce système comprend une "bibliothèque de matériaux" qui agit comme un référentiel, divisé en groupes, contenant les matériaux enregistrés sur le disque dur de l'utilisateur.

Dans le cadre de certaines améliorations de l'interface utilisateur, j'espérais implémenter une fonctionnalité de type "surbrillance". Lorsque vous faites glisser et déposez, les fenêtres sur lesquelles vous pouvez légalement déposer un matériau changeront très subtilement de couleur pour améliorer les réactions de l'utilisateur selon lesquelles il s'agit d'une action valide.

Je modifie la barre avec les «matériaux de base» (juste un CWnd avec un CStatic) pour ne pas avoir un fond gris moyen une fois que la surbrillance est allumée sur un fond bleu lors du survol. Tout fonctionne bien, les messages OnDragEnter et OnDragExit semblent robustes et définissent un indicateur indiquant le statut de surbrillance. Ensuite, dans OnCtrlColor, je fais ceci:

    if (!m_bHighlighted) {
    pDC->FillSolidRect(0, 0, m_SizeX, kGroupHeaderHeight, kBackgroundColour);
}
else {
    pDC->FillSolidRect(0, 0, m_SizeX, kGroupHeaderHeight, kHighlightedBackgroundColour);
}

Cependant, comme vous pouvez le constater sur la capture d'écran, le tableau présente des "défauts" sous l'objet déplacé, laissant le gris d'origine à la place. Il a l'air vraiment moche et gâte fondamentalement tout l'effet.

Y a-t-il un moyen de contourner cela?

Était-ce utile?

La solution 3

Merci pour les réponses les gars, Ajryan, vous semblez toujours trouver de l'aide pour mes questions, donc merci beaucoup.

Heureusement, cette fois, la réponse était assez simple ....

ImageList_DragShowNolock(FALSE);
m_pDragDropTargetWnd->SendMessage(WM_USER_DRAG_DROP_OBJECT_DRAG_ENTER, (WPARAM)pDragDropObject, (LPARAM)(&dragDropPoint));
ImageList_DragShowNolock(TRUE);

Ceci désactive le dessin de l'image glissée, puis envoie un message à la fenêtre en cours de saisie pour le repeindre dans un état surligné, puis redessine l'image glissée au-dessus. Semble avoir fait le tour.

Autres conseils

Le débogage à distance est une aubaine pour le débogage des problèmes visuels. Il est difficile à configurer, mais il est certain qu’avoir une machine virtuelle prête pour le débogage à distance sera rentable.

Ce que j'aime faire, c'est définir une tonne de points d'arrêt dans ma gestion de la peinture, ainsi que dans le code de peinture de la structure elle-même. Cela vous permet de bien "geler l'image". la peinture sans la bouger en tombant dans devenv. De cette façon, vous pouvez obtenir une image fidèle de qui peint dans quel ordre et où vous avez la possibilité de percer un remplissage comme vous le souhaitez.

On dirait presque que le CStatic ne sait pas qu’il doit se repeindre lui-même. La couleur de fond de l’objet déplaçable est donc laissée de côté. Peut-être essayer d’invalider la CStatic et voir si cela aide vraiment?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top