咨询电话:010-82823766

VB中软件封面技术探秘
  • 2007-6-25 16:42:41
  • 发表时间:
  • 浏览次数:
  • 本站原创
  • 文章来源:
  • 佚名
  • 作者:

刘 强

封面技术在软件开发中越来越成为一种标准,无论你在DOS或WINDOWS的环境下 进行软件开发,一个漂亮而醒目的封面总会使你的软件更加充满魅力。

对于WINDOWS环境下的应用软件,封面技术更是必不可少。微软公司的OFFICE套件,如WORD,其简洁美观,具有真实三维效果的封面给所有OFFICE的用户留下了深刻的印象。其封面的设计完全可以作为WINDOWS应用程序的标准。从WORD的封面设计我们可以看出WINDOWS环境下的应用软件的封面设计应遵循以下原则:

在主界面载入的同时载入,封面应该清楚的显示软件名称及版本信息,在主界面载入完毕后自动卸出内存,让出所占用的WINDOWS系统资源。

使用微软公司的Visual Basic进行软件开发是WINDOWS环境下应用程序开发的捷径,同样,使用Visual Basic制作应用程序封面也是相当方便的。在开发过程中,主要应该解决的问题有:

1. 封面的制作。

这不是一个纯技术性的问题。开发者必须有一定的美术知识和功底,制作出的封面也可以具有个人的不同的风格。在VB中,封面也是一个窗体,开发者可以在窗体上使用VB的绘图工具Line和Shape绘制出图形,甚至可以绘制出类似WORD的三维效果,也可以在窗体内载入一个图片框(Picture Box)或图象控制(Image Control),利用图片框或图象控制载入自己所喜欢的图片来制作封面,在图形之上,可以使用文本框(Text Box)或标签框(Label)来显示版本信息。为了使这样的一个窗体更加象一个封面,应该去除窗体的控制框,标题栏和最大最小化按钮,同时窗体的大小也不允许用户改变。因而在封面窗体的属性中,属性Control Box应设为False,Caption应设为空,MaxButton和MinButton应设为False,BorderStyler属性设为1,即固定的单线边界,这样就实现了一个具有专业水准的封面。

2. 浮动窗体的实现。

由于主窗体先载入,然后激发封面的事件(event),使封面窗体成为当前活动窗体,所以必须保证窗体总是浮在主窗体的上面,在VB中,这个问题主要依靠调用WINDOWS的API函数SetWindowpos来实现。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)

 

其中: hWnd为作为封面窗体的句柄;

hWndInsertAfter 指示为封面窗体前载入的窗体;

X为封面窗体左上角的X坐标;

Y为封面窗体左上角的Y坐标;

cx为窗体新宽度;

cy为窗体新高度;

wFlags影响窗体大小和位置的16位值。

其中,hWndInsertAfter设为HWND_TOPMOST,wFlags设为SWP_NOMOVE (不移动窗体,即忽略cx和cy)或SWP_NOSIZE(不改变窗体大小,即忽略X和Y),就可以实现将HWND标识的窗体置于所有非最顶窗体之上。

3. 还要保证主窗体载入完毕后,封面窗体自动卸出。这主要靠在主窗体中使用定时器控件,在激活主窗体的Activate事件中激活定时器,设置定时器属性,在定时器控件的事件Timer中,关闭定时器,卸出封面。

下面给出的程序实例是一个完整的封面设计,供VB程序开发者参考。

假设封面窗体名为frmcover,主窗体名为frmmain,其中封面窗体可以用绘图指令绘出,下 面的程序给出了绘制三维窗体的方法,在封面窗体载入过程中,窗体上可根据用户需要绘制三维面板或图片框等。

Sub Form_Load ()

Dim fWidth As Integer

Dim i As Integer, t As Integer, l As Integer

Dim w As Integer, h As Integer

 

frmcover.BackColor = &HC0C0C0

frmcover.Left = (screen.Width - Width) / 2

frmcover.Top = (screen.Height - Height) / 2

frmcover.ScaleMode = 3: fWidth = 4

frmcover.AutoRedraw = -1

 

For i = 1 To fWidth

t = i

l = i

h = scaleheight

w = scalewidth

Line (l, t)-(l, h - i), RGB(255, 255, 255)

Line (l, t)-(w - i, t), RGB(255, 255, 255)

Line (w - l, t)-(w - l, h - t), RGB(64, 64, 64)

Line (l, h - l)-(w - l, h - l), RGB(64, 64, 64)

Next i

 

End Sub

 

在主窗体的激活过程中激活定时器,并设置定时器的Interval属性,程序如下:

Sub Form_Activate ()

 

Timer1.Interval = 3000 ’封面存在时间为3秒

Timer1.Enabled = True ’打开定时器

 

End Sub

载入封面的代码放在主窗体的Load事件中,可以改变鼠标形状以示用户等待。首先在通用过程中声明常量:

Const HWND_TOPMOST = -1

Const SWP_NOMOVE = &H10

Const SWP_NOSIZE = &H40

Const flags = SWP_NOMOVE Or SWP_NOSIZE

程序中使用SetWindowPos 函数实现浮动效果:

Sub Form_Load ()

screen.MousePointer = 11 ’鼠标呈沙漏状

frmcover.Show ’显示封面

frmcover.Refresh

SetWindowPos frmcover.hWnd, HWND_TOPMOST, 0, 0, 0, 0, flags

End Sub

定时器时间到后关闭定时器,同时卸载封面窗体,使用户可以继续操作主窗体。程序如下:

Sub Timer1_Timer ()

 

frmmain.Timer1.Enabled = False ‘关闭定时器

Unload frmcover ‘卸载封面

screen.MousePointer = 0 ‘鼠标恢复原样

 

End Sub

这样就实现了一个标准的软件封面,整个程序设计思路简单清晰,较好的解决了上述三个问题。它也充分体现了使用VB开发WINDOWS应用程序的方便和高效性,希望对VB程序员和爱好者有所启发。

 

top
推荐导读
推荐导读
bottom
top
热门文章
热门文章
bottom