Страница: 1 |
Страница: 1 |
Вопрос: скриншот Picture
Добавлено: 12.12.07 17:21
Автор вопроса: Roma
Такой вопрос:
Есть Picture1, он служит как контейнер для контролов.
Как сделать скриншот этого Picture1 со всеми контролами, располагающимися на нем, если есть вероятность того, что он (Picture1) может быть за границами экрана (пользователь передвинул форму и часть Picture1 не видна, т.е. стандартное GetWindowRect - StretchBlt - ReleaseDC – не проходит), и что пользователь уменьшил размеры формы и Picture1 больше формы?
Ответы
Всего ответов: 4
Номер ответа: 1
Автор ответа:
EUGY
Вопросов: 0
Ответов: 454
Профиль | | #1
Добавлено: 12.12.07 18:15
лень писать полноценный пример, но вот как заготовка...
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const WM_PAINT = &HF
Private Const WM_PRINT = &H317
Private Sub Command1_Click()
SendMessage Picture1.hwnd, WM_PRINT, Form1.hDC, 0
Dim ctl As Control
For Each ctl In Controls
If ctl.Container Is Picture1 Then
Debug.Print ctl.Name
SendMessage ctl.hwnd, WM_PAINT, Form1.hDC, 0
End If
Next
End Sub
На самом деле надо бы каждое дочернее окно печатать в memory DC и потом BitBlt на основной контекст с учетом положения в контейнере.
Номер ответа: 2
Автор ответа:
Roma
Вопросов: 3
Ответов: 15
Профиль | | #2
Добавлено: 12.12.07 18:25
2 EUGY
Не подходит. Среди контролов есть такие, у которых нет hwnd - Shockwave Flash.
Номер ответа: 3
Автор ответа:
EUGY
Вопросов: 0
Ответов: 454
Профиль | | #3
Добавлено: 12.12.07 18:44
Ну, hwnd у него положим есть, получить его и остальные можно например через EnumChildWindows.
Номер ответа: 4
Автор ответа:
Roma
Вопросов: 3
Ответов: 15
Профиль | | #4
Добавлено: 12.12.07 18:48
Спасибо, буду копаться.