Страница: 1 |
Вопрос: скриншот Picture | Добавлено: 12.12.07 17:21 |
Автор вопроса: ![]() |
Такой вопрос:
Есть Picture1, он служит как контейнер для контролов. Как сделать скриншот этого Picture1 со всеми контролами, располагающимися на нем, если есть вероятность того, что он (Picture1) может быть за границами экрана (пользователь передвинул форму и часть Picture1 не видна, т.е. стандартное GetWindowRect - StretchBlt - ReleaseDC – не проходит), и что пользователь уменьшил размеры формы и Picture1 больше формы? |
Ответы | Всего ответов: 4 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 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 Автор ответа: ![]() ![]() ![]() Вопросов: 3 Ответов: 15 |
Профиль | Цитата | #2 | Добавлено: 12.12.07 18:25 |
2 EUGY
Не подходит. Среди контролов есть такие, у которых нет hwnd - Shockwave Flash. |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 0 Ответов: 454 |
Профиль | Цитата | #3 | Добавлено: 12.12.07 18:44 |
Ну, hwnd у него положим есть, получить его и остальные можно например через EnumChildWindows. |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() Вопросов: 3 Ответов: 15 |
Профиль | Цитата | #4 | Добавлено: 12.12.07 18:48 |
Спасибо, буду копаться. |
Страница: 1 |
|