level 5
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPrivate Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As LongConst WS_EX_LAYERED = &H80000Const GWL_EXSTYLE = (-20)Const LWA_COLORKEY = &H1Private Sub Form_Load() BackColor = &HFEFEFE '先设置背景为一种用不到的颜色 SetWindowLong hwnd, GWL_EXSTYLE, WS_EX_LAYERED SetLayeredWindowAttributes hwnd, &HFEFEFE, 0, LWA_COLORKEY '第二个参数将这种颜色屏蔽掉End Sub
2013年04月30日 08点04分
3
谢谢,请问能加QQ教我吗?最近在学习这部分,希望高手指教一下
2013年04月30日 09点04分
回复 a493216399 :我是小学生。
2013年04月30日 09点04分
回复 无谓战舰 :这没什么关系吧,值得学习的人都可以当师傅
2013年04月30日 09点04分
回复 a493216399 :编程这种东西,还是自己体会来得深刻
2013年04月30日 09点04分
level 9
api或者直接无边框窗体+背景图,在需要的地方话image加上拖动代码,ok
2013年05月02日 07点05分
9
level 13
有人挖坟了,我这里回复下异型窗体设计思路:
1.就是楼上的SetWindowLong加上WS_EX_LAYERED窗口扩展样式,然后SetLayeredWindowAttributes透明掉指定颜色就行,以前有些游戏登录窗口就是采用这种的(缺点是会有毛边,锯齿感)
2.SetWindowLong加上WS_EX_LAYERED窗口扩展样式,然后创建一个内存DC(32位色深),用GDI+函数把带Alpha通道的PNG绘制到内存DC,接着用UpdateLayeredWindow(不是上面的SetLayeredWindowAttributes)函数更新到主窗口上,这样就会有很好的窗口效果(像楼主展示的窗口一样),缺点是放在窗体上的控件全部失效(功能还在,只是不显示控件外观了),解决方法1.再建一个窗体透明掉指定颜色只保留控件部分附在主窗口上,或者不透明窗口只将背景图片或颜色设置和主窗体一样,然后附在主窗口)。2.将控件的外观重绘到内存DC上。3.这个难度更高,就是将控件全部自绘(无hWnd控件),控件全由自己绘制到内存DC
2021年07月21日 09点07分
13
解决方法3的做法就像现在的QQ、百度、迅雷等采用的DirectUI方案
2021年07月21日 09点07分