Windows 程序开发步骤
基于资源 消息驱动

Windows 运行机制-----消息驱动
消息驱动又叫做事件驱动,是windows编程采用的程序设计思想。在这种程序设计结构中 ,程序没有明显的开始 结束 ,程序流程控制由各种随机发生,不确定,没有预先设定顺序的事件的发生来触发,是一个不断产生消息和处理消息的过程。
Windows userinterface(用户接口) 界面 windows
1 窗口:
2 客户区:
3 标题栏:
4 菜单栏:
5 图标
6光标:
7 工具栏
8 状态栏:
9 对话框:
10 控件:
Windows 程序设计相关术语
1. 窗口:
2. 实例:实际上实例就是一个可执行程序在内存中的拷贝。
3. 句柄:
4. 资源:
5. 窗口函数:
6. 图形设备接口:GDI(graphic device interface)是windows系统的重要组成部分
7. 回调函数:写好了的等待系统进行调用的函数。
Win 32 应用程序结构和执行原理
例 win32 应用程序结构分析和执行原理解释
使用visual c++ 建立一个简单的win32 应用程序:选择File菜单的New,在出现的对话框中选择projects栏目(vc6.0)新建工程,并选择其下的win32 application 项,表示使用win32环境创建应用程序,在location(路径)中填入工程存储路径如“d:\temp\win32”,然后再project name(项目名称)中填入例如”mywin32“,其他按缺省值设置,单击OK按钮。
添加mywin.cpp文件到工程,文件内容如下:
1 //****************************************************************************
2
3 //工程:mywin
4
5 //文件:mywin.cpp
6
7 //内容:一个简单的win32程序
8
9 //****************************************************************************
10
11 1. #include <windows.h>
12
13 2. #include<windowsx.h>
14
15 3. //函数声明
16
17 4. #include <stdio.h>
18
19 5. LRESULT CALLBACK MyProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lParam);//窗口函数声明
20
21 6. //功能:win32 应用程序入口函数。创建主窗口,处理消息循环
22
23 7. //入口函数(主函数)
24
25 8. //_stdcall 标准调用 压栈从右到左 函数自己释放
26
27 9. //_cdelc压栈从左到右 用户自己释放
28
29 10. int WINAPI WinMain(HINSTANCE hInstance, //当前实例句柄
30
31 11. HINSTANCE hPrevInstance,//前一个实例句柄
32
33 12. LPSTR lpCmdLine,//命令行字符
34
35 13. int nShowCmd//窗口显示方式 )
36
37 14. {
38
39 15. //定义窗口类
40
41 16. WNDCLASS wndclass;
42
43 17. wndclass.hInstance = hInstance;//当前应用程序实例句柄
44
45 18. wndclass.hbrBackground = (HBRUSH)GetStockObject(DKGRAY_BRUSH);//窗口背景色为灰色
46
47 19. wndclass.hCursor = LoadCursor(NULL,IDC_ARROW);//窗口采用箭头光标
48
49 20. wndclass.hIcon = LoadIcon(NULL, IDI_INFORMATION);//窗口的最小化图标为默认图标
50
51 21. //myclass.hIcon=LoadIcon(hinstance,MAKEINTRESOURCE(IDI_ICON1));
52
53 22. wndclass.lpszClassName = "My first windows";//窗口类名
54
55 23. wndclass.lpszMenuName = NULL;//窗口中无菜单
56
57 24. wndclass.lpfnWndProc = MyProc;//该窗口的处理函数为MyProc
58
59 25. wndclass.cbClsExtra = 0;//窗口类无扩展
60
61 26. wndclass.cbWndExtra = 0;//该窗口实例无扩展
62
63 27. wndclass.style = CS_HREDRAW | CS_VREDRAW;//该窗口的类型
64
65 28. //注册窗口类
66
67 29. if(!RegisterClass(&wndclass))
68
69 30. {
70
71 31. MessageBox(NULL, "Window Registration Failed!", "Error!",
72
73 32. MB_ICONEXCLAMATION | MB_OK);
74
75 33. return 0;
76
77 34. }
78
79 35. //创建窗口
80
81 36. HWND hwnd = CreateWindow(
82
83 37. "My first windows"//窗口类名
84
85 38. ,"我的第一个窗口程序"//窗口实例的标题名
86
87 39. ,WS_OVERLAPPEDWINDOW//窗口的风格
88
89 40. ,CW_USEDEFAULT
90
91 41. ,CW_USEDEFAULT//窗口左上角坐标为默认值
92
93 42. ,CW_USEDEFAULT
94
95 43. ,CW_USEDEFAULT//窗口的高度和宽度为默认值
96
97 44. ,NULL//此窗口没有父窗口
98
99 45. ,NULL//此窗口没有主菜单
100
101 46. ,hInstance//创建此窗口应用程序的当前句柄
102
103 47. ,NULL//不使用该值
104
105 48. );
106
107
108
109 49. ShowWindow(hwnd,SW_NORMAL);//显示窗口
110
111 50. UpdateWindow(hwnd);//绘制用户区,更新窗口
112
113 51. //消息循环
114
115 52. MSG msg;
116
117 53. //从应用程序的消息队列中检取消息,送到消息处理过程
118
119 54. while(GetMessage(&msg,NULL,0,0))
120
121 55. {
122
123 56. TranslateMessage(&msg);
124
125 57. DispatchMessage(&msg);
126
127 58. }
128
129 59. return 1;//程序终止时将信息返回系统
130
131 60. }
132
133 61. //窗口函数
134
135 62. //功能:处理窗口函数
136
137 63. LRESULT CALLBACK MyProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lParam)
138
139 64. {
140
141 65. switch(umsg)
142
143 {
144
145 case WM_CLOSE:
146
147 if(IDYES == MessageBox(hwnd,"退出程序?","My first windows",MB_YESNO))
148
149 DestroyWindow(hwnd);//发送WM_DESTROY消息
150
151 break;
152
153 case WM_DESTROY:
154
155 PostQuitMessage(0);//发送WM_QUIT消息
156
157 break;
158
159
160
161 default://默认时调用系统默认消息处理函数
162
163 return DefWindowProc(hwnd,umsg,wParam,lParam);
164
165 }
166
167 return 0;
168
169 }
其他较复杂的应用程序都是在这些简单的应用程序的基础上建立

完整窗口设计的四个步骤:1设计窗口类2 注册窗口类3创建窗口4显示窗口
消息机制:消息的组成 谁收到消息 未处理的消息到那里去了 窗口句柄
回调函数 :别呼叫我,我会呼叫你
命名前缀:
|
CS |
窗口类别样式 |
|
CW |
建立窗口 |
|
DT |
绘制文字 |
|
IDI |
图示ID |
|
IDC |
游标ID |
|
MB |
消息框 |
|
SND |
声音 |
|
WM |
窗口函数 |
|
WS |
窗口样式 |
|
C |
Char或wchar或TCHAR |
|
By |
Byte(无正负号字符) |
|
N |
Int |
|
X,y |
Int分别作x坐标和y坐标 |
|
Cx,cy |
Int分别作x长度和y长度,c代表计数器 |
|
b或f |
Bool(int);f代表(旗帜) |
|
W |
Word(无正负号短整数) |
|
L |
Long(长整数) |
|
Dw |
Dword(无正负号长整数) |
|
Fn |
Function(函数) |
|
S |
String 字符串 |
|
Sz |
以字节0结尾的字符串 |
|
H |
句柄 |
|
P |
指标 |
|
HANDLE |
定义一个32位无符号的整数,用作句柄 |
|
HINSTANCE |
定义一个32位的无符号整数,用作实例句柄 |
|
HWND |
定义一个32位的无符号整数,用作窗口句柄 |
|
HDC |
一个设备描述背景的句柄 |
|
LONG |
说明一个32位带符号整数 |
|
LPSTR |
定义一个线性的32位字符串指针 |
|
UINT |
定义一个新的Win32数据类型,它会把一个参数强制转换成Windows3.x应用中的16位值或Win32应用中的32位 |
|
WCHAR |
说明一个16位的UNICODE字符,用来表示世界上所有已知的书写语言的符号 |
WNDCLASS Structure具体如下
typedef struct {
UINT style;
WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HINSTANCE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCTSTR lpszMenuName;
LPCTSTR lpszClassName;
} WNDCLASS, *PWNDCLASS;
Windows 应用程序编程接口 api
Windows操作系统对外通过两种接口提供服务,普通用户操作接口服务和程序员接口服务(api)。
三个动态链接库:windows内核库(kernel32.dll),windows用户界面库(User32.dll),windows图形设备界面库(gdi32.dll)
这些动态链接库共同构成了win32API函数。
浙公网安备 33010602011771号