开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 2906|回复: 7
收起左侧

[求助] 图片框在窗口内随意移动位置

[复制链接]
结帖率:91% (192/211)
发表于 2019-3-3 09:14:04 | 显示全部楼层 |阅读模式   浙江省台州市
图片框在窗口内随意移动位置

就是鼠标按住这个图片框,可以随意移动位置(不乱跳),之前有个例程源码怎么也找不到了,谁有这个例程 发一下  谢谢


结帖率:100% (9/9)

签到天数: 20 天

发表于 2019-3-3 09:37:31 | 显示全部楼层   广西壮族自治区崇左市
  
子程序名返回值类型公开备 注
_图片框1_鼠标左键被按下逻辑型 
参数名类 型参考可空数组备 注
横向位置整数型
纵向位置整数型
功能键状态整数型
SendMessageA (图片框1.取窗口句柄 (), #WM_NCLBUTTONDOWN, #HTCAPTION, 0)
回复 支持 反对

使用道具 举报

结帖率:91% (192/211)

签到天数: 10 天

 楼主| 发表于 2019-3-3 09:40:00 | 显示全部楼层   浙江省台州市

需要那种就是调整边距的那种那种代码哦 不是api呢  

点评

[e=1] .版本 2 .程序集 窗口程序集_窗口1 .子程序 _图片框1_鼠标左键被按下, 逻辑型 .参数 横向位置, 整数型 .参数 纵向位置, 整数型 .参数 功能键状态, 整数型 ' SendMessageA (图片框1.取窗口句柄 ()   广西壮族自治区崇左市  详情 回复 发表于 2019-3-3 10:02
回复 支持 反对

使用道具 举报

结帖率:100% (9/9)

签到天数: 20 天

发表于 2019-3-3 10:02:15 | 显示全部楼层   广西壮族自治区崇左市
雨天真美 发表于 2019-3-3 09:40
需要那种就是调整边距的那种那种代码哦 不是api呢
  
窗口程序集名保 留  保 留备 注
窗口程序集_窗口1   
子程序名返回值类型公开备 注
_图片框1_鼠标左键被按下逻辑型 
参数名类 型参考可空数组备 注
横向位置整数型
纵向位置整数型
功能键状态整数型
' SendMessageA (图片框1.取窗口句柄 (), #WM_NCLBUTTONDOWN, #HTCAPTION, 0)
子程序名返回值类型公开备 注
_窗口1_创建完毕  
变量名类 型静态数组备 注
hWnd整数型 
hWnd = 图片框1.取窗口句柄 ()
SetPropA (hWnd, “proc”, SetWindowLongA (hWnd, #GWL_WNDPROC, 到整数 (&WndProc)))
子程序名返回值类型公开备 注
WndProc整数型 
参数名类 型参考可空数组备 注
hWnd整数型
uMsg整数型
wParam整数型
lParam整数型
变量名类 型静态数组备 注
rcRECT 
rcTmpRECT 
x整数型 
y整数型 
nTmp整数型 
判断 (uMsg = #WM_NCHITTEST )  ' 击中测试,所有的鼠标消息都先触发这个消息,然后由这个消息区分是在客户区还是非客户区
nTmp = 5
GetWindowRect (hWnd, rc)
x = 位与 (lParam, 65535)  ' 低位是X坐标
' 位与,两个都为1就返回1,65535是低16位都是1,所以高16位必须都为0,任何数与0与都得0
' 自己了解去吧
y = 右移 (lParam, 16)  ' 高位是Y坐标
' 右移,这个就简单了,就是把一个数按位往右边移动,移动后前面用0补位
' ------------这里是右下角,从窗口右边减去设置的值范围内都算是右下角
rcTmp = rc
rcTmp.Left = rc.Right - nTmp  ' 这里是计算鼠标到那个矩形内,窗口右边底边 - 设置的值,就是右下角
rcTmp.Top = rc.Bottom - nTmp
如果真 (PtInRect (rcTmp, x, y))
返回 ( #HTBOTTOMRIGHT )  ' 在右下角,返回这个消息,告诉窗口我鼠标现在在非客户区的右下角位置

' 能看懂一个就能看懂全部,后面都是一样,只是修改了矩形的位置,后面就不做备注了
' 这些常量也算好记的,分开来看 HT开头
' 左顶右底 分别是 LEFT TOP RIGHT BOTTOM
' 如果在左边 那就是 HT + LEFT = #HTLEFT  顶边 HT + TOP = #HTTOP,  底边 HT + BOTTOM = #HTBOTTOM
' 右下角 HT + BOTTOM + RIGHT = #HTBOTTOMRIGHT, 左上角 HT + TOP + LEFT = #HTTOPLEFT
' 左边顶边右底底边都直接使用英文单词,右下  左下 这些是先指定底边 在指定左右,左上左下同理
rcTmp = rc
rcTmp.Top = rc.Bottom - nTmp
rcTmp.Right = rc.Left + nTmp
如果真 (PtInRect (rcTmp, x, y))
返回 ( #HTBOTTOMLEFT )  ' 左下角

rcTmp = rc
rcTmp.Right = rc.Left + nTmp
rcTmp.Bottom = rc.Top + nTmp
如果真 (PtInRect (rcTmp, x, y))
返回 ( #HTTOPLEFT )  ' 左上角

rcTmp = rc
rcTmp.Left = rc.Right - nTmp
rcTmp.Bottom = rc.Top + nTmp
如果真 (PtInRect (rcTmp, x, y))
返回 ( #HTTOPRIGHT )  ' 右上角

' ----------如果按照我这样写左顶右底的话,那就必须在判断4个角后在判断这4个
rcTmp = rc
rcTmp.Right = rc.Left + nTmp  ' 不指定顶边和底边,如果在左上或左下之前判断这个,那不会触发左上或左下
rcTmp.Top = rc.Top + nTmp  ' 稍微修改一下顶边和底边的位置才能在左上或左下之前判断
rcTmp.Bottom = rc.Bottom - nTmp  ' 后面的也一样,后面我就不写备注了,也不指定位置了,我做的是先判断4个角,后判断4个边
如果真 (PtInRect (rcTmp, x, y))
返回 ( #HTLEFT )  ' 左边

rcTmp = rc
rcTmp.Bottom = rc.Top + nTmp
如果真 (PtInRect (rcTmp, x, y))
返回 ( #HTTOP )  ' 顶边

rcTmp = rc
rcTmp.Left = rc.Right - nTmp
如果真 (PtInRect (rcTmp, x, y))
返回 ( #HTRIGHT )  ' 右边

rcTmp = rc
rcTmp.Top = rc.Bottom - nTmp
如果真 (PtInRect (rcTmp, x, y))
返回 ( #HTBOTTOM )  ' 底边

' rcTmp = rc
' rcTmp.Left = rc.Right - 30
' rcTmp.Bottom = rc.Top + 30
. ' 如果真 (PtInRect (rcTmp, x, y))  ' 发现这种方式来模拟按钮没有效果,只有最大化有效果,不过带来的问题也是不小,具体自己测试吧
' 返回 (#HTCLOSE)  ' 关闭按钮
' 返回 (#HTMAXBUTTON)  ' 最大化按钮
' 返回 (#HTMINBUTTON)  ' 最小化按钮

rcTmp = rc
rcTmp.Bottom = rc.Top + 30
如果真 (PtInRect (rcTmp, x, y))
返回 ( #HTCAPTION )  ' 在标题栏中,模拟一个标题栏,有30个像素

判断 ()  ' 其他自己做,或者CallWindowProcW() 让系统处理,我这里就全部都属于客户区
返回 ( #HTCLIENT )  ' 客户区
返回 (CallWindowProcA (GetPropA (hWnd, “proc”), hWnd, uMsg, wParam, lParam))  ' 这里是让系统处理这个消息




返回 (CallWindowProcA (GetPropA (hWnd, “proc”), hWnd, uMsg, wParam, lParam))


只能用API,不然你自己封装成一个子程序...然后认为没有调用API......
例子 https://bbs.125.la/forum.php?mod=viewthread&tid=14205525
回复 支持 反对

使用道具 举报

结帖率:91% (192/211)

签到天数: 10 天

 楼主| 发表于 2019-3-3 10:09:52 | 显示全部楼层   浙江省台州市

114.png

就是想用这种形式来写 当鼠标按下时 通过横向位置 和纵向位置的变动来调整,但是逻辑理不顺,图片框移动乱跳。。。。。

点评

那你慢慢理一下思路吧,我的话Windows有提供这样的命令我就用Windows提供的,懒得自己算,而且你这个要算起来也不是那么简单   广西壮族自治区崇左市  详情 回复 发表于 2019-3-3 10:13
回复 支持 反对

使用道具 举报

结帖率:100% (9/9)

签到天数: 20 天

发表于 2019-3-3 10:13:51 | 显示全部楼层   广西壮族自治区崇左市
雨天真美 发表于 2019-3-3 10:09
就是想用这种形式来写 当鼠标按下时 通过横向位置 和纵向位置的变动来调整,但是逻辑理不顺,图片框 ...

那你慢慢理一下思路吧,我的话Windows有提供这样的命令我就用Windows提供的,懒得自己算,而且你这个要算起来也不是那么简单

补充内容 (2019-3-3 10:15):
反正我给你的这个代码移动和调整尺寸都是和调整窗口移动窗口一样的
回复 支持 反对

使用道具 举报

结帖率:60% (3/5)

签到天数: 4 天

发表于 2019-3-3 17:39:38 | 显示全部楼层   广东省广州市

我给你个思路

利用精易的窗口_取坐标 去除窗口的位置 然后在利用鼠标_取位置 获得鼠标的位置 然后在互相减去 获得 图片框对窗口的相对位置 然后在移动就行
望采纳
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)
发表于 2022-2-22 20:14:00 | 显示全部楼层   新疆维吾尔自治区塔城地区
666,不错支持~
回复 支持 反对

使用道具 举报

  高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表