您的位置:程序门 -> vb -> 基础类



[重要,常遇]关于vb椭圆矩形不规则窗口边框!


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


[重要,常遇]关于vb椭圆矩形不规则窗口边框!
发表于:2007-06-21 17:24:30 楼主
关于vb椭圆矩形不规则窗口边框的问题!

我写了一个解决椭圆边框方案.只可惜必须将窗口的   border   设置为0.这时候将是模式窗口.会有很多地方起冲突.有没有办法不改变border为0的情况下实现椭圆边框?

而且确保最大化时上下左右边能够占满屏幕,不会因为border=2而空出一点空隙来```


不知道谁遇到过这样的问题!!!!!急!!!
发表于:2007-06-21 17:25:371楼 得分:0
补充,我这里的 "占满屏幕 "是指有保留任务栏的``
发表于:2007-06-21 17:56:532楼 得分:0
自己顶`
发表于:2007-06-21 19:13:113楼 得分:0
将窗口的   border   设置为0.这时候将是模式窗口
=============================================
borderstyle   =   0与模式窗体有必然联系吗?


不改变border为0的情况下实现椭圆边框,而且确保最大化时上下左右边能够占满屏幕,不会因为border=2而空出一点空隙来
==============================
这是有矛盾的,最大化是系统根据窗体区域自动算出来了,有无边框涉及客户区与非客户区的偏移量,只要border样式存在,最大化时就会空出这个偏移量。

我尝试过自己处理wm_nccalcsize消息,在有border样式的情况下,仍强行返回一个与窗体区域完全一样的客户区域,这样做在普通状态下没有问题,但最大化时,系统还是笨拙的加上了边框偏移量。所以最后还是放弃了border样式。

若非要同时有这两个要求,可尝试以下两种方案:
1、假最大化,就是拦截并阻止窗体最大化,然后换成movewindow,将窗体客户区正好设成满屏大小;
2、拦截wm_getminmaxinfo消息,并修改minmaxinfo结构,将其ptmaxsize及ptmaxposition成员,设成比屏幕大一些的尺寸,以使客户区正好满屏

不管哪种方案,都需自己计算屏幕工作区域。这个区域可用systemparametersinfo获取,而且还要自己拦截wm_settingchange消息,以便在工作区域大小改变时,重新计算你的窗体最大化尺寸。
发表于:2007-06-22 09:26:104楼 得分:0
非常感谢你的回答,但我还有问题.
=============================================
borderstyle   =   0与模式窗体有必然联系吗?

有联系,当borderstyle   =   0时,如果msgbox一旦出现,再show出borderstyle   =   0的窗口,将出现错误!
==============================================

补充问题:
请问,qq或tm都是这种原理实现的吗?

他们做的相当完美,将窗口移动效果设置为显示边框.可以看到,如果属非对话框窗口,移动时显示的虚线边框会显示得比较粗.如果是对话框窗口,移动时显示比较细.

那么qq和tm包括其他好界面的软件,他们在移动时都是比较粗的.

请问有没有好的代码提供参考下`非常感谢``


快速检索

最新资讯
热门点击