Хотите чтобы обьект Graphics сохранял графику? (AutoRedraw)

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Хотите чтобы обьект Graphics сохранял графику? (AutoRedraw)

Сообщение Nord777 » 01.03.2004 (Пн) 15:08

Public Class Form1
Inherits System.Windows.Forms.Form
Public GDIBM As IntPtr
Public GrafMem As Graphics
Public BM As Bitmap

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
GDIBM = CreateCompatibleBitmap(GetDC(PictureBox1.Handle), 100, 100)
BM = Image.FromHbitmap(GDIBM)
GrafMem = System.Drawing.Graphics.FromImage(BM)
PictureBox1.Image = BM
Рисуем()
End Sub

Public Sub Рисуем()
Dim myFont As New Font("arial", 20)
GrafMem.Clear(Color.White)
GrafMem.DrawLine(Pens.Blue, 10, 10, 100, 10)
GrafMem.DrawRectangle(Pens.Red, 1, 1, 50, 50)
GrafMem.DrawString("Hello", myFont, Brushes.Black, 20, 20)
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
GrafMem.FillRectangle(Brushes.Black, 50, 50, 20, 20)
PictureBox1.Refresh()
End Sub

Попробуйте! :D [/img]

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 01.03.2004 (Пн) 16:08

Чуть не забыл
нужно еще добавить обявление в стандартный модуль

Declare Auto Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As IntPtr) As IntPtr

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 01.03.2004 (Пн) 16:10

опять перепутал :D
Вот это обьявление нужно добавить

Declare Auto Function CreateCompatibleBitmap Lib "gdi32" (ByVal hdc As IntPtr, ByVal nWidth As Integer, ByVal nHeight As Integer) As IntPtr

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 02.03.2004 (Вт) 12:12

ЗАЧЕМ ВСЁ ЭТО?
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 02.03.2004 (Вт) 21:33

У каждого свои интересы, и если человек занимается разработкой баз данных то ему это конечно не к чему.
B VB6 была возможность использовать свойство AutoRedraw, в VB.NET - нет.

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 03.03.2004 (Ср) 11:55

В .NET есть замечательное событие Paint и не менее замечательный параметр e.Graphics

Сохранение состояния(GDI) - фишка прошлого тысячелетия!

Long Live GDI+!
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 03.03.2004 (Ср) 21:44

Приведу пример:
Я вывожу графику для которой производится много расчетов, и если я при каждом событии Paint буду заново все просчитывать, то комп впадет в ступор что не очень хорошо. Или я чего то недопонимаю?

Lordas
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 11.06.2007 (Пн) 16:38
Откуда: Глубины Ада

Сообщение Lordas » 13.06.2007 (Ср) 9:23

GDIBM = CreateCompatibleBitmap(GetDC(PictureBox1.Handle), 100, 100) в это строке синим подчёркивается GetDC. как исправить? есть ли ещё способы делать перерисовку при изменении в графике, типа двойной буферизации и т.д.?
Я часть той силы вечно творящей благо, всему желая зла

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 13.06.2007 (Ср) 11:05

Посмотрел свой пост трёхлетней давности и улыбнулся.
Так делать не надо. Всё гораздо проще.
Код: Выделить всё
Public Class Form2
    Private G As Graphics
    Private BackBufer As Bitmap

    Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        BackBufer = New Bitmap(PBox1.ClientRectangle.Width, PBox1.ClientRectangle.Height)
        PBox1.Image = BackBufer

        G = Graphics.FromImage(BackBufer)
        G.FillRectangle(Brushes.AliceBlue, PBox1.ClientRectangle)
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        G.DrawLine(Pens.Blue, 10, 10, 100, 10)
        PBox1.Refresh()
    End Sub

    Private Sub Form2_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        G.Dispose()
    End Sub
End Class
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 94

    TopList