本节将展示如何为 32 位 Microsoft Windows 编写简单的图形化应用程序。该程序创建并显示一个主窗口,显示消息框,并响应鼠标事件。本节内容为简介性质,如果希望了解更多信息,请参阅 Platform SDK 文档。
下表列出了编写该程序时需要的各种链接库和头文件。
文件名 |
说明 |
WinApp.asm |
程序源代码 |
GraphWin.asm |
头文件,包含程序要使用的结构、常量和函数原型 |
kernel32.lib |
本章前面使用的 MS-Windows API 链接库 |
user32.lib |
其他 MS-Windows API 函数 |
/SUBSYSTEM:WINDOWS 代替了之前章节中使用的 /SUBSYSTEM:CONSOLE。程序从 kernel32.lib 和 user32.lib 这两个标准 MS-Windows 链接库中调用函数。
主窗口
本程序显示一个全屏主窗口。为了让窗口适合本书页面,这里缩小了它的尺寸
必要的结构
结构 POINT 以像素为单位,定义屏幕上一个点的 X 坐标和 Y 坐标。它可以用于定位图形对象、窗口和鼠标点击:
POINT STRUCT
ptX DWORD ?
ptY DWORD ?
POINT ENDS
结构 RECT 定义矩形边界。成员 left 为矩形左边的 X 坐标,成员 top为矩形上边的 Y 坐标。成员 right 和 bottom 保存矩形类似的值:
RECT STRUCT
left DWORD ?
top DWORD ?
right DWORD ?
bottom DWORD ?
RECT ENDS
结构 MSGStruct 定义 MS-Windows 需要的数据:
MSGStruct STRUCT
msgWnd DWORD ?
msgMessage DWORD ?
msgWparam DWORD ?
msgLparam DWORD ?
msgTime DWORD ?
msgPt POINT <>
MSGStruct ENDS
结构 WNDCLASS 定义窗口类。程序中的每个窗口都必须属于一个类,并且每个程序都必须为其主窗口定义一个窗口类。在主窗口可以显示之前,这个类必须要注册到操作系统:
WNDCLASS STRUC
style DWORD ? ;窗口样式选项
lpfnWndProc DWORD ? ; winProc 函数指针
cbClsExtra DWORD ? ;共享内存
cbWndExtra DWORD ? ;附加字节数
hlnstance DWORD ? ;当前程序句柄
hlcon DWORD ? ;图标句柄
hCursor DWORD ? ;光标句柄
hbrBackground DWORD ? ;背景刷句柄
IpszMenuName DWORD ? ;菜单名指针
IpszClassName DWORD ? ; WinCZLass 名指针
WNDCLASS ENDS
下面对上述参数进行简单小结:
- style 是不同样式选项的集合,比如 WS_CAPTION 和 WS_BORDER,用于控制窗口外观和行为。
- lpfnWndProc 是指向函数的指针,该函数接收并处理由用户触发的事件消息。
- cbClsExtra 指向一个类中所有窗口使用的共享内存。可以为空。
- cbWndExtra 指定分配给后面窗口实例的附加字节数。
- hInstance 为当前程序实例的句柄。
- hIcon 和 hCursor 分别为当前程序中图标资源和光标资源的句柄。
- hbrBackground 为背景(颜色)刷的句柄。
- lpszMenuName 指向一个菜单名。
- lpszClassName 指向一个空字节结束的字符串,该字符串中包含了窗口的类名称。