.Net中如何创建无边框、可调整大小且无标题栏的窗口
问题描述
我曾在XP系统中流畅实现窗口拖拽调整功能,但Windows 10下实现难度提升。
在Win10中,我可通过以下代码拖动窗口右边缘实现实时流畅调整,锚定在右侧的控件也会同步移动:
SendMessage(f.Handle, WM_NCLBUTTONDOWN, HTRIGHT, 0)
但要移除窗口边框,需通过如下代码关闭WS_SIZEBOX(同WS_THICKFRAME):
SetWindowLong(me.Handle, GWL_STYLE, GetWindowLong(me.Handle, GWL_STYLE) And Not WS_BORDER And Not WS_SIZEBOX And Not WS_DLGFRAME) SetWindowPos(me.Handle, HWND_TOP, me.Left, me.Top, me.Width, me.Height, SWP_FRAMECHANGED)
遗憾的是,关闭WS_SIZEBOX会导致上述拖拽调整功能失效,SendMessage/WM_NCLBUTTONDOWN代码不再工作。
自行实现的困境
我尝试过捕获鼠标事件、操控窗口位置和大小来编写自定义调整逻辑,但拖拽边框时会出现难看的黑块——调整过程中窗体无法及时重绘,且锚定控件也不会随拖拽边缘移动。
求助需求
能否指点解决方案?为保证流畅性,我希望尽可能使用Windows 10原生调整逻辑。有没有办法绕过WS_SIZEBOX的限制,更直接或更低层级地调用原生逻辑?
补充说明:我希望整个窗体都可用于放置控件,因此即使WS_SIZEBOX开启时出现的细标题栏也不想要。
内容的提问来源于stack exchange,提问作者wade
相关产品推荐
相关产品推荐

