问题如下.
=====================
背景是固定大小的图片居中显示不许有窗体(没有放大缩小关闭)--已经ok啦~
然后是一列三个按钮全是画好的图片,要有mouseover换图片的效果.
其中,第3个按钮是EXIT,换的是下沉式效果的图片,和原图片等大小.
但是,第1,2个按钮mouseover时,要换比原图高的图片(等宽),看上去像下拉列表框的效果.问题一:
--mouserout怎么实现啊?现在over之后,图片变不回来了...>_< 问题二:(个人认为这个最难)
--如果按第1个按鈕换图片,是不是会盖掉下面的按钮啊...另外,
--按钮的实现:应该用图片控件,还是按钮控件呢?按钮控件的话,就要考虑做成透明的按钮才行...(因为要融入背景.)
--vb中图片控件又有两种,不知哪种合适用 ...有没有根据图片大小自动调整的,免得还要一点一点调大小.
=====================
背景是固定大小的图片居中显示不许有窗体(没有放大缩小关闭)--已经ok啦~
然后是一列三个按钮全是画好的图片,要有mouseover换图片的效果.
其中,第3个按钮是EXIT,换的是下沉式效果的图片,和原图片等大小.
但是,第1,2个按钮mouseover时,要换比原图高的图片(等宽),看上去像下拉列表框的效果.问题一:
--mouserout怎么实现啊?现在over之后,图片变不回来了...>_< 问题二:(个人认为这个最难)
--如果按第1个按鈕换图片,是不是会盖掉下面的按钮啊...另外,
--按钮的实现:应该用图片控件,还是按钮控件呢?按钮控件的话,就要考虑做成透明的按钮才行...(因为要融入背景.)
--vb中图片控件又有两种,不知哪种合适用 ...有没有根据图片大小自动调整的,免得还要一点一点调大小.
*****************************************************************************
欢迎使用CSDN论坛阅读器 : CSDN Reader(附全部源代码)
http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
1)API-->ReleaseCapture函数与SetCapture函数一起使用.
2)
Private Sub Form_Load()
Set pic1_1 = LoadPicture(App.Path & "\img\b_01_0.jpg") ' 普通圖片
Set pic1_2 = LoadPicture(App.Path & "\img\b_01_1.jpg") ' 按下時圖片
Set pic1_3 = LoadPicture(App.Path & "\img\b_01_2.jpg") ' 按下時的大圖片
Set Picture1.Picture = pic1_1
Set Picture2.Picture = pic1_1
End Sub
3)
'============================================================
'在Picture1的MouseMove事件中编写以下代码:(鼠标移入移出时,换同等大小的图片)
'============================================================
Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim MouseEnter As Boolean '鼠标进入的标志位
MouseEnter = (0 <= X) And (X <= Picture1.Width) And (0 <= Y) And (Y <= Picture1.Height)
'计算鼠标的移动是否在Picture1里面
If MouseEnter Then '鼠标已经进入
Picture1.Picture = pic1_2
SetCapture Picture1.hwnd
Else '鼠标已经离开
Picture1.Picture = pic1_1
ReleaseCapture
End If
End Sub4)但是,换大图片的时候,问题产生了:
因为pictureBox大小是设计时调好的,换大图的时候看不全.
如果换大图的时候,重设控件大小-->就会盖到下面的图片按钮.(我担心的事情总于发生了...)
'============================================================
'在Picture2的MouseMove事件中编写以下代码:(鼠标移入时,换大图片,移出时还原)
'============================================================
Private Sub Picture2_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Dim MouseEnter As Boolean '鼠标进入的标志位
MouseEnter = (0 <= X) And (X <= Picture2.Width) And (0 <= Y) And (Y <= Picture2.Height)
'计算鼠标的移动是否在Picture2里面
If MouseEnter Then '鼠标已经进入
Picture2.Picture = pic1_3
SetCapture Picture2.hwnd
Else '鼠标已经离开
Picture2.Picture = pic1_1
ReleaseCapture
End If
End Sub
Picture1.AutoSize = True (设计时调参数)看来就剩下这个问题了:
换大图时,会盖到下面的图片按钮.(应该是移动控件就可以解决了,再来研究一下吧)
鼠标移动到图片左方和上方-MouseEnter=flase --> OK;
鼠标移动到图片右方和下方-MouseEnter却显示=true!!'MouseEnter = (0 <= X) And (X <= Picture2.Width) And (0 <= Y) And (Y <= Picture2.Height)
目前我是用成功的例子直接改成我要的效果,解决的.
至于,为什么会产生这个bug,怎么想也想不通~~现在还剩最后一个问题了:
4个圆角的矩形框 窗体的实现.CreateRectRgn;
CreateEllipticRgn;
CombineRgn
怎么用啊,不太会切图 -_-*.找找看有没有圆角的矩形的API,直接用...不是特殊形状啊,应该很好实现的...试试...PS:
进来看的人都会有分哦 :P
问题基本解决了,呵呵~~
还要看怎么用...0_0|像这样的API功能,参数...要怎么查比较好呐?大家有没有什么好建议?
不知道这个API函数,就没辙了...
而且很多都是几个一起用来做效果的啊...
写散分的,通常又分不到几分.题外话了,为什么我写:
'q = CreateRoundRectRgn(0, 0, Form1.Height, Form1.Width,30, 30)只有左上角是圆角,其他没有变化.
非得写固定的值,一点一点调出来? -->
q = CreateRoundRectRgn(0, 0, 552, 410, 30, 30)
===============================================
SetWindowRgn Form1.hWnd, q, True '设置窗口区域