Как «очистить» прозрачное окно WinAPI

Я создал прозрачный флажок в Win32 C++. Я сделал это, потому что, насколько я знаю, у вас не может быть прозрачного флажка в родном win32, и мне нужно использовать этот флажок в установщике NSIS.

Моя проблема:При перерисовке я не знаю, как стереть прозрачный фон, чтобы рисовать на «чистом холсте». Это важно, когда пользователь меняет текст внутри флажка, и мне нужно его перекрасить. Думаю, я столкнулся с проблемой, с которой все должны столкнуться с прозрачными окнами.

Как я могу очистить свое прозрачное окно . Обратите внимание, что я знаком с WinAPI, и вы не можете действительно очистить окно, потому что вы просто перерисовываете окно. Поэтому я ищу совета о том, какие методы я могу использовать для перерисовки окна, например:

  • Отправьте сообщение о перерисовке родительскому окну, которое, как мы надеемся, перерисует родительское окно (, расположенное под флажком ), без отправки сообщения его дочерним элементам (, т. е. флажку ). Я пробовал это, это заставило флажок много мерцать.
  • Может быть, есть функция прозрачной кисти / рисования, о которой я не знаю, которую я мог бы использовать, чтобы закрасить все окно флажка, что по существу очистит окно? Я пробовал это, по какой-то причине окно флажка становится черным?

Мой код:

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;  
7
задан sazr 13 July 2012 в 02:47
поделиться