Чтобы нарисовать текст поверх ComboBox
(или чего-либо еще), я перезаписываю WndProc()
и ловлю сообщение 0x000F
- WM_PAINT
.
Код похож на следующий:
Protected Overrides Sub WndProc(ByRef m As Message)
MyBase.WndProc(m)
If m.Msg = &HF Then
TextRenderer.DrawText(CreateGraphics, "The text over my control.", Font, _
ClientRectangle, ForeColor)
End If
End Sub
Это работает очень хорошо, но есть проблема: если я перетаскиваю родительское окно на боковой части экрана (чтобы скрыть часть формы окна), видимая часть моегоконтроль бесконечно перерисован.Это заставляет текст перерисовываться над собой!
Полагаю, есть способ нарисовать только недействительную (скрытую) часть элемента управления.Как я могу это сделать?
РЕДАКТИРОВАТЬ
Вот проблема на одном изображении: http://i.stack.imgur.com/WqGfI.png (это ссылка, так как я не могу опубликовать изображение длясейчас.)
ОБНОВЛЕНИЕ
Я пытался использовать API BeginPaint, но структура RECT, включенная в возвращенную структуру PAINTSTRUCT, содержит только нули.
If m.Msg = WM_PAINT Then
Dim ps As PAINTSTRUCT = New PAINTSTRUCT
BeginPaint(Handle, ps)
Console.WriteLine(ps.rcPaint.right)
'painting goes here
EndPaint(Handle, ps)
End If
Могу ли я что-нибудь сделать с этим?Я не знаю, как поступить, чтобы нарисовать только недействительную область.