一、实验目的和要求

(一)熟悉 Visual C++集成开发环境。工欲善其事,必先利其器。同样,想要熟练地编程,首要条件是要熟悉编程环境。因此本实验需要快速掌握创建Win32Application 的步骤。

(二)创建一个 Win32 应用程序,创建一个标题名为“上机指导”、窗口内容显示“上机指导--实验二”的Wim32应用程序。通过该实验,可以理解Windows应用程序的组成及其创建过程。

(三)创建一个Win32应用程序,其窗口内容显示一个由组成的矩形。通过该实验,可以理解Windows应用程序的组成及其创建过程。

二、实验环境

Windows 7; VC++6.0

三、实验内容与过程

实验内容(一)

创建一个名为 myfirst 的工程,部分界面如下图所示。

Windows程序设计一 Windows编程概述_窗口函数

实验内容(二)

创建一个名为 Win32 的应用程序,程序的运行结果如下图所示。

Windows程序设计一 Windows编程概述_句柄_02

实验内容(三)

创建一个以自己的姓名为标题名的 Win32 的应用程序,程序的运行结果如下图所示。

Windows程序设计一 Windows编程概述_应用程序_03

一、实验结果与分析

实验内容(一)

Windows程序设计一 Windows编程概述_窗口函数_04

实验内容(二)

Windows程序设计一 Windows编程概述_窗口函数_05

Windows程序设计一 Windows编程概述_句柄_06


实验内容(三)

Windows程序设计一 Windows编程概述_窗口函数_07

Windows程序设计一 Windows编程概述_句柄_08

实验内容二代码:

#include<windows.h>

//声明WndProc()函数

LRESULT CALLBACK WndProc(

   HWND hwnd,UINT message,

   WPARAM wParam,

   LPARAM lParam);

//编写WinMain()主函数

int APIENTRY WinMain(HINSTANCE hInstance,

                 HINSTANCE hPrevInstance,

                 LPSTR lpCmdLine,

                 int nCmdShow)

{

   WNDCLASS wndclass;                               //定义窗口类结构变量

   HWND hwnd;                                       //定义窗口句柄

   MSG msg;                                      //定义消息结构变量

   char lpszClassName[]="自己创建的窗口";


   //设计窗口类型

   wndclass.style = CS_HREDRAW|CS_VREDRAW;              //改变窗口大小则重画

   wndclass.lpfnWndProc = WndProc;                      //窗口函数为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 =lpszClassName;

   //注册窗口类型

   if(! RegisterClass(&wndclass))

   return FALSE;


   //创建窗口

   hwnd = CreateWindow(lpszClassName,

          "上机指导",

          WS_OVERLAPPEDWINDOW,

          CW_USEDEFAULT, CW_USEDEFAULT,  

          CW_USEDEFAULT, CW_USEDEFAULT,

          NULL,

          NULL,

          hInstance,

          NULL);

   //显示并刷新窗口

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

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

   //消息循环

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

   {

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

      DispatchMessage (&msg);                          //派送消息给窗口函数

   }

   return msg.wParam;                                      //返回退出值

}

//响应窗口消息

LRESULT CALLBACK WndProc(HWND hwnd,UINT message,

             WPARAM wParam,

             LPARAM lParam)

{

//根据消息值转相应的消息处理

   switch (message)

   {

      //重画窗口客户区消息处理

      case WM_PAINT:          

          HDC hdc;                          //定义设备描述表句柄

          PAINTSTRUCT ps;                    //定义绘图信息结构变量

          hdc = BeginPaint (hwnd,&ps);              //获取要重画的窗口的设备描述表句柄

          TextOut(hdc,150,150,"上机指导——实验二", 18);   //输出文本

          EndPaint (hwnd,&ps);

          break;

      //响应鼠标单击消息

      case WM_LBUTTONDOWN:

          {

             MessageBeep(0);            

          }

          break;

      //撤消窗口消息处理

      case WM_DESTROY:

          PostQuitMessage (0);

          break;

      //其它转缺省窗口函数

      default:

          return DefWindowProc (hwnd, message,   wParam, lParam);

   }

   return 0;

}

实验内容三代码:

#include<windows.h>

//声明WndProc()函数

LRESULT CALLBACK WndProc(

   HWND hwnd,UINT message,

   WPARAM wParam,

   LPARAM lParam);

//编写WinMain()主函数

int APIENTRY WinMain(HINSTANCE hInstance,

                 HINSTANCE hPrevInstance,

                 LPSTR lpCmdLine,

                 int nCmdShow)

{

   WNDCLASS wndclass;                               //定义窗口类结构变量

   HWND hwnd;                                       //定义窗口句柄

   MSG msg;                                      //定义消息结构变量

   char lpszClassName[]="自己创建的窗口";


   //设计窗口类型

   wndclass.style = CS_HREDRAW|CS_VREDRAW;              //改变窗口大小则重画

   wndclass.lpfnWndProc = WndProc;                      //窗口函数为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 =lpszClassName;

   //注册窗口类型

   if(! RegisterClass(&wndclass))

   return FALSE;


   //创建窗口

   hwnd = CreateWindow(lpszClassName,

          "董阳萱",

          WS_OVERLAPPEDWINDOW,

          CW_USEDEFAULT, CW_USEDEFAULT,  

          CW_USEDEFAULT, CW_USEDEFAULT,

          NULL,

          NULL,

          hInstance,

          NULL);

   //显示并刷新窗口

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

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

   //消息循环

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

   {

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

      DispatchMessage (&msg);                          //派送消息给窗口函数

   }

   return msg.wParam;                                      //返回退出值

}

//响应窗口消息

LRESULT CALLBACK WndProc(HWND hwnd,UINT message,

             WPARAM wParam,

             LPARAM lParam)

{

//根据消息值转相应的消息处理

   switch (message)

   {

      //重画窗口客户区消息处理

      case WM_PAINT:          

          HDC hdc;                          //定义设备描述表句柄

          PAINTSTRUCT ps;                    //定义绘图信息结构变量

          hdc = BeginPaint (hwnd,&ps);              //获取要重画的窗口的设备描述表句柄

          TextOut(hdc,150,150,"***************", 15);  

          TextOut(hdc,150,160,"*                    *", 22);  

          TextOut(hdc,150,170,"*                    *", 22);  

          TextOut(hdc,150,180,"*                    *", 22);  

          TextOut(hdc,150,190,"*                    *", 22);  

          TextOut(hdc,150,200,"*                    *", 22);  

          TextOut(hdc,150,210,"*                    *", 22);  

          TextOut(hdc,150,220,"*                    *", 22);  

          TextOut(hdc,150,230,"*                    *", 22);  

          TextOut(hdc,150,240,"*                    *", 22);  

          TextOut(hdc,150,250,"***************", 15);   //输出文本

          EndPaint (hwnd,&ps);

          break;

      //响应鼠标单击消息

      case WM_LBUTTONDOWN:

          {

             MessageBeep(0);            

          }

          break;

      //撤消窗口消息处理

      case WM_DESTROY:

          PostQuitMessage (0);

          break;

      //其它转缺省窗口函数

      default:

          return DefWindowProc (hwnd, message,   wParam, lParam);

   }

   return 0;

}