мой вопрос о том, как правильно перекрасить дочерний элемент управления после изменения его текста (в данном случае флажок).
Важно сказать:
Когда я вызываю InvalidateRect () для флажка, он имеет серый фон (изображение 2).
С другой стороны, когда я вызываю InvalidateRect () в родительском окне, он ведет себя так, как я хочу (изображение 3)
Я думаю, что второй случай работает, потому что также WM_PAINT отправляется в родительское окно, а не просто WM_ERASEBKGND.
В первом случае я не понимаю, почему WM_PAINT не отправляется в родительское окно ИЛИ ЖЕ Зачем WM_ERASEBKGND действительно отправляется в родительское окно.
Заключение: Чтобы перекрасить дочерний элемент управления, нужно ли использовать InvalideRect () на родительском элементе вместо дочернего?
Редактировать: Оказывается, родительское окно получает сообщение WM_ERASEBKGND после того, как я вызываю :: SendMessage (hWnd, WM_SETTEXT, NULL, (:: LPARAM) text.c_str ()); на флажок. Это было не из-за вызова InvalidateRect () для флажка.
Я ожидаю, что это из-за того, что вы хотите нарисовать флажок внутри родительской процедуры. Но почему тогда он также не генерирует WM_PAINT для родительского окна?
После вызова InvalidateRect (hWnd, 0, true) на флажок
После вызова InvalidateRect (:: GetParent (hWnd), &checkboxRect, true) в родительском окне.
Задача ещё не решена.
Других решений пока нет …