Как такое реализовать?

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

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

GPP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 351
Зарегистрирован: 02.11.2005 (Ср) 8:02
Откуда: г.Невельск о.Сахалин

Как такое реализовать?

Сообщение GPP » 14.03.2009 (Сб) 7:08

Нужно реализовать такую штуку. По экрану передвигаем некий квадрат который внутри прозрачный(получается что-то вроде рамки), а то что находиться внутри отображается в PictureBox. С возможностью сохранения в файл. С чего начать? Как получить к примеру изображения участка экрана для начала? Заранее огромное спасибо!
GPP(c) Gorlo Pavel Programming

Ronin
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 635
Зарегистрирован: 13.02.2002 (Ср) 14:16
Откуда: Россия, Москва

Re: Как такое реализовать?

Сообщение Ronin » 14.03.2009 (Сб) 7:54

Вызывай кнопку Prt Sc, копируй изображение из буфера и вырезай участок по расположению окна =))

Шутка :eye: .. Должен быть вариант лучше

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Как такое реализовать?

Сообщение iGrok » 14.03.2009 (Сб) 12:50

Ну, как вариант, GetCursorPos -> WindowFromPoint -> GetDC -> BitBlt нужной области (из GetCursorPos).
Минус тут в том, что "хрен вам, а не часть экрана". Т.е. мы получим только DC окна, которое под мышью..

UPD:
А тут предлагают делать так:

GetDesktopWindow -> GetDC -> BitBlt

А координаты определять по тому же GetCursorPos.

З.Ы. А вот как рамку наприсовать - я не знаю.

UPD:
О как:
Код: Выделить всё
Option Explicit

Private Const SRCCOPY = &HCC0020

Private Type POINTAPI
        X As Long
        Y As Long
End Type

Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long

Dim hDCScreen As Long, pa As POINTAPI
Dim tW As Long, tH As Long, tWD As Long, tHD As Long
Dim bState As Boolean

Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    hDCScreen = GetDC(GetDesktopWindow())
    tH = Picture1.ScaleHeight: tHD = tH / 2
    tW = Picture1.ScaleWidth: tWD = tW / 2
    bState = True
End Sub

Private Sub Command1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If bState Then
        GetCursorPos pa
        BitBlt Picture1.hdc, 0, 0, tW, tH, hDCScreen, pa.X - tWD, pa.Y - tHD, SRCCOPY
    End If
End Sub

Private Sub Command1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
    bState = False
End Sub
label:
cli
jmp label

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Как такое реализовать?

Сообщение MIT » 14.03.2009 (Сб) 14:08

iGrok писал(а):З.Ы. А вот как рамку наприсовать - я не знаю.
Нарисовать ее в фотошопе (или генерировать динамически) и просто присвоить картинку форме, которую можно будет, например, таскать мышкой.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

1Steps
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 505
Зарегистрирован: 20.12.2006 (Ср) 0:50
Откуда: New York

Re: Как такое реализовать?

Сообщение 1Steps » 14.03.2009 (Сб) 20:37

Код: Выделить всё
Graphics.CopyFromScreen(...)
Удалена за ненадобностью.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Как такое реализовать?

Сообщение iGrok » 14.03.2009 (Сб) 23:52

1Steps писал(а):
Код: Выделить всё
Graphics.CopyFromScreen(...)

А. Ё. Это ж .NET.. =)
label:
cli
jmp label


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

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

Сейчас этот форум просматривают: Yandex-бот и гости: 19

    TopList