如何用VB编写Windows程序.ppt

上传人:za****8 文档编号:14286582 上传时间:2020-07-16 格式:PPT 页数:65 大小:234.51KB
收藏 版权申诉 举报 下载
如何用VB编写Windows程序.ppt_第1页
第1页 / 共65页
如何用VB编写Windows程序.ppt_第2页
第2页 / 共65页
如何用VB编写Windows程序.ppt_第3页
第3页 / 共65页
资源描述:

《如何用VB编写Windows程序.ppt》由会员分享,可在线阅读,更多相关《如何用VB编写Windows程序.ppt(65页珍藏版)》请在装配图网上搜索。

1、Visual Basic 程序设计入门 5.1 Visual Basic 程序的组成 1) 工程文件 .vbp 2) 窗体文件 .frm 和 .frx: 每个窗体(Form)对应于两个文件,.frm文件实际上就是纯文本文件,描述了窗体位置,各个控件名称,位置等信息,以及所有的函数。 .frx文件是二进制文件,存放窗体中的图片,图标等资源。这两个文件一般不需要直接去操作它 3) 代码模块文件 .bas 一个工程中可以有任意多个代码模块文件,里面可以定义所有窗体都能使用的全局变量,全局函数 4) 类模块文件 .cls 如果要写一个类,那么应该将类写在一个类模块文件里。一个 .cls 文件可以包含多

2、个类,一个工程里可以有任意多个 .cls文件,VB的程序一般是由一个个窗体(Form)构成,当然也可以没有任何窗体。窗体、模块、类模块都不是一定要有的。但显然不能都没有。,5.2 Visual Basic 的 sub 和 Function VB中的函数有 Sub 和 Function 两种,前者没有返回值,后者有。为简单起见,我们都称之为函数。例如: Sub PrintMsg(ByVal szMsg As String) If szMsg = Then Exit Sub 从 sub中返回 Else MsgBox szMsg End If End Sub 调用语句: PrintMsg “Hell

3、o,world”,Function Max(ByVal a As Long, ByVal b As Long) As Long 该函数返回值类型是long If a b Then Max = a Else Max = b End If End Function 调用语句: c = Max(3,5) 用到了返回值 或 Max 3,5 不用返回值,5.3 参数的传递方式 VB中参数传递方式有传值和传引用两种。传值的参数在定义的时候使用 byval 关键字 例如: Sub Func(ByVal a As Long, b As Long, ByVal asz As String, bsz As Str

4、ing) a = 1 b = 1 asz = Hello bsz = Hello End Sub,Private Sub Command1_Click() Dim a As Long, b As Long Dim asz As String, bsz As String a = 0 b = 0 asz = Ok bsz = Ok Func a, b, asz, bsz MsgBox a 弹出 0 MsgBox b弹出 1 MsgBox asz 弹出 Ok MsgBox bsz弹出 Hello End Sub,5.4 Visual Basic 程序的执行 VB程序可以从某一个Form的 Form

5、_load 函数开始执行,也可以从某个代码模块的 Sub main () 函数开始执行。Sub main() 函数只能有一个。 在VB的“工程 | 属性”菜单里可以进行启动设置。 Form_load 函数(如果你写了的话)在Form装入内存时被调用,此时Form还没有被显示出来 在代码模块和在Form中,都可以装载某个Form并将它显示出来。,一个有两个Form和一个代码模块的VB程序的例子: 文件 mymain.bas Sub main() Load Form1 装入Form1,Form_load 会在此时被调用 Form1.Show 显示它 End Sub 文件 form1.frm: Pr

6、ivate Sub Command1_Click() Load Form2 Form2.form_load 会在此时被调用 Form2.Show 1 Show 1表示只要 Form2在就不能点击Form1 End Sub,使用 unload 窗体名 语句来卸载一个窗体 如果卸载的窗体是自己,那么可以用 unload me 语句,5.5 Visual Basic 的变量类型及变量定义 VB 中最基本的变量类型有: Integer 16字节 long 32 字节 Byte 8字节 double 8字节 String 字符串 VB中,变量可以不声明就直接使用。但强烈建议不要这么做。应该在每个Form

7、文件和每个代码模块文件的开头加 Option explict ,告诉编译器,我不希望允许变量没声明就能使用.,VB 中的变量用 dim 语句定义 Dim n as long Dim f as double Dim szName as string, szId as string szName = “ Myname is ” + szId,. VB 中的数组 Dim MyArray(20) as long 实际上该数组有21个元素,MyArray(0) MyArray(20) 访问数组元素: MyArray(0) = 1 多维数组 Dim Matrix(10, 10) As Long Matri

8、x(0, 0) = 1 字符串数组 Dim StringArray(10) as string StringArray(0) = “This”,. 动态数组 Dim MyArray() as long Redim MyArray(30) 动态分配空间 MyArray(2) = 1 使用 Redim MyArray(50) 重新分配空间 MyArray(2) = 5 Redim Preserve MyArray(60)重新分配空间并保持其 原有内容 Erase MyArray 释放动态数组,. VB中的字符串 Dim szName as string szName = szName + “thi

9、s” Dim szAge as string * 30 szAge = “this” szName = Trim(szAge) 对字符串操作有 Trim,Ltrim,Rtrim 截断操作 Left,Right,Mid 取子串操作 Val 字符串转换为数值 Str 数值转换为字符串 等函数,VB中没有Char类型,所以不能取字符串中的某个字符 来进行操作,只能取长度为1的子串 Asc 字符转换为ASCII码 Chr Ascii码转换成字符 这样的函数转换的对象或转换的结果也是长度为1的字符串。 如: Asc(“I”) Dim sz as string Sz = Chr(80),5.6 VB中变量

10、和函数的作用域 1)在一个函数中定义的变量,只能在这个函数中使用 2)在一个窗体中,所有函数的外面定义的变量,可以被这个窗体中的所有函数使用。如果用public关键字来定义,则还在其他地方以 “窗体名.变量名” 的方式使用。函数也一样。比如某窗体 MyForm1 中有 Public a as long Public sub MyMsg() End sub 那么在该窗体以外,可以通过 MyForm1.a MyForm1.MyMsg 方式来使用,前提是 MyForm1 已经被装入,3) 在一个代码模块中定义的变量,如果用 dim 定义,那么 只能在这个代码模块中使用,如果用 global 定义,那

11、么可以在所有代码模块和窗体中使用。 比如 Global g_nAge as long 4)在一个代码模块中定义的函数,可以在所有代码模块和窗体中调用,除非前面使用了private关键字 4)类模块中定义的类,可以在所有窗体和代码模块中使用,5.7 VB窗体的基本属性和事件 1)属性: caption 标题栏文字 backcolor 背景色 borderstyle 边框类型 (固定,可变,没有) ShowInTaskbar 是否在任务栏显示 StartUpPosition 起始位置(设计时,屏幕中央.) Keypreview 是否优先于控件而获得键盘消息,2)事件: Load 装载窗体时发生 K

12、eydown 键盘按下时发生 resize 窗口大小变化时发生 Activate 窗口由不活跃变为活跃时发生 ,5.8 各种控件一般都有的属性 Enabled 是否可以点 Visible 是否可见 Left,Top,Width,Height 位置和大小 Font 字体 ,5.9 常见控件用法 见例子程序 MSDN9898VS2052SamplesVB98Controls,5.9 常见控件用法 5.9.0 许多控件都共有的属性、方法和事件 共有属性: Name : 名字 (运行是也可以读取) Left, Top, Width, Height 位置 Visible : 是否可见 Enabled :

13、 是否有效 ForeColor : 前景色(字的颜色) BackColor : 背景色 BorderStyle : 边框样式(有,无) Apperance : 是否三维效果 ToolTipText : 提示文字 Font : 字体 FontName : 字体名字,FontBold : 是否粗体字 FontSize : 字体大小 FontUnderline : 是否下划线 FontItalic : 是否斜体 TabStop : 是否能通过 Tab键切换到 TabIndex : Tab键切换时的顺序 Value : 卷滚条代表的值,进度条代表的进度值 单选框、多选框是否选中 MousePointe

14、r : 鼠标样子 若值为 Custom 则还须 MouseIcon 属性来指定鼠标样子( .cur 文件时光标文件) Tag : 标记字符串,共有方法: Move : 移动位置和调整大小 Refresh : 刷新显示 SetFocus : 设置输入焦点 共有事件: Click : 鼠标点击 DblClick : 鼠标双击 GotFocus : 获得输入焦点 KeyDown : 键按下 KeyUp : 键松开 KeyPress : 字母,数字键敲击 MouseDown : 鼠标按下 MouseUp : 鼠标松开 MouseMove : 鼠标移动,5.9.1 静态文本控件 Label (非窗口)

15、属性: Capiton : 文字 AutoSize : 自己根据文字调整大小 Backcolor : 背景色 Backstyle : 背景是否透明 BorderStyle : 有无边框 ForeColor: 文字颜色 WordWrap : 是否自动折行 Aligment : 文字靠左 ,居中,还是靠右 事件: Click, MouseDown 等,5.9.2 按钮控件 CommandButton 属性: Capiton : 文字 Cancel : 为true 则按ESC键就相当于点击它 Default :为true 则按回车键就相当于点击它 Style : 图形模式或是字符模式 Picture

16、 : 图形 DownPicture : 按下时图形 DisabledPicture : 不能点时的图形 事件: Click 等,5.9.3 定时器控件 Timer 属性: Interval : 引发 Timer事件的时间间隔(单位:毫秒) Enabled : 是否在记时,即是否会引发Timer事件 事件: Timer,5.9.4 图片控件 PictureBox 属性: AutoSize : 根据图像自动调整大小 Picture : 图片 hDC : 设备描述表句柄 hWnd : 窗口句柄 方法: Refresh : 刷新(即引发 Paint事件) TextWidth : 求给定文字串的宽度 T

17、extHeight : 求给定文字串的高度 事件: Paint : 重画 重要特点:是一个窗口,可在上面放置其他控件 相关函数: LoadPicture 从文件装入图像,5.9.5 图像控件 Image 属性: Picture : 图像 和图片控件区别在于它不是一个窗口,不能在上面放置其他控件,没有窗口句柄和设备描述表, 因而比图片控件节省资源。如果仅为显示一副图,应该使用图像控件 相关函数: LoadPicture 从文件装入图像,5.9.6 卷滚条控件 VscrollBar 和 HScrollBar 属性: Value : 卷滚条代表的数值 Min : 卷滚到最左(上)时代表的数值 Max

18、 : 卷滚到最右(下)时代表的数值 SmallChange : 点两端引起的数值变化量 LargeChange : 点中间引起的数值变化量 事件: OnChange : 数值发生变化引发 OnScroll : 拖动滑块时引发,5.9.7 控件数组 几个同类型的控件,可以名字一样,形成一个数组 这个数组可以是设计时就做好,也可以运行时, 通过 Load 语句动态生成 每个数组元素都有一个下标 Index 同一数组元素共用相同的各类事件处理函数,函数有一个参数 index 指明了事件发生在那个控件上,5.9.8 对话框控件 CommonDialog 用来实现文件,字体,颜色,打印机设置等对话框 属

19、性: Flag: 一些标志 FileName : 通过文件对话框获取的文件名 InitDir : 文件对话框的初始路径 Filter : 文件对话框的过滤器 FontName : 通过字体对话框获得的字体名字 FontBold : 字体是否粗体 FontItalic: FontUnderline: Color : 通过颜色对话框获得的颜色 方法:ShowOpen, ShowSave,ShowFont, ShowColor, ShowPrinter, ShowHelp,5.9.9 编辑框控件 TextBox 属性: Text : 文字 MultiLine : 是否多行 SelStart : 选中

20、文字的开始点 Locked : 能否编辑 ScrollBars : 是否要卷滚条 SelStart : 选取部分的起点 SelLength : 选取部分的长度 SelText : 选中部分的文本 Passwordchar : 输密码方式下的替代字符 方法: SetFocus : 设置输入焦点 事件: Change :内容改变时发生,哪怕内容改变是被程序改变的,也会引发,5.9.10 列表框控件 ListBox 属性: Columns : 列数 List : 数组,存放列表框里面的内容 MultiSelect : 是否允许多选( 不能多选,简单多 选方式,扩展多选方式) Sorted : 是否排

21、序 Style : 表项边上是否有检查框 ListIndex : 被选中项的索引(索引从0算起) ListCount : 总项目数 Selected : 某一项是否被选中 SelCount : 被选中的项目总数 ItemData : 每个项目都可以有一个任意的整数Id, 存放在 ItemData 数组里,也可以不管它 NewIndex :最后添加的表项索引,方法: AddItem : 添加一项 RemoveItem : 删除一项 Clear : 清空,添加表项及其ID: List1.AddItem Judy Phelps List1.ItemData(List1.NewIndex) = 423

22、10 获取被选中表项的索引: dim n as long n = List1.ListIndex 输出被选中表项: Msgbox List1.List(list1.listIndex) 判断索引为 2 的表项是否被选中: if List1.Selected(2) then Endif 选中某项: List1.Selected(2) = true,5.9.10 列表框控件 ListBox 事件: Click : 点击一项时发生。用程序选中一项,也会引发 DblClick Scroll : 拉动卷滚条时发生 ItemCheck : 选中一个表项的 checkbox 时产生,不论是用户选中还是用程序

23、指令选中,5.9.11 下拉列表框控件 属性: Style : Drop Down Combo : 下拉,而且有编辑框 Simple Comobo: 有编辑框,但不能下拉 Drop down list : 没有上面的编辑框 ListIndex : 被选中的列表项 Text : 编辑框里的文字 Sorted : 是否排序 SelStart, SelLength, SelText 关于编辑框里文字的属性,方法: AddItem : 添加表项 事件: Click : 在列表中做选择时发生,程序改变被选中项时也会引发 Change : 编辑框内容改变时发生,即使是程序使之改变,也会发生 (前面提到的

24、编辑框控件的 Change 事件,也是一样的),5.9.12 进度条控件 点 工程 | 部件 菜单后,选 Microsoft Common Controls 6.0 添加后,才有 属性: Max : 能表示的最大值 Min : 最小值 Value : 值 Scrolling : 是连续显示还是分段显示,5.9.13 状态栏控件 点 工程 | 部件 菜单后,选 Microsoft Common Controls 6.0 添加后,才有 属性: Align : 对齐方式 Panels : 面板集合 事件: PanelClick : 点击其中面板时发生,5.9.14 驱动器列表控件,属性: Drive

25、: 字符串,表示当前盘符 事件: Change : 点击选择一个盘时发生,5.9.15 文件列表控件,属性: Path: 当前路径 事件: Change : 双击一个文件夹时发生 click: 单击一个文件夹时发生,5.9.16 树形控件,5.9.17 分页控件,5.9.18 ListView控件,5.9.19 ImageList控件,5.9.20 RichText 控件,. 鼠标和键盘消息处理 . 调用动态连接库 . 处理其他消息,各种控件及其消息: . 编辑框: 控制消息: EM_ 开头,比如 通知码: . 列表框: 控制消息: 通知 . 卷滚条: 可以通过对编辑框发送一系列以 EM_ 开

26、头的消息来控制编辑框 . 组合框: . 列表框控件补充: 可以通过对列表框发送一系列以 LB_ 开头的消息来控制列表框,5.10 VB和VC混合编程 这里指的混合编程,就是指在VB程序中调用用VC编写的动态链接库 一些需要讲究时间效率的操作,一些用VB难以实现的操作,都可以用VC来编写成 dll,然后在VB 程序中进行调用,5.10.1 什么叫“动态链接库” 动态链接库: .dll 是能够被多个 exe 所共享的代码和数据的。里面可以包含变量,函数,资源. 所谓“动态链接库”,和“静态链接库”( 一般是 .lib 文件) 不同。后者中的代码,会在链接形成可执行程序的时候就被“复制”到 exe

27、文件中去,该 exe 文件运行时不再需要那些lib文件。 而动态链接库中的代码,不会在形成可执行文件的时候被“复制”到exe文件中去,在该可执行文件运行时,才将该 dll 从硬盘里装入。如果该 Dll 已经在内存,那么就不需要装入,而是引用记数加1,当调用DLL的程序结束时,该DLL会从内存中卸载。但是如果还有别的程序在使用该DLL,则该DLL引用记数减1 DLL的引用记数是Windows记录的,用来表示一个DLl当前有几个进程在用。如果引用计数为0,那么该DLl就会被从内存中卸载,在Windows中引入“动态链接库”机制的目的,是节省内存。比如几乎所有的Windows API函数都是存放在动

28、态链接库里的,每个Windows程序都会用到这些函数,然而在内存里只需要保留一份这些函数的代码就可以了。 大部分API函数都在以下三个 Dll 中: 窗口函数: User32.dll 画图函数: gdi32.dll 一些核心函数,比如内存分配,进程调度等: Kernel32.dll,5.10.2 在VC中以C语言编写动态链接库 新建一个 Win32 Dynamic-Link Library 工程,选Empty Dll 在 .c 文件中编写函数 要写一个 DllMain 函数,Dll被装入内存时先执行DllMain函数 需要在VB中调用的函数,前面加 WINAPI 声明 3) 编写一个.def

29、文件, 将VB程序中需要调用的函数“导出” 4) 往工程里添加 .def 和 .c文件,5.10.3 在VB中调用动态链接库中的函数 用Declare 语句声明函数后,即可在VB中调用。要注意参数的类型匹配问题。 Declare sub 用于声明返回值为 void 的函数 Declare function 用于声明有返回值的函数,格式: Declare Sub “函数别名” lib “dll文件名” Alias “dll中函数真正的名字” ( 参数表 ) Declare function “函数别名” lib “dll文件名” Alias “dll中函数真正的名字” ( 参数表 ) as 返回

30、值类型 Alias “dll中函数真正的名字” 也可以没有,这样的话“函数别名”就应该和函数在 Dll 中的真正名字一样,例: public Declare Function SendMessage Lib user32 Alias SendMessageA (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Private Declare Function GetDC Lib user32 (ByVal hwnd As Long) As Long Privat

31、e Declare sub MyFunction lib “Mydll.dll” (ByVal name as string ) 一般来说,declare语句出现在模块文件里,前面就加Public, 出现在窗体文件里,前面就加Private 函数名的大小写是重要的,不能乱写,VB程序第一次执行到调用DLL 中的函数的语句时,该DLl才被装入内存(DllMain函数被执行)。此时该DLL文件必须位于程序的当前路径下,或是在Windows的 系统文件夹下(Win9x: system, Winxp/2000: system32 ),否则会报找不到 dll 文件的错误,程序中止 VB程序结束时,dll

32、 被从内存卸载,还是会执行DllMain函数 哪怕实际上只是更改引用计数,DLLMain也总是会被执行的。,5.10.4 VB 和C+混合编程 用VC写了一个类,但是这些类没法在VB中直接使用,怎么办? 需要通过为这个类编写VB能够调用的接口来解决。 编写一个创建对象的输出函数,返回对象的“句柄” 然后为该类的每个成员函数都编写一个相应的输出函数,作为在VB中调用的接口,该函数接受一个“对象句柄”作为参数 还要编写一个销毁对象的函数,也以对象句柄作为参数,5.10.5 用VC编程调用 DLL 中的函数 1)该DLL有相应的 .lib 文件 1 正确声明要调用的所有函数,(也许该DLL提供者已经

33、提供了所有函数声明的头文件,那么就 include 它) 2 在链接选项里指定链接相应的 .lib 文件,5.10.5 用VC编程调用 DLL 中的函数 2) 该DLL无相应的 .lib 文件 1 使用 LoadLibrary 函数装入需要调用的DLL 2 使用 GetProcAddress 函数获取要调用的函数的地址 3 调用该函数,HINSTANCE LoadLibrary( LPCTSTR lpLibFileName); 装入一个DLL,lpLibFileName就是文件名 如果该DLL 已在内存,则导致引用计数加1 如果不在,则装入内存 返回值是DLL的模块句柄(handle to D

34、LL module) FARPROC GetProcAddress( HMODULE hModule, / handle to DLL module LPCSTR lpProcName / name of function ); 从DLL中获取函数的地址,6. 在VB中处理各种消息 VB中窗体和控件的属性和方法,并没有囊括所有能对窗体或控件进行的操作。有时需要通过对控件发送消息来进行一些额外的操作。 同样,VB中窗体和控件的事件,都是响应某个消息的,但是这些事件没有囊括窗体或控件可能收到的所有消息。比如,窗体可能会收到“鼠标滚轮”消息,而VB中的 Form 却没有能够处理滚轮消息的事件。 该怎

35、么办?答:自己编写一个窗口消息处理函数,再使用 SetWindowLong 函数将窗体消息处理函数(本来是VB编译器生成的),改为自己写的这个函数,然后在自己写的这个函数里处理额外的消息,对于常规的消息,则通过CallWindowProc函数调用原来的窗口消息处理函数处理。,LONG SetWindowLong( HWND hWnd, int nIndex, LONG dwNewLong); 改变窗口的属性 nIndex 代表要改变的属性 dwNewLong 代表要把属性改成什么值 调用该函数,能将句柄为 hWnd的窗口的 由 nIndex 代表的那个属性的值,改为 dwNewLong nIndex 可以为: GWL_STYLE : 窗口的样式 GWL_WNDPROC : 窗口消息处理函数的地址 等等 该函数返回值一般是原属性的值。,

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!