Frage

Ich versuche, einige Drag-and-Drop-Funktionalität für ein Materialsystem zu implementieren, bei meiner Arbeit entwickelt. Ein Teil dieses System beinhaltet eine ‚Materialbibliothek‘, die als Repository wirkt, aufgeteilt in Gruppen, von gespeicherten Materialien auf der Festplatte des Benutzers.

Im Rahmen einiger UI Politur, ich hatte gehofft, dass ein ‚Highlight‘ Typ Funktion zu implementieren. Beim Ziehen und Ablegen, Fenster, die Sie rechtlich Feedback für den Benutzer zu verbessern fallen können ein Material auf sehr subtile Weise wird die Farbe ändern, dass dies eine gültige Aktion ist.

Ich ändere die Bar mit ‚Basic Material‘ (Nur ein CWnd mit einem CStatic) aus einem mittelgrauen Hintergrund hat, wenn auf einen blauen Hintergrund unhighlighed wenn schwebt über. Es funktioniert alles gut, die OnDragEnter und OnDragExit Nachrichten scheinen robust und ein Flag, die den Höhepunkt Status. Dann in OnCtrlColor ich dies tun:

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

Doch wie Sie im Screenshot sehen kann, sind die Gemälde ‚Glitches‘ unter dem gezogene Objekt, das ursprüngliche Grau vor Ort belassen. Es sieht wirklich hässlich und im Grunde verdirbt die ganze Wirkung.

Gibt es eine Möglichkeit, dieses Problem umgehen kann?

War es hilfreich?

Lösung 3

Danke für die Antworten Jungs, ajryan, scheinen Sie immer mit Hilfe für meine Fragen so besonders dank zu kommen.

Zum Glück dieses Mal war die Antwort recht einfach ....

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

Damit wird die Zeichnung des gezogenen Bildes ab und sendet dann eine Nachricht an das Fenster eingegeben wird in einem markierten Zustand neu zu zeichnen, dann zeichnet schließlich das Drag-Image über die Spitze. Scheint, den Trick getan zu haben.

Andere Tipps

Remote-Debugging ist ein Geschenk des Himmels für die visuelle Probleme debuggen. Es ist ein Schmerz zu gründen, sondern eine VM bereit für Remote-Debugging hat, wird sicher auszahlen.

Was ich tun möchte, ist eine Tonne Stützpunkte in meiner Farbenbehandlung gesetzt, sowie im Rahmen Lackcode selbst. Auf diese Weise können Sie effektiv das Gemälde „Frame einfrieren“, ohne es zu Borking durch Umklappen in devenv auf. Auf diese Weise können Sie das wahre Bild davon zu bekommen, wer Malerei in welcher Reihenfolge, und wo Sie haben die Chance, in einer Füllung zu brechen, wie Sie brauchen rect.

Es sieht fast wie die CStatic weiß nicht, dass es sich neu zu zeichnen muss, so dass die Hintergrundfarbe des ziehbar Objekt zurückgelassen wird. Vielleicht versuchen, die CStatic ungültig zu machen, und sehen, ob das überhaupt hilft?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top