2009-03-07 3 views
0

için çizim sonra yeniden çizme ekran en DC kullanarak :: GetDC (NULL). Win32 C++ 'da geliştirilmiştir.Kuvvet ekran ekranın DC C++ Windows Mobile özel SIP oluşturma ve ben onu seçili resmi tekabül ediyor çizmek klavyede bir düğme üzerinde kullanıcı presler veya "üzerine geldiğinde" (iPhone-esque) için yaşıyorum

Sorunum, daha önce çizilen anahtarın silinmesi için ekranın kendisini yeniden çizilememesidir. Onu zorlamak için düşünebildiğim her şeyi denedim, :: RedrawWindow(), NULL veya GetWindow işlevlerinin HWND ve tüm açılan bayrakları (INVALIDATE | UPDATENOW | ERASENOW ALLCHILDREN vb. Ayrıca, rect'i geçersiz kılmayı denedim ve :: GetActiveWindow ve :: GetForegroundWindow'u kullanarak temeldeki uygulamanın bir rötuşunu zorlamayı denedim: :: GetDesktopWindow, vb. Kullanarak varyasyonlarım var. Windows Mobile cihazımda kullanıyorum. Herhangi bir fikri olan var mı? Herhangi bir yardım büyük takdir edilecektir.

İkilemimi göstermek için bazı ekran görüntüleri ekledim. peşin

Before Screenshot
After Screenshot

Before http://img13.imageshack.us/img13/9861/cezoom1.pngAfter http://img3.imageshack.us/img3/7481/cezoom2.png

teşekkürler!

cevap

1

Aksine arka DC için çizim daha, neden geçici bir pencere oluşturmak değildir ve bu içine çekmek? Pencereyi yok ettiğinizde, arka plan otomatik olarak yeniden boyanmalıdır.

Sadece tahmin ediyorum, çünkü Windows Mobile'ı bilmiyorum, ancak bu, Windows'un DC'ye çizilen son şeyi önbelleğe alması ve pencereyi geçersiz kıldığınızda her defasında yeniden boyama olması olabilir.

+0

Bu ilginç bir yaklaşım, ona bir şans vereceğim. DC'nin önbellekleme yaptıklarına inanmıyorum çünkü sorun sadece düğmeler sip panelimin dışına çıkarıldığında (üstte) ortaya çıkar. Ekrana çizilse bile, panelde düğmelerle bu prob yok. –

+0

Panelin içinde düğmeler dediğimde, mavi seçili açılan düğmeleri kastediyorum. (tüm diğer düğmeler bir bitmap'e çizilir ve ardından ekranımdaki değil, ekranımdaki DC'ye yanıp söner) –

1

Ekranda InvalidateRect'i denediniz mi?

+0

ekran hWnd demek istediğim :: GetDesktopWindow(), doğru mu? Eğer öyleyse buysa evet, ekrana karşı bütün normal çağrıları denedim. –

İlgili konular