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 10int WINAPI WinMain(HINSTANCE hInstance, //当前实例句柄
30
31 11. HINSTANCE hPrevInstance,//前一个实例句柄
32
33 12. LPSTR lpCmdLine,//命令行字符
34
35 13int 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 29if(!RegisterClass(&wndclass))
68
69 30. {
70
71 31. MessageBox(NULL, "Window Registration Failed!", "Error!",
72
73 32. MB_ICONEXCLAMATION | MB_OK);
74
75 33return 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 54while(GetMessage(&msg,NULL,0,0))
120
121 55. {
122
123 56. TranslateMessage(&msg);
124
125 57. DispatchMessage(&msg);
126
127 58. }
128
129 59return 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 65switch(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函数。