| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1644 人关注过本帖, 1 人收藏
标题:求助:取得VFP显示图片 在频幕上的 绝对位置 结束位置 及宽高和高度
只看楼主 加入收藏
zhken
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:283
专家分:616
注 册:2012-9-21
结帖率:96.67%
收藏(1)
已结贴  问题点数:10 回复次数:1 
求助:取得VFP显示图片 在频幕上的 绝对位置 结束位置 及宽高和高度
图片附件: 游客没有浏览图片的权限,请 登录注册


在用VFP 截图 时,因为不能得准确的图片位置和长宽,截出来的图片总是不如意:

图片附件: 游客没有浏览图片的权限,请 登录注册




以下是网上找到的:就是这个数字弄不准确,在别的设备结果又不一样 Clipform(50, 20, 500, 300)

Clea
= Clipform(50, 20, 500, 300)
retu

*----------------------------------
Function Clipform
    Lparameters  lnLeft, lnTop, lnRight, lnBottom

    #Define CF_BITMAP   2    && clipboard format
    #Define SRCCOPY     13369376  && BitBlt raster operation code

    Declare INTEGER GetLastError IN kernel32
    Declare INTEGER GetActiveWindow IN user32
    Declare INTEGER GetWindowDC IN user32 INTEGER hwnd
    Declare INTEGER GetDC IN user32 INTEGER hwnd
    Declare INTEGER CreateCompatibleDC IN gdi32 INTEGER hdc
    Declare INTEGER DeleteDC IN gdi32 INTEGER hdc
    Declare INTEGER CreateCompatibleBitmap IN gdi32;
        INTEGER hdc,;
        INTEGER nWidth,;
        INTEGER nHeight
    Declare INTEGER ReleaseDC IN user32 INTEGER hwnd, INTEGER hdc
    Declare INTEGER SelectObject IN gdi32 INTEGER hdc, INTEGER hObject
    Declare INTEGER DeleteObject IN gdi32 INTEGER hObject
    Declare INTEGER BitBlt IN gdi32;
        INTEGER hDestDC,;
        INTEGER x, INTEGER y,;
        INTEGER nWidth, INTEGER nHeight,;
        INTEGER hSrcDC,;
        INTEGER xSrc, INTEGER ySrc,;
        INTEGER dwRop
    Declare INTEGER OpenClipboard IN user32 INTEGER hwnd
    Declare INTEGER CloseClipboard IN user32
    Declare INTEGER EmptyClipboard  IN user32
    Declare INTEGER SetClipboardData IN user32 INTEGER wFormat, INTEGER hMem

    * width and height of the rectangular area
    lnWidth = lnRight - lnLeft + 1
    lnHeight = lnBottom - lnTop + 1

    * define HWND and DC for the main VFP window
    HWnd = GetActiveWindow()
    * try both HDC values and note the difference
    hdc = GetWindowDC (hwnd)  && device context of the whole window
    *    hdc = GetDC (hwnd)    && device context of the client area

    * creating compatible DC and BITMAP
    hVdc = CreateCompatibleDC (hdc)
    hBitmap = CreateCompatibleBitmap (hdc, lnWidth, lnHeight)
    = SelectObject (hVdc, hBitmap)  && insert created BITMAP into hVdc

    * copying a rectangular area from HDC to hVdc
    = BitBlt (hVdc, 0,0, lnWidth,lnHeight,;
        hdc, lnLeft,lnTop, SRCCOPY)

    * opening clipboard and place bitmap data into it
    = OpenClipboard (hwnd)
    = EmptyClipboard()

    lnResult = SetClipboardData (CF_BITMAP, hBitmap)
    If lnResult <> 0
        * Done! See the fragment appeared in Clipboard viewer
    Else
        ? "Error code: "
        ?? GetLastError()
    Endif

    * closing the clipboard -- important
    = CloseClipboard()

    * cleaning the place
    = DeleteObject (hBitmap)
    = DeleteDC (hVdc)
    = ReleaseDC (hwnd, hdc)

    Return        && main
Endfunc
搜索更多相关主题的帖子: 位置 hwnd INTEGER and the 
2020-03-29 11:39
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10537
专家分:42927
注 册:2014-5-20
收藏
得分:10 
代码应该没问题
可能是 hwnd 这个窗口句柄没选对
相对显示图片的窗口时,先看看hwnd获取得正确否。如果是VFP的form,就是 thisform.hWnd
相对屏幕时 hwnd = 0
用 hdc = GetDC(hwnd) 就可以。
2020-03-29 14:50
快速回复:求助:取得VFP显示图片 在频幕上的 绝对位置 结束位置 及宽高和高度
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019615 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved