Windows编程教案

  • 格式:doc
  • 大小:893.50 KB
  • 文档页数:34

精选文档 Windows编程教案

第一课 最简单的Windows程序(2学时)

Windows编程是一个很大的主题,涉及的方面也非常的多。Windows始于90年代,至今Windows编程的发展已经非常成熟了,而单独直接使用API的开发也是越来越少了。因此,市面上很少有泛泛的简单入门级的Windows程序设计了。一个是系统级的Windows编程介绍,如Windows核心编程。一个是方向级的Windows编程介绍如Windows图形编程,Windows网络编程等等。我们这次课的主要参考用书是Windows核心编程,同时也参考了一些其他内容。鉴于教材的价格较贵,同时也需要考虑我们自身的学习内容不一定很多以及学时的原因,就没有定教材。看我的教案吧。

(1) Win32 API

API : Application Program Interface。应用程序接口。

API就是在进行Windows编程时使用的函数库。

本课就是

Windows编程=API+C语言(或者C++语言)

(2) 开发环境

我校机器上安装了VC++ 6.0。相信这是大家一直以来学习C,C++使用的开发环境。但VC60离我们实在太远了,它是一款90年代的产品,已经近20年的历史了。我们机器里还有VS2005

或 VS2008,那里面的C环境要比VC60强太多了,强烈建议大家使用更高级的平台。本次授课的开发环境有两个。一个是轻量级的DEV C++,一个是重量级的VS2010.简单程序我们都将用DEV C++来实现。

DEV C++是一个非常小的C环境,但性能要优于VC60,调试环境不如VC60。这个环境在我们的共享资源里有,大家可以下载安装。安装过程非常简单,一直下一步即可。

精选文档

这是其主界面。

精选文档

(3) 最简单的Windows程序

提到最简单的程序,几乎所有的人都会想起经典的HelloWorld。

这不是Windows程序,如果在以前这叫DOS程序,现在叫Windows控制台应用程序。它不算Windows程序,但它很简单的就把Helloword显示到屏幕上了。而Windows程序要想把HelloWorld显示在屏幕上就确实不容易了。

精选文档

3.1 访问Helloworld网站,因为把Helloworld显示在屏幕上并不容易,我们可以一点一点来,先让Helloworld以文字形式出现在其他地方,这里我们通过访问网站。把helloworld展现在网页浏览器的地址栏上。真有这个网站吗?唉,貌似还真有。

运行程序,打开浏览器并访问网站。

这是Windows程序。

Windows程序和我们以前的程序有什么不同呢?

 Windows程序不能使用scanf,printf,cin,cout。所以输出helloworld变得没有以前容易了。

 windows程序一定要#include

 windows程序的主函数不是main,是WinMain。注意区分大小写。

 主函数的参数不一样了

int main(int argc ,char[] * argv)

int WinMain(HINSTANCE hInstance, HINSTANCE,LPSTR lpStr,int nShow)

绝大多数的人,初次接触Windows编程都会被其冗长的名字所折服,啊,没办法,这就是Windows的命名规格,叫匈牙利命令法,是微软的一个匈牙利籍的程序员发明的,它的作用的能够让变量,类型名能够真实的反应其代表的意义,这对英语人士自然很好。对英语不好的接受起来就有点难了。

详细解释一下

WinMain是Windows编程的主函数。一定注意大小写啊。

HINSTANCE,用Windows的说法叫句柄数据类型。但它并不是一个新的数据类型,它是通过#define定义出来的。

#define DECLARE_HANDLE(name) struct name##__{int unused;}; typedef struct name##__ *name

DECLARE_HANDLE(HINSTANCE);

上面两行是windef.h中对HINSTANCE的定义。说到底HINSTANCE就是一个指针类型。

LPSTR 是 typedef char * LPSTR。

Windows编程里有大量通过#define和typedef定义出来的数据类型名。本质上它们都不是新的东西,都是以前我们在C语言学过的哪些数据类型另起了一个名字。为什么要这么做呢?一般Windows 程序比较大,好的命名利于维护和避免错误。总之,说到底,旧壶装新酒,貌似多了很多数据类型,不要被它们吓到,它们就是比C语言你们学过的东西多穿了件马甲。

精选文档 第二课 在窗口中显示HelloWorld中(4学时)

一、第一课的HelloWorld出现在网页上。这不是我们的目的,我们要生成正常一点的HelloWorld。Windows程序中要显示HelloWorld看来还不是太容易。

(1) 将HelloWorld绘制到桌面

补充说明

如果要让这个程序顺利执行,需要

精选文档

写的内容是lgdi32

运行的效果,helloworld显示在桌面上了

看到HelloWorld了吗。

说明

 WinMain是Window的主函数

 HDC 是个什么呢,本质上是个指针,但是我们不需要了解它指向了什么,因此,简而化之HDC是一个32位的无符号整数。HDC叫设备上下文句柄。设备上下文指显示器屏幕或打印机什么的。句柄有点类似文件句柄的意思,有了它才能操作设备。在这里有了它才能向设备上绘制。所有涉及绘图的地方都涉及HDC。GetDC(窗口句柄)。如果使用GetDC(NULL)得到桌面的设备上下文。否则可以得到一个窗口的设备上下文,我们可以在窗口上进行绘制。

(2) LPTSTR 是 TCHAR * 的另一个写法

(3) TextOut是Windows API的一个函数,功能是将文本写到设备上下文上。

TextOut(HDC,横坐标,纵坐标,字符串,字符串长度)

(4) ReleaseDC(窗口句柄,HDC)释放设备上下文

GetDC的得到的HDC一定要用ReleaseDC释放,否则机器容易资源耗尽。

精选文档

二、在一个独立窗口中显示HelloWorld,这是重点了,涉及一些Windows编程重要的内容

分如下几个步骤

(1) 定义一个全局函数

(2) 定义WinMain函数

(3) 在WinMain函数内注册窗口类

lpszClassName:自己取个名字,字母

lpfnWndProc:函数指针,为我们在第一步定义的函数名。用强制类型转换

精选文档 在Windows中显示一个窗口,一定要先注册窗口类。函数式RegisterClassEx(&wc)

(4) 创建并显示窗口

(5) 建立消息循环

(6) 补充处理WM_PAINT,补充WndProc函数

总结:创建窗口的模式是基本是固定的,本课的代码很大一部分就是这么写。主要在WndProc内存在不同。

涉及的API函数

RegisterClassEx(&WNDCLASSEX)

WinMain(HINSTACNE,HINSTANCE,LPSTR,int nShow)

DefWindowProc(HWND,UINT,WPARAM,LPARAM)

GetMessage(LPMSG lpMsg,HWND hWnd,UINT wMsgFilterMin,UINT wMsgFilterMax).如果得到WM_QUIT返回0

TranslateMessage(&MSG)

DispathMessage(&MSG)

BeginPaint(&PAINTSTRUCT)

TextOut(HDC,INT,INT,LPSTR,INT)

EndPaint(HWND,&PAINTSTRUCT)

作业:

自己建立应用,在窗口100,100位置显示HelloWorld

精选文档 第三课 坐标位置及大小(4学时)

在我们写控制台应用的时候,不能自由的控制输出显示的位置。因此,没有学习过这方面的内容,现在我们创建了窗口,并且在窗口上显示了Hello World。这个过程涉及到很多涉及位置和大小的因素,如窗口的大小,显示的位置,文字显示的位置。说到位置,就涉及定位,说到定位就要说坐标系。在屏幕上显示内容涉及到坐标空间的知识。在Windows应用中坐标空间分如下几部分内容

1、物理坐标空间

物理坐标空间,指的是物理设备上对应的坐标系。如显示器

坐标原点在左上角。如下是一个1024*768的屏幕物理坐标

(0,0) (1024,0)

(0,768)

2、设备坐标空间

基于设备上下文指定的坐标空间。如窗口内显示的文本,使用的坐标就是基于窗口内上下文的坐标。

可以看到设备空间是物理空间体系的一个子空间。设备空间可以依赖于一个窗口。换句话可以把设备空间理解为在物理空间上显示的一个对象,其子空间。

下面我们通过一个小例子理解物理空间和设备空间

在窗口的标题条,以设备坐标,和物理坐标的形式显示鼠标在窗口内的位置

精选文档

WndProc处理消息循环

WM_MOUSEMOVE,鼠标移动时消息标识,是个整数。其参数lParam,的第16位代表设备坐标中的X,高16位代表设备坐标的Y。

POINT 是结构体。只有x,y两个成员

ClientToScreen,将设备坐标转换为屏幕坐标(物理坐标)