vc++6.0-Windows编程基础

实验目的: 创建一个Win32应用程序Ex_SDK,在程序中构造一个编辑框控件和一个按钮。编辑框用于输入一元二次方程的系数,各系数之间用逗号分隔,当单击“计算”按钮,获取方程系数,然后将求得的根通过TextOut显示在窗口客户区中。 实验仪器: 电脑一台(CPU:Inter(R) Xeon(R) E3-1230 v3 @ 3.3GHz 内存:8.0GB   操作系统:Win8.1虚拟机xp 使用软件:Vc++ 6.0)

1****.启动Visual C++ 6.0

打开计算机,启动Visual C++ 6.0系统。

2****.创建工程并添加代码

① 选择“文件”→“新建”菜单命令,打开应用程序向导,显示出“新建”对话框。单击“工程”标签,从列表框中选中Win32 Application(Win32 应用程序)项。在工程名称框中输入Win32应用程序项目名称Ex_SDK。单击浏览按钮…将工程定位到文件夹 “…\Visual C++ 6.0程序\实验\实验1”。

② 单击“确定”按钮继续。在向导第一步对话框中,选中An empty project(一个空的工程)项。单击“完成”按钮,系统将显示AppWizard(应用程序向导)的创建信息,单击“确定”按钮,系统将自动创建此应用程序。

③ 再次选择“文件”→“新建”菜单命令,显示出“新建”对话框。单击“文件”标签,在左边的列表框中选择C++ Source File项,在右边的“文件”下的编辑框中输入Ex_SDK.cpp,单击“确定”按钮。

④ 在打开的文档窗口中输入下面的代码:

1
2
3
4
5
#include <windows.h>

#include <math.h>

#include <stdio.h>

// 求一元二次方程的根,函数返回根的个数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
int GetRoot(float a, float b, float c, double *root)

{

         double delta, deltasqrt;

         delta = b\*b - 4.0 \* a * c;

         if (delta<0.0) return 0// 无根

         deltasqrt = sqrt(delta);

         if (a!=0.0) {

                   root\[0\] = (-b + deltasqrt)/(2.0 * a);

                   root\[1\] = (-b - deltasqrt)/(2.0 * a);

         } else

                   if (b!=0.0)          root\[0\] = root\[1\] = -c/b;

                   else   return 0;

         if (root\[0\] == root\[1\]) return 1;

         else return 2;

}

char str\[80\];

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);                  // 窗口过程

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,

                    LPSTR lpCmdLine, int nCmdShow)

{

     HWND       hwnd ;        // 窗口句柄

     MSG           msg ;          // 消息

     WNDCLASS     wndclass ;  // 窗口类

     wndclass.style                              = CS\_HREDRAW | CS\_VREDRAW ;   

     wndclass.lpfnWndProc      = WndProc ;                                            

     wndclass.cbClsExtra         = 0 ;

     wndclass.cbWndExtra      = 0 ;

     wndclass.hInstance          = hInstance ;

     wndclass.hIcon            = LoadIcon (NULL, IDI_APPLICATION) ;

     wndclass.hCursor          = LoadCursor (NULL, IDC_ARROW) ;

     wndclass.hbrBackground    = (HBRUSH) GetStockObject (WHITE_BRUSH) ;

     wndclass.lpszMenuName  = NULL ;

     wndclass.lpszClassName     = "SDKWin";                                  // 窗口类名

     if (!RegisterClass (&wndclass))                                                    // 注册窗口

     {

          MessageBox (NULL, "窗口注册失败!", "HelloWin", 0) ;     return 0 ;

     }

     // 创建窗口

     hwnd = CreateWindow ("SDKWin",                          // 窗口类名

                          "实验1——Windows编程基础",      // 窗口标题

                          WS_OVERLAPPEDWINDOW,             // 窗口样式

                          CW_USEDEFAULT,              // 窗口最初的 x 位置

                          CW_USEDEFAULT,                      // 窗口最初的 y 位置

                          CW_USEDEFAULT,                      // 窗口最初的 x 大小

                          CW_USEDEFAULT,                    // 窗口最初的 y 大小

NULL,                               // 父窗口句柄

                          NULL,                         // 窗口菜单句柄

                          hInstance,                          // 应用程序实例句柄

                          NULL) ;                         // 创建窗口的参数

     ShowWindow (hwnd, nCmdShow) ;                                            // 显示窗口                                   

     UpdateWindow (hwnd) ;                                                               // 更新窗口,包括窗口的客户区

     while (GetMessage (&msg, NULL, 0, 0))   {

                          TranslateMessage (&msg) ;            // 转换某些键盘消息

         DispatchMessage (&msg) ;                      // 将消息发送给窗口过程,这里是WndProc

     }

     return msg.wParam ;

}

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

{

         HDC                   hdc;

         PAINTSTRUCT ps;

         static HWND      hwndButton, hwndEdit;

         char                               strEdit\[80\], strA\[3\]\[80\], strHint\[80\];

         float                     a\[3\];

         double                           root\[2\];

         int                                 i, j, k, m;

         switch (message)

         {

         case WM_CREATE:                                 // 窗口创建产生的消息

                            hwndEdit = CreateWindow("edit", NULL, WS\_CHILD|WS\_VISIBLE|WS_ BORDER,
                                                                          10, 60, 200, 25, hwnd, NULL, NULL, NULL );

                            hwndButton = CreateWindow("button", "计  算",

                                                                 WS\_CHILD|WS\_VISIBLE|BS_PUSHBUTTON,

                                                                 240, 60, 80, 25, hwnd, NULL, NULL, NULL );

                            return 0 ;

         case WM_COMMAND:       // 命令消息,控件产生的通知代码在wParam的高字中

                            if (((HWND)lParam == hwndButton )&&( HIWORD(wParam) == BN_CLICKED )){
                                               // 获取编辑框控件的内容,并将其转换成float数值

                                     GetWindowText( hwndEdit, strEdit, 80);        // 获取编辑框内容

                                     // 分隔字符串

                                     k = 0;         m = 0;

                                     for (j=0; j<80; j++){

                                               if (strEdit\[j\] == ','){

                                                        k++; m = 0;

                                               }

                                                        else {

                                                                 strA\[k\]\[m\] = strEdit\[j\];          m++;

                                                        }

                                               }

                                               for (i=0; i<3; i++)

                                                        a\[i\] = (float)atof(strA\[i\]);       // 将字符串转换成float数值

                                               int n = GetRoot(a\[0\], a\[1\], a\[2\], root);

                                               if (n<1)      strcpy(str, "方程无根!") ;

                                               else sprintf(str,"方程的解为:%f, %f", root\[0\], root\[1\]);

                                               InvalidateRect(hwnd, NULL, TRUE);

                            }

case WM_PAINT:

                            hdc = BeginPaint(hwnd, &ps);

                            strcpy(strHint,  "请输入一元二次方程的3个系数,中间用逗号分隔");

                            TextOut(hdc, 10, 40, strHint, strlen(strHint));

                            TextOut(hdc, 10, 90, str, strlen(str));

                            EndPaint(hwnd, &ps);

                            return 0 ;         

         case WM_DESTROY:                                                                  // 当窗口关闭时产生的消息

                            PostQuitMessage (0) ;

                            return 0 ;

         }

         return DefWindowProc (hwnd, message, wParam, lParam) ;       // 执行默认的消息处理

}

3****.运行并测试

编译并运行程序,在编辑框中填入一元二次方程的系数6、3、-9后,单击“计算”按钮,求解的结果就会显示出来,如图1.1所示。

图1.1  Ex_SDK运行结果

4.写出实验报告

实验结果分析 初步认识了VC++6.0的编译环境,了解编译界面,同时在选择建立代码环境时方式要选对,并且检查错误代码。

  • 版权声明: 本博客所有文章,未经许可,任何单位及个人不得做营利性使用!转载请标明出处!如有侵权请联系作者。
  • Copyrights © 2015-2021 翟天野

请我喝杯咖啡吧~