Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
How to capture a specific area of my vfp window to bmp f
Message
From
18/04/1998 04:48:06
Walter Meester
HoogkarspelNetherlands
 
 
To
17/04/1998 21:47:05
General information
Forum:
Visual FoxPro
Category:
Windows API functions
Miscellaneous
Thread ID:
00093097
Message ID:
00093145
Views:
34
Hi davor,

The following example 'll push you into the right direction.
You'll need the DIPAPI32.DLL available from the Mircosoft knowledge base.
(i forgot the number)

RECT=SPACE(16)
SET LIBR TO c:\vfp\FOXTOOLS

DECLARE LONG GetActiveWindow IN User32
DECLARE LONG GetDesktopWindow IN User32
DECLARE INTEGER GetWindowRect IN User32 INTEGER HWND , STRING @RECT_Type
DECLARE LONG GetDC IN User32 LONG HWND
DECLARE LONG CreateCompatibleDC IN Gdi32 LONG hdc AS LONG
DECLARE LONG CreateCompatibleBitmap IN Gdi32 LONG hdc, LONG nWidth, LONG nHeight
DECLARE LONG SelectObject IN Gdi32 LONG hdc, LONG hObject
DECLARE LONG BitBlt IN Gdi32 LONG hDestDC,LONG X, LONG Y, LONG nWidth, LONG nHeight,;
LONG hSrcDC, LONG XSrc, LONG YSrc, LONG dwRop

DECLARE LONG OpenClipboard IN User32 LONG HWND
DECLARE LONG EmptyClipboard IN User32
DECLARE LONG SetClipboardData IN User32 LONG wFormat, LONG HMEM
DECLARE LONG CloseClipboard IN User32
DECLARE LONG ReleaseDC IN User32 LONG HWND, LONG hdc
DECLARE LONG DeleteDC IN Gdi32 LONG hdc

SRCCOPY = 13369376
CF_BITMAP = 2

x=regfn("FindWindow","CC","I")
*z=callfn(x,0,"TVX")


AccessHwnd=callfn(x,0,"TVX")
DeskHwnd=GetdesktopWindow()
=GetWindowRect(AccessHwnd, @RECT)

LEFT= ASC(LEFT(RECT,1))+256*ASC(SUBSTR(RECT,2,1))
TOP=ASC(SUBSTR(RECT,5,1))+256*ASC(SUBSTR(RECT,6,1))
RIGHT=ASC(SUBSTR(RECT,9,1))+256*ASC(SUBSTR(RECT,10,1))
Bottom=ASC(SUBSTR(RECT,13,1))+256*ASC(SUBSTR(RECT,14,1))

LEFT=IIF(LEFT>32000, Left-65536, left)
TOP=IIF(TOP>32000, Top-65536, Top)+4
RIGHT=IIF(RIGHT>32000, Right-65536, Right)
Bottom=IIF(Bottom>32000, Bottom-65536, Bottom)-4
*? left,top,right, bottom

NewWidth=ROUND(3*(Bottom-top)/4,0)
Width=Right-left
IF Width > NewWidth
Left=LEFT+ROUND((width-Newwidth)/2,0)
right=Left+newwidth
ENDIF

hdc = GetDC(DeskHwnd)
hdcMem = CreateCompatibleDC(hdc)
hBitmap = CreateCompatibleBitmap(hdc, right-left, bottom-top)

IF hBitmap # 0
* ' Copy the Desktop bitmap to memory location'
* ' based on Microsoft FoxPro coordinates.'

junk = BitBlt(hdcMem, 0, 0, right-left, bottom-top, hdc, LEFT, TOP, 13369376)

ENDIF
DECLARE INTEGER CopyWindowToDIB IN DIBAPI32.DLL INTEGER x, INTEGER y
DECLARE INTEGER SaveDIB IN DIBAPI32.DLL INTEGER x, STRING y
DECLARE INTEGER ChangeDIBFormat IN DIBAPI32.DLL INTEGER x, DOUBLE x, INTEGER x
DECLARE INTEGER DestroyDIB IN DIBAPI32.DLL INTEGER x
DECLARE INTEGER BitmapToDIB IN DIBAPI32.DLL INTEGER hBitmap, INTEGER hPal
DECLARE INTEGER DeleteObject IN "GDI32" INTEGER hObject

y=BITMAPTODIB(hBitmap,0)

m.cFile="C:\"+SYS(2015)+".BMP"
= SaveDIB(Y,m.cFile)
W=DestroyDIB(y)

junk = DeleteDC(hdcMem)
junk = ReleaseDC(DeskHwnd, hdc)

=DELETEOBJECT(HBitmap)
Previous
Reply
Map
View

Click here to load this message in the networking platform