⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 9917.txt

📁 关于编程技术技巧的文章
💻 TXT
📖 第 1 页 / 共 4 页
字号:
        Image1.Move Image1.Left, Form1.Height - Image1.Height
        DetaY% = -DetaY%
    ElseIf Image1.Left <= 0 Then				‘碰到左边界
        Image1.Move 0, Image1.Top
        DetaX% = -DetaX%
    ElseIf Image1.Top <= 0 Then					‘碰到下边界
        Image1.Move Image1.Left, 0
        DetaY% = -DetaY%
    End If
End Sub

五、 缩放动画
气球的膨胀或缩小是缩放动画的典型例子。在Timer事件过程中修改Image对象
的Width和/或Height属性,便可实现缩放动画。但如果要表现物体的同心缩放,
则还应同时还需移动Image对象。
下面是模拟气球在空中缩放(同心)的例子。程序启动时,在窗体中显示一只
气球,用鼠标左键点击它,则气球将开始膨胀,如碰到窗体的边界,气球将缩
小,缩小到原来大小时,又将膨胀;再用鼠标左键点击气球,则气球将停止缩
放。位图文件Balloon.bmp存放在当前工程所在的目录中。
在需显示动画的窗体(Form1)中设置Image对象Image1和Timer对象Timer1,
并按下表设置它们的属性,未列出的属性使用缺省值。
对象
属性
设置值
Image1
Picture
...(工程文件所处路径)\Balloon.bmp

Stretch
True
Timer1
Enabled
False

Interval
150
程序代码如下:
Option Explicit         		'变量必须先定义,才能使用
Dim IsPlaying As Boolean    	'动画是否启动
Dim Width0%, Height0%		'气球原大小
Dim DetaX%, DetaY%      	'沿X、Y轴的缩放增量

Private Sub Form_Load()
    IsPlaying = False			
    Image1.ToolTipText = "开始"
    Width0% = Image1.Width	‘保存气球的初始大小
    Height0% = Image1.Height
    DetaX% = 100
    DetaY% = 100
End Sub

Private Sub Image1_Click()
    If IsPlaying Then
        IsPlaying = False
        Timer1.Enabled = IsPlaying
        Image1.ToolTipText = "开始"
    Else
        IsPlaying = True
        Timer1.Enabled = IsPlaying
        Image1.ToolTipText = "停止"
    End If
End Sub

Private Sub Timer1_Timer()      'Timer事件
        '移动Image对象,保持同心缩放
    Image1.Move Image1.Left - DetaX% / 2, Image1.Top - DetaY% / 2
			‘按增量缩放
    Image1.Width = Image1.Width + DetaX%
    Image1.Height = Image1.Height + DetaY%
        
        '碰到边界,则缩小
    If Image1.Left + Image1.Width >= Form1.Width Or _
       Image1.Top + Image1.Height >= Form1.Height Or _
       Image1.Left <= 0 Or Image1.Top <= 0 Then
        DetaX% = -DetaX%
        DetaY% = -DetaY%
    End If
    
        '缩到原大,则膨胀
    If Image1.Width <= Width0% Or Image1.Height <= Height0% Then
        DetaX% = -DetaX%
        DetaY% = -DetaY%
    End If
End Sub

***********************************************************

                     用VB制作常居上层的浮动工具箱
   
通过形象化的图标,浮动工具箱可以省去用户点击主菜单的麻烦。当鼠标位于其
图标上时,在鼠标下方会自动“掉出”一个小标签,说明它的功能。而且常居上
层,不会被打开的文件所覆盖。并且可以改变形状及位置,尽可能地减少所占用
的桌面面积。 

能不能在我们自己的应用程序中使用这种先进手段呢?这里介绍一种用VB来实现
的简单方法。主要编程思路是:引用 Windows APL函数,实现表单常居上层;建
立控件数组,通过控件的 MouseMove事件,引发注释的弹出和消失。 

一、浮动工具箱的可视化实现方法 

1.在Form1 上放置控件SSRIBBON按钮(因为它本身有三种状态:按下、弹起、禁止
使用,大部分图标按钮都是这类按钮)。再放置文本框 Text1(也可以用 Label控
件,但效果会有所不同,稍后会讲到),再放置一个命令按钮Command1。各控件属
性见表1(表中只列出一个例子,其它的只要修改相应的属性即可)。 

2.单击GP3D1,按 ALT+Del剪切,然后按 ALT+Insert 复制若干,形成控件数组
GP3D1(0)、GP3D1(2)、GP3D1(3)……,再如法建立Text1(0)、Text1(1)、Text1(3)
……。 

3.调整按钮及文本框位置。 

在此期间,每一项工作都是必要的,如文本框的Visible值为 False,以确保程序
启动时不显示文本框,而Enable值为False是为了在运行过程中,文本框不能输入
文本。如果使用标签(Label)代替文本框,则不能纵向排列图标按钮,只能横向。
因为下面的按钮会盖住Label,但使用Label要比文本框省内存。 

为了实现常居上层的效果,必须调用Windows API 函数,事实上VB的很多方法都
引用于Windows API 。这里我们用SetWindowsPos过程,此过程在User.exe中定义,
它是Windows系统重要的动态链接库。在VB中引用 API函数时,必须在通用声明部
分声明注册。声明API函数往往比较麻烦且易出错,比如: 

Declare Sub SetWindowPos Lib ″User″ (ByVal hwnd As Integer, ByVal 
hWndInsertAfter As Integer,ByVal X As Integer, ByVal Y As Integer,ByVal 
cx As Integer, ByVal cy As Integer, ByVal wFlags As Integer) 

如果所有的API函数声明都这么输入,效率太低。好在各版本的VB都提供了一个
Windows API Help程序,打开它,搜索 SetWindowPos ,找到以后点击超文本带
出解释, 拷贝即可。 

二、创建代码在通用声明部分输入下列代码并声明一些常量及全程变量: 

Declare Sub setwindowpos Lib ″User″ (ByVal hwnd As Integer, ByVal 
hWndInsertAfter As Integer, ByVal X As Integer, ByVal Y As Integer, 
ByVal cx As Integer, ByVal cy As Integer, ByVal wFlags As Integer) 

Const SWP_NOSIZE = 1 

Const SWP_nomove = 2 

Const flags = SWP_NOSIZE Or SWP_nomove 

Const hwnd_topmost = -1 

Const hwnd_notopmost = -2 

Dim i As Integer 

Dim B As Integer 

为GP3D1按钮的MouseMove 事件添加如下代码,这里仅实现鼠标在其上时注释器
弹出、不在其上时隐去的功能,读者可再加一个计时器控件和一些代码,即可
很容易地实现鼠标位于其上片刻后注释器弹出的效果,这样就不会出现鼠标“路
过”按钮时,注释器即出现的结果了。 

Sub GP3D1_MouseMove (index As Integer, Button As Integer, Shift 

As Integer, X As Single, Y As Single) 

i = index ′记录下当前鼠标位于哪个按钮上 

text1(i).Visible = True ″使其弹出 

If B <> i Then ′使其它按钮隐去 

text1(B).Visible = False 

End If 

B = i ′请好好体会这个变量B的作用 

End Sub 

为Command1按钮的Click事件添加如下代码: 

Sub Command1_Click () 

do While DoEvents() ′用DoEvents()实现空闲循环下的多任务监测 

setwindowpos hwnd, hwnd_topmost, 0, 0, 0, 0, flags ′实现常居上层 

loop 

End Sub 

为Command1按钮的MouseMove事件添加如下代码: 

Sub Command1_MouseMove (Button As Integer, Shift As Integer, X 

As Single, Y As Single) 

text1(i).Visible = False ′鼠标离开按钮区,位于命令按钮上时隐去注释器 

End Sub 

为Form1的MouseMove事件添加如下代码: 

Sub Form_MouseMove (Button As Integer, Shift As Integer, X 

As Single, Y As Single) 

text1(i).Visible = False ′鼠标离开按钮区,进入表单时隐去注释器 

End Sub 

***********************************************************

                          用VB实现浮动按钮
    
在微软的很多软件(如WORD)的工具栏中,都采用一种浮动按纽,即正常情况下
按纽的图标呈灰色,当鼠标移动到某一按纽时,该按纽自动向上凸起且变为彩色,
并在按纽的右下方有一标签提示该按纽的功能,鼠标移开后又自动还原,这种按
纽用VB实现时,方法如下:

1.先用绘图工具作出按纽图标后存盘(如1.bmp),再用图象处理软件将该图标转
换为灰度图或浮雕图后再存盘(如2.bmp)。

2.运行VB,建立一新窗体(如form1)。

3.在窗体上需要建立按纽的位置处建立一图片框(如image1),其大小和图标相
同,并将其picture属性设为2.bmp。

4.在image1周围建立由四个长度相同的line控件(如line1~4)组成的方框,方框
要比image1控件稍大,否则达不到预计效果,将上面和左边的颜色设成白色,下
面和右边的设成黑色,并将四个line控件的visible属性都设成false 。

5.在程序中加入以下内容即可:

Private Sub Image1_MouseMove(Botton As Integer,Shift As Integer,X As Single,Y As Single)

   Image1.Picture=LoadPicture("c:\1.bmp")

   Line1.Visible=True 

   Line2.Visible=True 

   Line3.Visible=True 

   Line4.Visible=True 

End Sub

Private Sub Form1_MouseMove(Botton As Integer,Shift As Integer,X As Single,Y As Single)

   Image1.Picture=LoadPicture("c:\2.bmp")

   Line1.Visible=False 

   Line2.Visible=False

   Line3.Visible=False

   Line3.Visible=False

End Sub
                     
***********************************************************
                     
                           VC++中使程序自动运行
  
 我用VC++,希望该程序能在其Main Frame Window出现在屏幕后自动运行,而无需
等待任何消息。所以想知道哪些函数在窗口出现后会被自动调用?
首先,在Windows中没有任何一个消息用来通知窗口初始化完毕,所以在VC中也没有
相应的函数,但您的问题可用下面的办法解决。

用VC++5.0编写应用程序,MFC AppWizard会自动生成程序的框架,其中CTestView类
的函数OnDraw()在窗口出现后自动调用。当然,此函数在窗口的大小发生改变(如最
大、最小化)以及窗口由被遮住(一部分)到重新显现时也会被调用。所以为了使某
些代码能够自动运行并且只运行一次,除了要将其代码写在OnDraw()函数中外,还
要在CTestView类中添加一个用于标记的BOOL型变量x(用户可以自己定义变量名),

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -