注册 登录
编程论坛 VFP论坛

请问:VFP无边框的窗口如何才能显示阴影效果?

瓜瓜1990 发布于 2020-02-26 13:59, 2939 次点击
BorderStyle=0无边框窗口没有窗口阴影,缺少层次感,BorderStyle=1也没有阴影,请教怎样才能有阴影呢?
只有本站会员才能查看附件,请 登录
10 回复
#2
吹水佬2020-02-26 14:31
要随心所欲,设成无边框无标题,边框标题底图自己绘制。
#3
瓜瓜19902020-02-26 14:59
回复 2楼 吹水佬
谢谢!刚刚用API函数试了,GetClassLong ,SetClassLong ,但是只有左边和下边才有阴影。
只有本站会员才能查看附件,请 登录
#4
瓜瓜19902020-02-26 15:22
boderstyle设置为0,titlebar=.f., 表单LOAD事件里加下面的代码,边框就是上面图片的样子。
DECLARE INTEGER SetClassLong IN user32 INTEGER nhandler, INTEGER GclStyle, INTEGER hSrcRgn2
DECLARE INTEGER GetClassLong IN user32 Integer nhandler, integer nindex
#define  CS_DropSHADOW  0x20000
#define GCL_STYLE  (-26)
SetClassLong(thisform.HWnd,GCL_STYLE  ,BITOR(GetClassLong(thisform.hwnd,GCL_STYLE  ),CS_DropSHADOW) )
这个API函数是我看https://ask.的帖子后改的,但是不了解声明中参数GCL_STYLE  和CS_DropSHADOW  的意思,是不是改下参数就可以四边都有阴影呢?
跪求大佬点拔
#5
吹水佬2020-02-26 23:29
回复 4楼 瓜瓜1990
窗口类结构 WNDCLASSEX 成员style(窗口样式),GCL_STYLE就是这个成员标志。
CS_DROPSHADOW 是窗口阴影效果标志

SetClassLong(thisform.HWnd,GCL_STYLE  ,BITOR(GetClassLong(thisform.hwnd,GCL_STYLE),CS_DropSHADOW))
这句就是在窗口原来样式上再增加一个阴影效果

这个窗口样式设置与表单的boderstyle和titlebar属性无关,但表单必需是顶层表单 ShowWindow=2
通常先判断窗口样式有无 CS_DROPSHADOW 阴影效果标志,如:

nStyle = GetClassLong(thisform.hWnd, GCL_STYLE)
IF BITAND(nStyle, CS_DROPSHADOW) == 0
    SetClassLong(thisform.hWnd,  GCL_STYLE,  BITOR(nStyle,CS_DROPSHADOW))
ENDIF

另:四边不可能都有阴影的吧,有光影才有阴影
#6
gs25367856782020-02-27 09:25
唉!有这点时间,还不如,写好程序代码呢。。。
#7
瓜瓜19902020-02-29 17:05
回复 6楼 gs2536785678
用分层窗口和透明效果可以做四边的阴影,效果还可以
只有本站会员才能查看附件,请 登录
#8
吹水佬2020-02-29 19:03
回复 7楼 瓜瓜1990
要好看还是用图片,就看设计了。
#9
瓜瓜19902020-02-29 20:27
回复 8楼 吹水佬
用图片做皮肤?和阴影效果不一样吧

[此贴子已经被作者于2020-8-18 20:33编辑过]

#10
eepcvfp2021-05-27 00:42
回复 7楼 瓜瓜1990
请问楼主,能分享一下您说的分层窗口和透明效果的具体代码吗?我一直也想美化一下VFP的无边框窗体效果,但一直不得其法,一度放弃了,看了你的图片,又想去研究学习一下。
#11
gs25367856782021-06-03 09:58
boderstyle设置为0,desktop=.t.
层次感 来了
1