Здравствуйте! Хочу сделать так: програма на VB6, которая вызывает функцию из моей DLL. DLL (на FASM) выделяет память для будущей bitmap-картинки (график по таблице). DLL заполняет выделенную память конкретными значениями напрямую, не используя API. И надо эту память сконвертировать (скопировать, назначить) в device control (DC) так, чтобы картинка отобразилась на контроле, который находится на главной форме моего VB6-приложения. Возможно ли это впринципе?
CreateCompatibleBitmap, потом GetDIBits, рисуете в полученном буфере и сохраняете назад через SetDIBits.
HDC compDC = CreateCompatibleDC CreateDIBSection(compDC ,,, lpBits, ); // она бытсрее для таких случаем чам Bitmap BitBlt( hdc, ,,,, compDC );
Код (Text): HBITMAP CreateDIBSection( __in HDC hdc, __in const BITMAPINFO *pbmi, __in UINT iUsage, __out VOID **ppvBits, __in HANDLE hSection, __in DWORD dwOffset ); А как заполнить BITMAPINFO *pbmi? У меня есть hdc-контекст контрола, **ppvBits-указатель на указатель на массив байтов, кодирующих пиксели, hSection = dwOffset = 0, чтобы память была выделена автоматом; iUsage = DIB_PAL_COLORS или DIB_RGB_COLORS ?
http://forum.vingrad.ru/topic-117538.html http://otvet.mail.ru/question/37778852/ http://www.google.com/codesearch#RNY0MQIrFHY/tk/win/tkWinWm.c&ct=rc&cd=2&q=CreateDIBSection http://www.google.com/codesearch#U7wUR84Lbbw/trunk/Drawing.cpp&ct=rc&cd=6&q=CreateDIBSection
Код (Text): FASM section '.data' data readable writeable hInstance dd 0 hDC dd 0 hBitmap dd 0 hMemDC dd 0 ;BITMAP structure sBITMAP dd 0 dd 10 ;dx dd 10 ;dy dd 40 ; bytes in scan line dw 1 dw 32 ; bits per pixel dd bmap ; указатель на массив бит (растр) ; bitmap: bmap dd 10*10 dup (00FF0000h) ; заполняем красным цветом section '.text' code readable executable proc GrafikInit hWnd, DX, DY invoke CreateBitmapIndirect, sBITMAP mov [hBitmap], eax invoke GetDC, [hWnd] mov [hDC], eax invoke CreateCompatibleDC, eax mov [hMemDC], eax invoke SelectObject, [hMemDC], [hBitmap] invoke BitBlt, [hDC], 13,13,[DX],[DY],\ [hMemDC],0,0,SRCCOPY ; координаты для примера invoke ReleaseDC, [hWnd], [hDC] invoke DeleteDC, [hMemDC] invoke DeleteObject, [hBitmap] ret endp