问题如下.
=====================
背景是固定大小的图片居中显示不许有窗体(没有放大缩小关闭)--已经ok啦~
然后是一列三个按钮全是画好的图片,要有mouseover换图片的效果. 
其中,第3个按钮是EXIT,换的是下沉式效果的图片,和原图片等大小.
但是,第1,2个按钮mouseover时,要换比原图高的图片(等宽),看上去像下拉列表框的效果.问题一:
--mouserout怎么实现啊?现在over之后,图片变不回来了...>_< 问题二:(个人认为这个最难)
--如果按第1个按鈕换图片,是不是会盖掉下面的按钮啊...另外,
--按钮的实现:应该用图片控件,还是按钮控件呢?按钮控件的话,就要考虑做成透明的按钮才行...(因为要融入背景.)
--vb中图片控件又有两种,不知哪种合适用 ...有没有根据图片大小自动调整的,免得还要一点一点调大小.

解决方案 »

  1.   

    问题一:在其他控件的mousemove事件中变回来  
    *****************************************************************************
    欢迎使用CSDN论坛阅读器 : CSDN Reader(附全部源代码) 
    http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
      

  2.   

    问题一:解决了  --mouserout的实现如下:
    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
      

  3.   

    换大图的时候看不全的问题解决啦:
    Picture1.AutoSize   =   True   (设计时调参数)看来就剩下这个问题了:
    换大图时,会盖到下面的图片按钮.(应该是移动控件就可以解决了,再来研究一下吧)
      

  4.   

    奇怪、奇怪本来我尝试的mousemove已经OK了,但是等我正式写的时候,发生了这样的怪事:
    鼠标移动到图片左方和上方-MouseEnter=flase --> OK;
    鼠标移动到图片右方和下方-MouseEnter却显示=true!!'MouseEnter = (0 <= X) And (X <= Picture2.Width) And (0 <= Y) And (Y <= Picture2.Height)
      

  5.   

    MouseEnter 要用 Picture2 的 Left 和 Top 进行判断,不可能都是 0 吧
      

  6.   

    楼上的大哥...网上查的资料说:是控件开始的区域呐, 而且我做了一个成功的...
    目前我是用成功的例子直接改成我要的效果,解决的.
    至于,为什么会产生这个bug,怎么想也想不通~~现在还剩最后一个问题了:
    4个圆角的矩形框 窗体的实现.CreateRectRgn;
    CreateEllipticRgn;
    CombineRgn
    怎么用啊,不太会切图 -_-*.找找看有没有圆角的矩形的API,直接用...不是特殊形状啊,应该很好实现的...试试...PS:
    进来看的人都会有分哦 :P
    问题基本解决了,呵呵~~
      

  7.   

    哈哈,果然有: CreateRoundRectRgn,
    还要看怎么用...0_0|像这样的API功能,参数...要怎么查比较好呐?大家有没有什么好建议?
    不知道这个API函数,就没辙了...
    而且很多都是几个一起用来做效果的啊...
      

  8.   

    奇怪这里有的时候有分不进来拿,
    写散分的,通常又分不到几分.题外话了,为什么我写:
    'q = CreateRoundRectRgn(0, 0, Form1.Height, Form1.Width,30, 30)只有左上角是圆角,其他没有变化.
    非得写固定的值,一点一点调出来? -->
     q = CreateRoundRectRgn(0, 0, 552, 410, 30, 30)
    ===============================================
     SetWindowRgn Form1.hWnd, q, True '设置窗口区域