Вопрос по изображениям и winforms - PullRequest
0 голосов
/ 16 марта 2009

Я создаю приложение Kiosk. У меня полноэкранный режим, и я рисую прямо в форме:

Private Function CreateHeader(ByVal headerText As String) As Boolean
    Try
        Dim oGFX As Graphics = Graphics.FromHwnd(hwnd:=_oP.Handle)
        Dim oRect As Rectangle = New Rectangle(x:=0, y:=0, Width:=_screenSize.X, Height:=150)
        Dim oBMP As New Bitmap(GetEmbeddedResourceStream("Kiosk.logo.jpg"))

        Dim oBrush As Brush = New SolidBrush(Color.FromArgb(red:=0, green:=0, blue:=153))


        oGFX.FillRectangle(brush:=oBrush, rect:=oRect)
        oGFX.DrawImage(image:=oBMP, _
                           x:=0, _ 
                           y:=0, _
                       width:=oBMP.Width, _ 
                      height:=oBMP.Height)

        If Not String.IsNullOrEmpty(headerText) Then
            Dim oFont As New Font("Impact", 48, FontStyle.Regular)
            Dim g As Graphics = Me.CreateGraphics()

            Dim oStringSize As SizeF = g.MeasureString(headerText, oFont)

            g = Nothing

            oGFX.DrawString(s:=headerText, _
                         font:=oFont, _
                        brush:=Brushes.White, _
                            x:=(oRect.Width - Math.Round(oStringSize.Width, 0)) / 2, _
                            y:=(oRect.Height - Math.Round(oStringSize.Height, 0)) / 2)
        End If

        Return True
    Catch ex As Exception
        Return False
    End Try
End Function

Все хорошо рисует, но при нажатии Alt или Tab (по отдельности или вместе, в любом порядке) нарисованный мною прямоугольник исчезает. Если я снова вызываю функцию, она перерисовывается и остается независимо от того, какую кнопку я нажимаю. Есть ли какая-то функция .NET, которую мне нужно вызывать, поэтому мою функцию рисования нужно вызывать только один раз?

Спасибо.

1 Ответ

2 голосов
/ 16 марта 2009

Вы должны рисовать, переопределив OnPaint - тогда вы сможете перекрасить по мере необходимости В настоящий момент все, что вы рисуете, действительно только под экраном, становится недействительным.

...