Winform中如何实现无边框窗体及边缘拖动调整尺寸的技巧分享?

2026-05-05 20:461阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1004个文字,预计阅读时间需要5分钟。

Winform中如何实现无边框窗体及边缘拖动调整尺寸的技巧分享?

原创新锐,思维前卫,以独到视角,诠释世界。简洁明快,言之有物,引领潮流,不拘一格。

C# winform 踩坑笔记 在做美化winform窗体,实现自定义窗体标题栏,圆角边框,并且支持拖拽窗体,最后还要能拖动窗体左、右、下边缘时,改变窗体的宽和高。 一般网上的都有代码,窗体设成无边框,自己加个panel就能实现自定义窗口标题。 圆角边框,绘制窗体Region,网上也有很多代码。 拖拽窗体,采用p/vinvoke操作,直接调win32api,简单又高效。 拖动改变尺寸,也时 pv 操作。简单又不闪屏,前提是不画圆角窗体。 但是要支持前面的圆角,又能鼠标拖动边缘改变尺寸,就有坑了。 采用了Region圆角方法,就无法拖动改变窗体的尺寸,解决办法,OnsizeChange里首先把Region置为null。 我是把画圆角的方法放在SizeChange里的,每次改变窗体大小,就调用。 或者拖动时不调用,等初始化和 最大化最小化,还有拖动尺寸结束了在绘制圆角,也就拖动时不是圆角,这是个方法, 但是采用win32api方式,发送SysComand消息,我不知道什么时候这个拖动尺寸的消息是结束了,不要以为加个鼠标按下或抬起或移动的事件去判断就可以了,不得行,因为拖动尺寸这个是SysComand消息的,即使里在这时候抬起鼠标按键,也是属于SysComand消息,根本不会触发常规的鼠标按键,移动等事件。 不采用win32api,而是写鼠标移动按下抬起那套代码来实现改变尺寸,然后OnsizeChange里首先把Region置为null,拖动完毕再加上圆角,这种方案,我试了,我没有成功,因为就算是不加圆角,就光拖动,这种方式就闪烁的厉害,加了双缓冲也一样吧。网上知乎有篇文章带代码带动图一搜就搜到了,可以看看。
阅读全文

本文共计1004个文字,预计阅读时间需要5分钟。

Winform中如何实现无边框窗体及边缘拖动调整尺寸的技巧分享?

原创新锐,思维前卫,以独到视角,诠释世界。简洁明快,言之有物,引领潮流,不拘一格。

C# winform 踩坑笔记 在做美化winform窗体,实现自定义窗体标题栏,圆角边框,并且支持拖拽窗体,最后还要能拖动窗体左、右、下边缘时,改变窗体的宽和高。 一般网上的都有代码,窗体设成无边框,自己加个panel就能实现自定义窗口标题。 圆角边框,绘制窗体Region,网上也有很多代码。 拖拽窗体,采用p/vinvoke操作,直接调win32api,简单又高效。 拖动改变尺寸,也时 pv 操作。简单又不闪屏,前提是不画圆角窗体。 但是要支持前面的圆角,又能鼠标拖动边缘改变尺寸,就有坑了。 采用了Region圆角方法,就无法拖动改变窗体的尺寸,解决办法,OnsizeChange里首先把Region置为null。 我是把画圆角的方法放在SizeChange里的,每次改变窗体大小,就调用。 或者拖动时不调用,等初始化和 最大化最小化,还有拖动尺寸结束了在绘制圆角,也就拖动时不是圆角,这是个方法, 但是采用win32api方式,发送SysComand消息,我不知道什么时候这个拖动尺寸的消息是结束了,不要以为加个鼠标按下或抬起或移动的事件去判断就可以了,不得行,因为拖动尺寸这个是SysComand消息的,即使里在这时候抬起鼠标按键,也是属于SysComand消息,根本不会触发常规的鼠标按键,移动等事件。 不采用win32api,而是写鼠标移动按下抬起那套代码来实现改变尺寸,然后OnsizeChange里首先把Region置为null,拖动完毕再加上圆角,这种方案,我试了,我没有成功,因为就算是不加圆角,就光拖动,这种方式就闪烁的厉害,加了双缓冲也一样吧。网上知乎有篇文章带代码带动图一搜就搜到了,可以看看。
阅读全文