Win32 C++ uygulamasında Şeffaf Onay Kutusu oluşturdum. Bunu yaptık çünkü bildiğim kadarıyla yerel win32'de şeffaf bir onay kutunuza sahip olamıyorsunuz ve bu onay kutusunu NSIS yükleyicisinde kullanmam gerekiyor.WinAPI Şeffaf Penceresi Nasıl Temizlenir
Sorunum: Yeniden boyama yaparken, saydam arka planımı nasıl sileceğimi bilmiyorum, böylece "temiz tuval" üzerine çizim yapabilirim. Bu, kullanıcı onay kutusunun içindeki metni değiştirdiğinde ve tekrar yazdırmam gerektiğinde önemlidir. Sanırım herkesin şeffaf pencerelerle alması gereken problemle karşılaştım.
Saydam penceremi temizleyebilme yolu nedir, Not WinAPI'yi tanıyorum, pencereyi yeniden boyamanız nedeniyle AFAIK penceresini gerçekten temizleyemezsiniz. gönderme withut
- umarım (onay kutusunun altındaki sit olan) üst baştan boyayacak ana penceresine bir rötuş mesaj gönder: Ben pencereyi gibi yeniden çizmek için kullanabileceğiniz hangi teknikleri konusunda tavsiye arıyorum Çocuklarına bir mesaj (yani, onay kutusu). Bunu denedim, onay kutusunun çok fazla titremesi var.
- Belki de, aslında pencereyi temizleyecek olan tüm onay kutusu penceresini boyamak için kullanabileceğim şeffaf bir fırça/boya fonksiyonu var mıdır? Bunu denedim, herhangi bir nedenle onay kutusu penceresini siyah yapar mı?
Kodum:
case WM_SET_TEXT:
{
// set checkbox text
// Technique 1: update parent window to clear this window
RECT thisRect = {thisX, thisY, thisW, thisH};
InvalidateRect(parentHwnd, &thisRect, TRUE);
}
break;
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
// Technique 2:
SetBkMode(hdc, TRANSPARENT);
Rectangle(hdc, thisX, thisY, thisW, thisH); // doesn't work just makes the window a big black rectangle?
EndPaint(hwnd, &ps);
}
break;
Hiç başka pencereye bir boya mesaj göndermek istemiyoruz WS_CLIPCHILDREN bunu yeniden boyanması istiyorsanız, pencere stilini kaldırmak o oranlı dikdörtgen geçersiz. –
WM_ERASEBKGND mesaj işleyicide neler yapıyorsunuz? –
@LarryOsterman hmm daha önce bu mesajla hiç çalışmadı mı? Yani şimdi hiçbir şey, ne yapmalıyım? –