随着可视编程环境的到来,程序员能采用拖放(drag and drop)方式来开发完美的全功能应用程序,它们界面友好,操作简便,在一定程度下替代了API的神秘功能。其实,在当今应用程序的类库和定制控制都是构筑在Windows API 的基础之上的,这些类库和函数加速了Windows应用程序的开发,但也导致了非常多的程序员在类库前面“故步自封”,对下层API函数的强大功能一无所知。
但当前,如果程序员要编写符合当代标准的程序,则没有比理解API的性能更重要,虽然类库和定制控制使开发应用程序容易得多,但它们只触及到Microsoft的Windows系统功能的皮毛。程序员只有真正理解Windows API 的内涵,才能成功地扩展那些类库和可视开发环境 ,才能开发出功能更强、性能更优越的程序。
(二)API的数据类型和数据结构
函数命名规则:
函数名由一个动词后接一个名词组成,其中动词和名词的第一个字母必须大写。
数据类型:
数据类型
含 义
WORD
16位无符号整数
LONG
32位有符号整数
DWORD
无符号长整数
HANDLE
用作句柄的32位整数
HWND
用作窗口句柄的32位整数
UINT
32位无符号整数
BOOL
用作真值和假值
BYTE
8位无符号字符
PSTR
指向字符串的32位指针
PCSTR
指向字符串的常量指针
〈注〉:所谓句柄,实际上就是一个标识资源的值。Windows95 包含有许多句柄类型,如应用 程序实例、窗口、菜单、控件、输出设备、画笔 等等,所有句柄类型都以 H 打头,通过句柄,应用程序才能访问信息,才能借助系统完成实际工作,这是Windows95在多任务环境下保护信息的一种手段。
Const MF_BYPOSITION = &H400&
Const MF_REMOVE = &H1000&
Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
Private Declare Function GetMenuItemCount Lib "user32" (ByVal hMenu As Long) As Long
Private Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
Private Sub Form_Load()
Dim H As Long, I As Long
H = GetSystemMenu(Me.hwnd, False)
If H Then
I = GetMenuItemCount(H)
If I Then
RemoveMenu H, I - 1, MF_BYPOSITION Or MF_REMOVE
RemoveMenu H, I - 2, MF_BYPOSITION Or MF_REMOVE
DrawMenuBar Me.hwnd
End If
End If
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
If UnloadMode = 0 Then Cancel = True
End Sub