
当然可以
要我出邮箱 加分 谢谢
////////////////////////////////////////////////////////////
版本 2
局部变量 句柄, 整数型
局部变量 文本, 文本型
局部变量 矩形, 矩形_
句柄 = 取指定点窗口句柄_ (取鼠标水平位置 (), 取鼠标垂直位置 ())
如果真 (句柄 = 标签1取窗口句柄 ())
标签1标题 = “此窗口为我本身 不加运算”
返回 ()
如果真结束
文本 = 取空白文本 (255)
取窗口标题_ (句柄, 文本, 255)
取窗口矩形_ (句柄, 矩形)
标签1标题 = “X:” + 到文本 (取鼠标水平位置 ()) + “Y:” + 到文本 (取鼠标垂直位置 ()) + #换行符
标签1标题 = 标签1标题 + “窗口标题:” + 文本 + #换行符
标签1标题 = 标签1标题 + “左边:” + 到文本 (矩形左边) + #换行符
标签1标题 = 标签1标题 + “顶边:” + 到文本 (矩形顶边) + #换行符
标签1标题 = 标签1标题 + “右边:” + 到文本 (矩形右边) + #换行符
标签1标题 = 标签1标题 + “底边:” + 到文本 (矩形底边) + #换行符
取窗口矩形 (扫雷窗口句柄 \ 信息)‘这代码是你写的还是网上下的?
你‘写成下面这样子就行了
取窗口矩形 (扫雷窗口句柄 ,信息)
下面是“取窗口矩形”API,可以无视
版本 2
DLL命令 GetWindowRect, 整数型, "user32dll", , , 返回值:如果函数成功,返回值为非零:如果函数失败,返回值为零。
参数 hWnd, , , 要获取矩形的窗口句柄
参数 lpRect, RECT, , 矩形数据指针(易会自动传指针的)
版本 2
数据类型 RECT 成员 l左边
成员 t顶边
成员 r右边
成员 b下边
版本 2
子程序 __启动窗口_创建完毕
局部变量 RECT, RECT
输出调试文本 (GetWindowRect (取窗口句柄 (), RECT))输出调试文本 (RECTl左边, RECTt顶边, RECTr右边 - RECTl左边, RECTb下边 - RECTt顶边)
' 右边-左边=窗口实际宽度
' 下边-顶边=窗口实际高度
楼上的回答简直是胡扯。
我觉得你对于这几个函数的理解已经很正确了。
msdn的解释很清晰很正确,没有任何疑义,和你的理解是一致的。
呵呵,我觉得只要解释一下第一个执行为啥左上角是(0,0),你的所有疑问就没有了。
我想请问一下,你是不是在对话框初始化的时候,也就是OnInitialDlg里面执行的以上代码?我相信答案肯定是“是的”。
在对话框初始化的时候,窗口是先有可能放置在屏幕左上角,然后在这个初始化函数结束后,窗口被移动到屏幕正中。
也就是说,你在对话框初始化过程中获取窗口位置的时候,窗口确实就在左上角!
如果你想验证一下我的结论,不妨在程序中设置一个按钮,在这个按钮的消息响应中,再次执行这几句代码,然后你观察一下结果,是不是就完全符合你的预期了^_^
欢迎采纳!
GetWindowsRect获取的是窗口矩形范围,其中RECT的left和top就是窗口左上角的坐标,也就是你所说的窗口位置
GetWindowsRect返回的是屏幕坐标
楼上的应该是ScreenToClient,将屏幕坐标转换为窗口坐标
ClientToScreen是将窗口坐标转换为屏幕坐标
HBITMAP holdbitmap,hbitmap;
HDC hdc,hscreendc,hmemdc;
hdc=GetWindowDC(hwnd);//获得整个hwnd指向的窗口的DC
GetWindowRect(hwnd,&rect);//获得窗口矩形
hscreendc=CreateDC("DISPLAY",NULL,NULL,NULL);//获得整个屏幕的设备DC
hmemdc=CreateCompatibleDC(hdc);//创建与设备DC兼容的内存DC
hbitmap=CreateCompatibleBitmap(hscreendc,GetDeviceCaps(hdcScreen,HORZRES),GetDeviceCaps(hdcScreen,VERTRES)); //创建与屏幕DC兼容的位图
holdbitmap=(HBITMAP)SelectObject(hmemdc,hbitmap);//将hbitmap指向的位图选入内存DC,返回值为原来的位图holdbitmap,先保存下来后面恢复
BitBlt(hmemdc,0,0,rectright-rectleft,rectbottom-recttop,hscreendc,0,0,SRCCOPY);//将设备DC的图象复制到内存DC,这样就把屏幕图象保存到hbitmap所指向的BITMAP结构体中了
点击按钮后,再用BitBlt显示出来:
case WM_COMMAND:
holdbitmap=(HBITMAP)SelectObject(hmemdc,hbitmap);//将保存图象的hbitmap选进内存DC
BitBlt(hdc,0,0,rectright-rectleft,rectbottom-recttop,hmemdc,0,0,SRCCOPY);//将内存DC的图象显示到窗口上
以上注意hbitmap变量的作用范围
代码如下:
DLL命令定义表:
版本 2
DLL命令 取窗口矩形_, 整数型, "user32", "GetWindowRect", , $(b)
参数 窗口句柄, 整数型
参数 矩形区域, 矩形_
自定义数据类型表:
版本 2
数据类型 矩形_, , $(a)RECT
成员 左边, 整数型, , , left
成员 顶边, 整数型, , , top
成员 右边, 整数型, , , right
成员 底边, 整数型, , , bottom
程序集封装函数
版本 2
子程序 提取外部程序窗口矩形信息, 逻辑型
参数 目标窗口句柄, 整数型
参数 保存矩形信息, 矩形_, 参考
返回 (选择 (取窗口矩形_ (目标窗口句柄, 保存矩形信息) = 0, 假, 真))
调用封装好的函数进行测试
添加名为:编辑框_运行结果(编辑框控件),测试_按钮(按钮控件)
版本 2
子程序 _测试_按钮_被单击
局部变量 局部_矩形, 矩形_
如果真 (提取外部程序窗口矩形信息 (_启动窗口取窗口句柄 (), 局部_矩形) = 假)
编辑框_运行结果内容 = “提取失败”
返回 ()
如果真结束
编辑框_运行结果内容 = “左边:” + 到文本 (局部_矩形左边) + #换行符
编辑框_运行结果加入文本 (“顶边:” + 到文本 (局部_矩形顶边) + #换行符)
编辑框_运行结果加入文本 (“右边:” + 到文本 (局部_矩形右边) + #换行符)
编辑框_运行结果加入文本 (“底边:” + 到文本 (局部_矩形底边) + #换行符)
注意:以上代码在windows2003系统,E语言51静态版 运行测试正常!
以上解答纯手工实测编写解答!API函数和数据类型直接从E的API助手中导入,确保了其正确性!
以上就是关于易语言能实现取指定窗口的左边和顶边吗全部的内容,包括:易语言能实现取指定窗口的左边和顶边吗、易语言求助:错误(10044): 不能将“RECT”数据转换到“双精度小数型”数据。、各位高手,小弟请教关于GetWindowRect,GetClientRect以及ClientToScreen,ScreenToClient的使用!先谢谢啦等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)