Windows编程教案.doc
《Windows编程教案.doc》由会员分享,可在线阅读,更多相关《Windows编程教案.doc(14页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、如有侵权,请联系网站删除,仅供学习与交流Windows编程教案【精品文档】第 14 页Windows编程教案第一课 最简单的Windows程序(2学时)Windows编程是一个很大的主题,涉及的方面也非常的多。Windows始于90年代,至今Windows编程的发展已经非常成熟了,而单独直接使用API的开发也是越来越少了。因此,市面上很少有泛泛的简单入门级的Windows程序设计了。一个是系统级的Windows编程介绍,如Windows核心编程。一个是方向级的Windows编程介绍如Windows图形编程,Windows网络编程等等。我们这次课的主要参考用书是Windows核心编程,同时也参考
2、了一些其他内容。鉴于教材的价格较贵,同时也需要考虑我们自身的学习内容不一定很多以及学时的原因,就没有定教材。看我的教案吧。(1) Win32 APIAPI : Application Program Interface。应用程序接口。API就是在进行Windows编程时使用的函数库。本课就是Windows编程=API+C语言(或者C+语言)(2) 开发环境我校机器上安装了VC+ 6.0。相信这是大家一直以来学习C,C+使用的开发环境。但VC60离我们实在太远了,它是一款90年代的产品,已经近20年的历史了。我们机器里还有VS2005 或 VS2008,那里面的C环境要比VC60强太多了,强烈建
3、议大家使用更高级的平台。本次授课的开发环境有两个。一个是轻量级的DEV C+,一个是重量级的VS2010.简单程序我们都将用DEV C+来实现。DEV C+是一个非常小的C环境,但性能要优于VC60,调试环境不如VC60。这个环境在我们的共享资源里有,大家可以下载安装。安装过程非常简单,一直下一步即可。这是其主界面。(3) 最简单的Windows程序提到最简单的程序,几乎所有的人都会想起经典的HelloWorld。这不是Windows程序,如果在以前这叫DOS程序,现在叫Windows控制台应用程序。它不算Windows程序,但它很简单的就把Helloword显示到屏幕上了。而Windows程
4、序要想把HelloWorld显示在屏幕上就确实不容易了。3.1 访问Helloworld网站,因为把Helloworld显示在屏幕上并不容易,我们可以一点一点来,先让Helloworld以文字形式出现在其他地方,这里我们通过访问网站。把helloworld展现在网页浏览器的地址栏上。真有这个网站吗?唉,貌似还真有。运行程序,打开浏览器并访问网站。这是Windows程序。Windows程序和我们以前的程序有什么不同呢?l Windows程序不能使用scanf,printf,cin,cout。所以输出helloworld变得没有以前容易了。l windows程序一定要#include l wind
5、ows程序的主函数不是main,是WinMain。注意区分大小写。l 主函数的参数不一样了int main(int argc ,char * argv)int WinMain(HINSTANCE hInstance, HINSTANCE,LPSTR lpStr,int nShow)绝大多数的人,初次接触Windows编程都会被其冗长的名字所折服,啊,没办法,这就是Windows的命名规格,叫匈牙利命令法,是微软的一个匈牙利籍的程序员发明的,它的作用的能够让变量,类型名能够真实的反应其代表的意义,这对英语人士自然很好。对英语不好的接受起来就有点难了。详细解释一下WinMain是Windows编程
6、的主函数。一定注意大小写啊。HINSTANCE,用Windows的说法叫句柄数据类型。但它并不是一个新的数据类型,它是通过#define定义出来的。#define DECLARE_HANDLE(name) struct name#_int unused; typedef struct name#_ *nameDECLARE_HANDLE(HINSTANCE);上面两行是windef.h中对HINSTANCE的定义。说到底HINSTANCE就是一个指针类型。LPSTR 是 typedef char * LPSTR。Windows编程里有大量通过#define和typedef定义出来的数据类型名。
7、本质上它们都不是新的东西,都是以前我们在C语言学过的哪些数据类型另起了一个名字。为什么要这么做呢?一般Windows 程序比较大,好的命名利于维护和避免错误。总之,说到底,旧壶装新酒,貌似多了很多数据类型,不要被它们吓到,它们就是比C语言你们学过的东西多穿了件马甲。第二课 在窗口中显示HelloWorld中(4学时)一、 第一课的HelloWorld出现在网页上。这不是我们的目的,我们要生成正常一点的HelloWorld。Windows程序中要显示HelloWorld看来还不是太容易。(1) 将HelloWorld绘制到桌面补充说明如果要让这个程序顺利执行,需要写的内容是lgdi32运行的效果
8、,helloworld显示在桌面上了看到HelloWorld了吗。说明l WinMain是Window的主函数l HDC 是个什么呢,本质上是个指针,但是我们不需要了解它指向了什么,因此,简而化之HDC是一个32位的无符号整数。HDC叫设备上下文句柄。设备上下文指显示器屏幕或打印机什么的。句柄有点类似文件句柄的意思,有了它才能操作设备。在这里有了它才能向设备上绘制。所有涉及绘图的地方都涉及HDC。GetDC(窗口句柄)。如果使用GetDC(NULL)得到桌面的设备上下文。否则可以得到一个窗口的设备上下文,我们可以在窗口上进行绘制。(2) LPTSTR 是 TCHAR * 的另一个写法(3) T
9、extOut是Windows API的一个函数,功能是将文本写到设备上下文上。 TextOut(HDC,横坐标,纵坐标,字符串,字符串长度)(4) ReleaseDC(窗口句柄,HDC)释放设备上下文 GetDC的得到的HDC一定要用ReleaseDC释放,否则机器容易资源耗尽。二、 在一个独立窗口中显示HelloWorld,这是重点了,涉及一些Windows编程重要的内容分如下几个步骤(1) 定义一个全局函数(2) 定义WinMain函数(3) 在WinMain函数内注册窗口类lpszClassName:自己取个名字,字母lpfnWndProc:函数指针,为我们在第一步定义的函数名。用强制类
10、型转换在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 hWn
11、d,UINT wMsgFilterMin,UINT wMsgFilterMax).如果得到WM_QUIT返回0TranslateMessage(&MSG)DispathMessage(&MSG)BeginPaint(&PAINTSTRUCT)TextOut(HDC,INT,INT,LPSTR,INT)EndPaint(HWND,&PAINTSTRUCT)作业:自己建立应用,在窗口100,100位置显示HelloWorld第三课 坐标位置及大小(4学时)在我们写控制台应用的时候,不能自由的控制输出显示的位置。因此,没有学习过这方面的内容,现在我们创建了窗口,并且在窗口上显示了Hello Worl
12、d。这个过程涉及到很多涉及位置和大小的因素,如窗口的大小,显示的位置,文字显示的位置。说到位置,就涉及定位,说到定位就要说坐标系。在屏幕上显示内容涉及到坐标空间的知识。在Windows应用中坐标空间分如下几部分内容1、 物理坐标空间物理坐标空间,指的是物理设备上对应的坐标系。如显示器坐标原点在左上角。如下是一个1024*768的屏幕物理坐标(0,0)(1024,0)(0,768)2、 设备坐标空间基于设备上下文指定的坐标空间。如窗口内显示的文本,使用的坐标就是基于窗口内上下文的坐标。可以看到设备空间是物理空间体系的一个子空间。设备空间可以依赖于一个窗口。换句话可以把设备空间理解为在物理空间上显
13、示的一个对象,其子空间。下面我们通过一个小例子理解物理空间和设备空间在窗口的标题条,以设备坐标,和物理坐标的形式显示鼠标在窗口内的位置WndProc处理消息循环WM_MOUSEMOVE,鼠标移动时消息标识,是个整数。其参数lParam,的第16位代表设备坐标中的X,高16位代表设备坐标的Y。POINT 是结构体。只有x,y两个成员ClientToScreen,将设备坐标转换为屏幕坐标(物理坐标)sprintf:格式化字符串SetWindowText:设Window标题3、 页面坐标空间(逻辑坐标空间的一种)作用,可以任意指定坐标原点,坐标轴方向,比例尺等信息。可以用来与设备无关的大小如厘米,毫
14、米等。页面坐标叫窗口,其表示有原点(X,Y),宽度,高度组成(WIDTH,HEIGHT)设备坐标叫视口,其表示有原点(x,y),宽度,高度组成(width,height)页面坐标和设备坐标的变换关系,大写为设备坐标,小写为页面坐标PX=X+(px-x)*WIDTH/widthPY=Y+(py-y)*HEIGHT/heightpx=x+(PX-X)*width/WIDTHpy=y+(PY-Y)*heigh/HEIGHTGDI函数使用页面坐标,显示出来时是设备坐标通过对窗口,是否对应的四个参数的设置,可以实现特殊的变换。页面坐标是逻辑坐标的一种。在这个例子中我们一直使用MoveToEx(ps.hd
15、c,0,0,NULL); LineTo(ps.hdc,30,30);划线,MoveToEx是把画笔移动到指定位置(页面坐标),LineTo是从画笔所在位置到目标位置画一条线。在这个例子中,每次划线前通过设置视口,窗口结果使划线的结果不同。这种形式的坐标转换无法实现旋转4、 世界坐标空间(逻辑坐标空间的另一种)功能:比页面坐标空间方便,可以实现旋转结构体XFORMFLOAT eM11,FLOAT eM12,FLOAT eM21,FLOAT eM21,FLOAT eDx,FLOAT eDy,世界坐标到设备坐标的变换。小写到大写。PX=eM11*px+eM21*py+eDx;PY=eM12*px+e
16、M22*py+eDy;默认为1,0,0,1,0,0 和设备坐标相同1001dxdymx00my00缩放-100-100映像旋转cos(a),sin(a),-sin(a),cos(a),0,0顺时针旋转a度cos(a),-sin(a),sin(a),cos(a),0,0逆时针旋转a度我们下面的例子通过Rectangle(ps.hdc,0,0,50,50);绘制50*50的矩形,用循环配合世界坐标变换绘制特殊的图形 循环20次,每次旋转坐标轴的方向,绘制正方形。总结:物理坐标指的是屏幕坐标,不能改变坐标轴设备坐标指的是窗口坐标,不能改变坐标轴页面坐标和世界坐标均是逻辑坐标,可以改变坐标轴,世界坐标
17、功能更强,可以旋转。理解这些概念的绘图是很重要的。相关函数BOOL ClientToScreen( HWND hWnd, LPPOINT lpPoint); 设备坐标转屏幕坐标BOOL ScreenToClient( HWND hWnd, LPPOINT lpPoint);屏幕坐标转设备坐标int MapWindowPoints( HWND hWndFrom, HWND hWndTo, LPPOINT lpPoints, UINT cPoints); 各个窗口设备坐标之间的转换BOOL SetWindowOrgEx( HDC hdc, int X, int Y, LPPOINT lpPoint
18、 );设置窗口的原点SetViewportOrgEx( HDC hdc, int X, int Y, LPPOINT lpPoint);设置视口的原点BOOL SetViewportExtEx( HDC hdc, int nXExtent, int nYExtent, LPSIZE lpSize);设置视口的width,heightBOOL SetWindowExtEx( HDC hdc, int nXExtent, int nYExtent, LPSIZE lpSize );设置窗口的width,heightSetMapMode设置页面坐标的映射模式SetGraphicsMode设置世界坐标
19、的映射模式Rectangle绘制矩形,并填充内部SetWorldTransform设置世界坐标变换LineTo:换线MoveToEx:移动画笔SetWindowText设置窗口标题LPtoDP(hdc,LPPOINT,int)把逻辑坐标点转换为设备坐标点作业:使用movetoex,lineto,LPtoDP及世界坐标变换,绘制正六边形提示:画一条水平线后,将坐标原点移动到线的末尾,并将坐标轴旋转60度*n,重复上步要将坐标移动到线尾需要使用LPtoDP第四课 色彩及绘制(6学时)(1)画点像素:计算机屏幕上的一个点。是计算机屏幕显示的最小单位。点的个数取决于计算机的分辨率。如1024*768,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Windows 编程 教案
限制150内