Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: эквивалент устройства PictureBox1.hdc для памяти Добавлено: 26.10.04 01:01  

Автор вопроса:  night-roll
перерыл весь архив, но так и не понял как правильно это сделать. везде как-то мельком об этом упоминается.
пожалуйста, если не трудно, набросайте!
и поясните вот этот пример из архива

[code]

' получение эквивалент устройства PictureBox1.hdc для памяти
memDC = CreateCompatibleDC(DeskTopDc)
' создание битовой карты
hBit = CreateCompatibleBitmap(PictureBox1.hdc, x, y)
' выбор hBit в memDC
SelectObject memDC, hBit
' С ним работаешь как с PictureBox1
'.... например
BitBlt memDC, 0, 0, 100, 100, PicBMP1, 0, 0, SRCCOPY
TransparentBlt memDC, 0, 0, 100, 100, PicBMP2, 0, 0, vbWhite
'.... и т.д.
' и когда все готово, полученную итоговую картинку копируешь в PictureBox1
BitBlt Picture1.hdc, 0, 0, px, py, memDC, 0, 0, SRCCOPY

[\code]

заранее всем спасибо!

p.s. пример взят из темы http://vbnet.ru/forum/show.aspx?id=6982, автор SergeySV.

Ответить

  Ответы Всего ответов: 24  

Номер ответа: 1
Автор ответа:
 night-roll



Вопросов: 36
Ответов: 326
 Профиль | | #1 Добавлено: 26.10.04 01:05
забыл упомянуть...
поясните пожалуйста вот это DeskTopDc
и объясните для чего используется (создаётся) битовая карта.

Ответить

Номер ответа: 2
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #2
Добавлено: 26.10.04 03:24
Наверное по смыслу это верно, но вообще принято называть контекст устройства.
 MSDN:
device context
Structure that defines a set of graphic objects and their attributes, and the graphic modes that affect output. In addition, the device context (DC) refers to a physical output device—its name, device driver, and other attributes. GDI function call parameters contain a handle to a DC to include the attributes of the specified device. There are four types of DC: display (supports drawing operations on a video display terminal), printer (supports drawing operations on a printer or plotter), memory (supports drawing operations on a bitmap), and information (supports retrieval of device data.)

 Как видно из этого описания, контекст может быть у дисплея, принтера, памяти и информационный.

 Битовая карта - это не что иное как точечный рисунок. Используется для хранения цветов пикселов.

Ответить

Номер ответа: 3
Автор ответа:
 night-roll



Вопросов: 36
Ответов: 326
 Профиль | | #3 Добавлено: 26.10.04 04:48
ясно, а где взять эту переменную DeskTopDc
и какого содержания она должна быть?
по самому определению понятно, что она типа
ByVal hdc As Long
буду премного признателен!

Ответить

Номер ответа: 4
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #4
Добавлено: 26.10.04 05:12
Вроде так:

Private Const HWND_DESKTOP = 0
Private Declare Function GetDC Lib "user32.dll" ( _
     ByVal hwnd As Long) As Long

Private Sub Form_Load()
 ;DeskTopDc = GetDC(HWND_DESKTOP)
End Sub

Ответить

Номер ответа: 5
Автор ответа:
 night-roll



Вопросов: 36
Ответов: 326
 Профиль | | #5 Добавлено: 27.10.04 00:46
спасибо! с этим разобрался.
теперь возникло одно НО
усложняем задачу:

  - необходимо из PictureClip вырвать часть, то бишь ячейку и сделать её фон прозрачным!

вопрос: как это сделать?
в чем подвох: TransparentBlt работает только с hdc, а PictureClip этого не поддерживает.
в связи с выше сказанным, как быть?

Ответить

Номер ответа: 6
Автор ответа:
 night-roll



Вопросов: 36
Ответов: 326
 Профиль | | #6 Добавлено: 27.10.04 03:18
может можно получить hDc PictureClip каким-нибудь способом?

Ответить

Номер ответа: 7
Автор ответа:
 night-roll



Вопросов: 36
Ответов: 326
 Профиль | | #7 Добавлено: 27.10.04 03:46
может я не прав, но наверное так
GetDC(pc1.hwnd)
но опять не получается - какя-то хрень выходит :(

Ответить

Номер ответа: 8
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #8
Добавлено: 27.10.04 03:50
 Кстати, хендл рабочего стола можно ещё получить с помощью GetDesktopWindow. Возвращает кстати ненулевое значение. Что из них верно я не знаю. Но в твоём случае это не критично.

Ответить

Номер ответа: 9
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #9
Добавлено: 27.10.04 03:52
Лично я с этим контролом в последний раз работал ещё в VB3.

Ответить

Номер ответа: 10
Автор ответа:
 night-roll



Вопросов: 36
Ответов: 326
 Профиль | | #10 Добавлено: 27.10.04 03:53
GetDC(pc1.hwnd)
нет, не то
возвращает hDC окна приложения :(

Ответить

Номер ответа: 11
Автор ответа:
 night-roll



Вопросов: 36
Ответов: 326
 Профиль | | #11 Добавлено: 27.10.04 03:56
мне не нужен хендл рабочего стола, мне нужен hdc PictureClip, чтобы можно применить к нему TransparentBlt

Ответить

Номер ответа: 12
Автор ответа:
 night-roll



Вопросов: 36
Ответов: 326
 Профиль | | #12 Добавлено: 27.10.04 04:01
>GetDC(pc1.hwnd)
>нет, не то
>возвращает hDC окна приложения :(


ну здесь я погорячился, действительно рабочего стола

Ответить

Номер ответа: 13
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #13
Добавлено: 27.10.04 04:53
Не, это приёдется делать через OLE.

Private Sub Form_Click()
Me.Cls
pic1 PictureClip1.Picture
End Sub

Sub pic1(pic As IPicture)
 Dim memDC As Long
 memDC = CreateCompatibleDC(DeskTopDc)
 pic.SelectPicture memDC, pic.CurDC, pic.Handle
 Me.Caption = BitBlt(Me.hdc, 0, 0, 40, 40, pic.CurDC, 0, 0, SRCCOPY)
End Sub


 Контекст удалишь сам.

Ответить

Номер ответа: 14
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #14
Добавлено: 27.10.04 04:55

>GetDC(pc1.hwnd)
>нет, не то
>возвращает hDC окна приложения :(

ну здесь я погорячился, действительно рабочего стола

 Я вообще не понял с кем ты споришь :)
 Вроде сам с собой. ;)

Ответить

Номер ответа: 15
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #15
Добавлено: 27.10.04 05:00
Всё понятно? Здесь используется технолгия COM. Только не думай что я смогу тебе её подробно объяснить. Я сам её плохо знаю.

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам