Utworzono przezroczyste pole wyboru w Win32 C++. Zrobiłem to, ponieważ o ile wiem, nie możesz mieć przezroczystego checkboxa w natywnym Win32 i muszę użyć tego pola wyboru w instalatorze NSIS.Jak "wyczyścić" przezroczyste okno WinAPI
Mój problem: Podczas malowania nie wiem, jak usunąć przezroczyste tło, aby móc rysować na "przezroczystym płótnie". Jest to ważne, gdy użytkownik zmienia tekst w polu wyboru i muszę go odświeżyć. Sądzę, że natknąłem się na problem, który wszyscy muszą uzyskać dzięki przezroczystym oknom.
W jaki sposób mogę wyczyścić moje przezroczyste okno? Więc szukam porady na jakie techniki można użyć, aby przerysować okno takie jak:
- Wyślij wiadomość przemalować do okna nadrzędnego, które, miejmy nadzieję, przemalować rodzica (który jest siedzieć poniżej wyboru) withut wysyłania wiadomość do jej dzieci (tj. pole wyboru). Spróbowałem tego, sprawiło, że pole wyboru ma dużo migotania.
- Może tam jest przezroczysta funkcja pędzla/farby Nie wiem o tym, że mogę użyć do namalowania całego okna wyboru, które zasadniczo wyczyści okno? Próbowałem to zrobić, że okno wyboru czarne z jakiegoś powodu?
Mój kod:
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;
W ogóle nie kiedykolwiek chcesz wysłać wiadomość farby do innego okna, jeśli chcesz to przemalowany, unieważnia to prostokąt. –
Co robisz w module obsługi komunikatu WM_ERASEBKGND? –
@LarryOsterman hmm nigdy wcześniej nie pracowałeś z tą wiadomością? Nic więc teraz, co powinienem zrobić? –