方法一:处理WM_NCHITTEST消息,不过还需要自已处理标题栏系统按钮的事件,有点麻烦。
(1)在.h文件中添加WM_NCHITTEST处理函数
void __fastcall WMNchitTest(TMessage &Message);
(2)添加消息映射
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_NCHITTEST,TMessage,WMNchitTest)
END_MESSAGE_MAP(TForm)
(3)编写消息处理代码
void __fastcall TForm1::WMNchitTest(TMessage &Message)


{
if(GetAsyncKeyState(VK_LBUTTON)<0)
Message.Result = HTCAPTION;
else
Message.Result = HTCLIENT;
}
方法二:通过OnMouseMove,OnMouseUp,OnMouseDown来使窗体即时移动
(1)定义bool IsDraging;全局变量来在OnMouseMove事件中判断是否需要进行窗体移动
void __fastcall TForm1::MouseMove(TObject *Sender,TMouseButton Button,TShiftState Shift,int X,int Y)


{
if(IsDraging)

{
this->Left+=X-xx;//移动当前窗体的X坐标
this->Top+=Y-yy;//移动当前窗体的Y坐标
}
}
(2)在OnMouseDown中将IsDraging设为true
void __fastcall TForm1::MouseDown(TObject *Sender,TMouseButton Button,TShiftState Shift,int X,int Y)


{
IsDraging = true;
xx = X;//全局变量,用来保存拖动的开始X坐标
yy = Y;//全局变量,用来保存拖动的开始Y坐标
}
(3)在OnMouseUp中将IsDraging设为false
void __fastcall TForm1::MouseUp(TObject *Sender,TMouseButton Button,TShiftState Shift,int X,int Y)


{
IsDraging = false;
}
方法三:向系统发送消息,告诉系统,鼠标现在在标题栏
void __fastcall TForm1::MouseDown(TObject *Sender,TMouseButton Button,TShitftState Shift,int X,int Y)


{
Refresh();
if(Button == mbLeft)

{
ReleaseCapture();
Perform(WM_SYSCOMMAND,0xf017,0);
}
}
相关资料:
(1)TApplicationEvents
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了