如何为自定义控件的周边加上阴影效果?

wwh999 2009-10-04 11:08:41
就像VS开发环境中菜单的下级级联菜单的阴影效果..
(我想给些自定义控件加上这样的效果,让他在显示出来时看起来有立体感)

刚尝试在.Net下写个控件,不太懂.如果可以贴码最好(还有,这些代码是必须放在Paint事件里吗?),谢谢!
...全文
241 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
wwh999 2010-11-23
  • 打赏
  • 举报
回复
调用了个简单的API实现了,不过必须FormBorder=None才行。
Private Const CS_DROPSHADOW As Integer = &H20000
Private Const GCL_STYLE As Integer = (-26)
'声明Win32 API
Public Declare Function SetClassLong Lib "user32" Alias "SetClassLongA" (ByVal hwnd As Integer, ByVal nIndex As Integer, ByVal dwNewLong As Integer) As Integer
Public Declare Function GetClassLong Lib "user32" Alias "GetClassLongA" (ByVal hwnd As Integer, ByVal nIndex As Integer) As Integer

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
SetClassLong(Me.Handle, GCL_STYLE, GetClassLong(Me.Handle, GCL_STYLE) Or CS_DROPSHADOW)
End Sub
wwh999 2009-11-23
  • 打赏
  • 举报
回复
这与分少分多没关系吧..
没人自己再顶一下。
wwh999 2009-10-18
  • 打赏
  • 举报
回复
就是想知道不用图片,怎么看起来有立体阴影效果。(见MS的菜单)
ourola 2009-10-16
  • 打赏
  • 举报
回复
偏移..
wwh999 2009-10-09
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 ms44 的回复:]
override onpint事件,
在里面画一个矩形,然后画base的,盖住他大部分,留出右下两边即可,就好了。
[/Quote]

我是在自定义控件的Paint事件中写的代码画的矩形,只能画出边线。
Dim wkPen As New Pen(SystemColors.ControlDark)
Dim recA As Rectangle = Me.ClientRectangle
e.Graphics.DrawRectangle(wkPen, recA.Left, recA.Top, recA.Width - 1, recA.Height - 1)
Dim recB As Rectangle = dgvGrid.Bounds
e.Graphics.DrawRectangle(wkPen, recB.Left - 1, recB.Top, recB.Width + 1, recB.Height)


要的是那种立体点的感觉。怎么实现?
拉达曼迪斯II 2009-10-08
  • 打赏
  • 举报
回复
override onpint事件,
在里面画一个矩形,然后画base的,盖住他大部分,留出右下两边即可,就好了。
wwh999 2009-10-07
  • 打赏
  • 举报
回复
要的其实很简单:
随便造个控件,让它被New之后显示出来的周边有立体感的阴影(像菜单Show出来的四个边一样).
说下具体怎么实现,谢谢。
sdfdsdfsfsd 2009-10-07
  • 打赏
  • 举报
回复
好像很简单,不过我没做过

首先绘制控件
然后获取该控件的客户区
把范围适当减少一点然后用不同亮度的灰色绘制几遍
dylike 2009-10-07
  • 打赏
  • 举报
回复
可以实现,要看你想实现的控件是什么,如果是菜单,那么这将花费你N多内存资源.窗体本身控件的则容易,不吃多少资源.
两种方法:
1 在控件内部绘制投影,这将缩小控件的实际客户区矩形.
2 在控件外部绘制投影,这可以使用多种方法,如界面的直接绘制,或是透明窗体的叠加.
wwh999 2009-10-06
  • 打赏
  • 举报
回复
都没人回的..?
wwh999 2009-10-05
  • 打赏
  • 举报
回复
加楼上,是WinForm的...楼上的还在线吗?
koukoujiayi 2009-10-04
  • 打赏
  • 举报
回复
是webform还是winform??

8,833

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 组件/控件开发
社区管理员
  • 组件/控件开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧