2008-09-16 15 views
0

Çalışmamda geliştirilen bir malzeme sistemi için bazı sürükle ve bırak işlevlerini uygulamaya çalışıyorum. Bu sistemin bir parçası, kullanıcının sabit diskinde kayıtlı malzemelerin gruplara bölünmesiyle depo olarak görev yapan bir 'Malzeme Kütüphanesi' içerir. Bazı UI polonyalarının bir parçası olarak, bir "vurgu" türü özelliğini uygulamayı umuyordum. Sürükleyip bırakırken, bir malzemeyi yasal olarak bırakabileceğiniz pencereler, kullanıcının geçerli bir işlem olduğu şeklindeki geri bildirimi iyileştirmek için rengi çok ince bir şekilde değiştirecektir.MFC Boyama Glitch'i nasıl düzeltilir?

Çubuğu, üzerinde gezinirken mavi bir arka plana getirilmemiş bir orta gri arka plana sahip olan 'Temel Malzemeler' (Sadece bir CStatik CWnd ile) ile değiştiriyorum. Her şey iyi çalışıyor, OnDragEnter ve OnDragExit mesajları sağlam görünüyor ve vurgu durumunu belirten bir bayrak ayarlıyor. Sonra OnCtrlColor içinde bunu:

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

Ancak, ekran görüntüsünde görebileceğiniz gibi, yerinde orijinal gri bırakarak sürüklenen nesnenin altına boyama 'hataları',. Gerçekten çirkin görünüyor ve tüm etkiyi temelde bozuyor.

Bundan kurtulmanın bir yolu var mı?

cevap

0

Cevaplar çocuklar için teşekkürler, ajryan, her zaman sorularım için fazladan yardımlarla karşınızdayız. Sonra Neyse ki

cevap oldukça basit ....

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

Bu sürüklenen görüntünün çizimi kapatır, daha sonra pencereye bir ileti vurgulanmış durumda yeniden boyamak için girilen gönderir bu sefer, sonunda sürükleme görüntüsünü en üste yeniden çizer. Hile yapmış gibi görünüyor.

0

Neredeyse, CStatic'in kendisini yeniden boyaması gerektiğini bilmediği gibi görünüyor, böylece sürüklenebilir nesnenin arka plan rengi geride kalıyor. Belki de CStatic'i geçersiz kılmaya çalışın ve bunun işe yarayıp yaramadığını görün.

1

Uzaktan hata ayıklama, görsel sorunları hata ayıklamak için bir ilahidir. Kurmak için bir acıdır, ancak uzaktan hata ayıklama için bir VM'ye sahip olmak kesin olarak para ödeyecektir.

Yapmaktan hoşlandığım şey, boya işlemimin yanı sıra çerçeve boya kodunun kendisinde bir ton kesme noktaları belirlemektir. Bu, etkin bir şekilde, çerçeveyi felakete uğratmadan vesilesiyle “dondurmak” sağlar. Böylelikle kimin kimin resmini çizdiğine dair gerçek resmini ve ihtiyacınız olan şekilde düzeltmek için bir şansı yakalama şansını elde edebilirsiniz.