无边框窗体拖动大小

本文介绍如何通过处理WM_NCHITTEST消息,实现无边框窗体的拖动和改变大小功能。当鼠标在窗体特定区域时,返回不同的HT*常量,使窗体响应拖动操作。当窗体包含面板等控件时,可能无法触发消息,可以通过在面板上重写WM_NCHITTEST消息,将其结果设为HTTRANSPARENT,以便消息传递到父窗体。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     今天有一个朋友问我怎样可以拖拽一个没有边框的窗体,使其改变大小。于是很快想到一个消息
WM_NCHITTEST

该消息用来描述,当关标移动或当按下或当释放了鼠标按扭的时候,就会发送一个WM_NCHITTEST消息给一个窗口若鼠标未被捕获,则这条消息发送给光标所在的窗口。否则,这条消息公布给捕获鼠标的窗口。
参数
   xPos = LOWORD(Lparam);//LParam低位字的值。指出光标的X坐标。该坐标值是相对于屏幕左上角的坐标。
   yPos = HIWORD(LParam);//LParam高位字的值。指出光标的y坐标。

返回值  DefWindowProc函数的返回值是下列值之一,以指示光标热点的位置:
    HTBORDER             光标热点在一个窗口的边界上,该窗口不具有可变大小的边界
    HBOTTOM                在一个窗口下面的水平边界上
    HBOTTOMLEFT      在一个窗口的边界的左下角
    HBOTTOMRIGHT   在边界右下脚
    HTCAPTION            在标题栏中
    HTCLIENT               在客户区
    HTERROR               在屏幕北京或窗口之间的分界线上(与HTNOWHERE类似,所不同的是DefWindowProc函数产生一个系统响铃以指示出错)
    HTGROWBOX         在尺寸框中(与HTSIZE相同)
    HTHSCROLL          在水平滚动栏
    HTLEFT                    在左边界
    HTMENU                  在菜单中
    HTNOWHERE         在屏幕或窗口之间的分界线上
    HTREDUCE             在一个最小化的按扭上
    HTRIGHT                  在窗口右边界
    HTSIZE                      在尺寸框中
    HTSYSMENU           在一个System菜单或在一个子窗口的Close按扭中
    HTTOP          &nb

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值