Windows程序设计课件(PPT 54页)_第1页
Windows程序设计课件(PPT 54页)_第2页
Windows程序设计课件(PPT 54页)_第3页
Windows程序设计课件(PPT 54页)_第4页
Windows程序设计课件(PPT 54页)_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Windows程序设计信息工程学院第1页,共54页。图形用户界面(GUI)Windows是一个具有可视化图形用户界面的多任务操作系统。它为用户提供了风格统一的由窗口(window)、菜单(menu)、工具栏(toolbar)、控件(control)等界面元素所构成的多任务环境。第2页,共54页。Windows编程模式Windows 操作系统完全不同于单任务的DOS操作系统,具有图形用户界面、多任务、多窗口等特点。Windows下的图形用户界面程序开发: 直接使用Windows API函数 微软基础类库MFC(面向对象程序设计) wxWidget等(面向对象程序设计) 第3页,共54页。基于Wi

2、ndows API的程序设计Windows API (Application Programming Interface)是Windows系统和Windows 应用程序间的标准接口,为应用程序提供Windows支持的函数定义、参数定义和消息格式等。Windows API:包含Windows应用程序的函数调用、数据类型和结构。第4页,共54页。基于Windows API的程序设计第一个Windows程序:“Hello world!”窗口和消息图形基础控件类(子窗口类)应用实例:简易计算器的实现第5页,共54页。1. Hello world!Code:Blocks下新建一个空的.cpp(或.c)文

3、件,文件中录入下列代码:第6页,共54页。1. Hello world!程序编译运行结果第7页,共54页。1. Hello world!解释1:头文件类型定义内核函数、用户接口函数和图形设备接口函数第8页,共54页。1. Hello world!解释2:程序入口点WinMain(4个参数)第9页,共54页。1. Hello world!解释2:程序入口点WinMain(4个参数) hInst是唯一标识本程序的实例句柄,系统和其它应用程序通过该句柄与本程序通讯。 hPrevInst是本程序的前一个实例句柄,32位Windows版本中该参数始终为NULL。 lpCmdLine是一个字符串指针,用于

4、运行程序的命令行。nShowCmd指出程序最初显示的方式。第10页,共54页。1. Hello world!解释2:程序入口点WinMain返回值#define WINAPI _stdcall指定了一种调用方式:如何生成机器代码以在堆栈中放置函数调用的参数第11页,共54页。1. Hello world!解释3:MessageBox函数第12页,共54页。1. Hello world!解释3:MessageBox函数(4个参数)第一个参数:窗口句柄第二个参数:消息框中显示的字符串第三个参数:标题栏字符串最后一个参数:消息框按钮类型#define MB_OK0 x0000#define MB_O

5、KCANCEL0 x0001#define MB_ABORTRETRYIGNORE 0 x0002#define MB_YESNOCANCEL0 x0003第13页,共54页。2. 窗口和消息什么是窗口?屏幕上的一个可以接收用户输入,并以文本或图形的格式显示输出内容的区域。什么是消息?消息描述了事件的类别,包括在图形用户界面内下的输入选择、鼠标按键、键盘按键、窗口被创建、关闭和改变等。第14页,共54页。2.1 一个典型的窗口程序Code:Blocks下Windows程序的创建第15页,共54页。2.1 一个典型的窗口程序Code:Blocks下Windows程序的创建第16页,共54页。2.

6、1 一个典型的窗口程序Code:Blocks下Windows程序的创建第17页,共54页。2.1 一个典型的窗口程序代码生成及运行结果第18页,共54页。2.1 总体考虑很难记住Windows程序的所有语法,故向导自动生成一个框架。两个主要函数WinMain和WndProc。Windows函数:如LoadIcon、ShowWindow等。新的数据类型和宏定义:如HWND、MSG、WNDCLASSEX等。第19页,共54页。2.1 总体考虑LRESULT CALLBACK WindowProcedure ();int WINAPI WinMain (HINSTANCE hThisInstance

7、, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nCmdShow) HWND hwnd; MSG messages; WNDCLASSEX wincl; wincl.hInstance = hThisInstance; . if (!RegisterClassEx (&wincl) return 0; hwnd = CreateWindowEx(.); ShowWindow (hwnd, nCmdShow); while (GetMessage (&messages, NULL, 0, 0) TranslateMessage(&messag

8、es); DispatchMessage(&messages); return messages.wParam;第20页,共54页。2.1 总体考虑LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) switch (message) /* handle the messages */ case WM_DESTROY: PostQuitMessage (0); break; default: /* for messages that we dont deal with *

9、/ return DefWindowProc (hwnd, message, wParam, lParam); return 0;第21页,共54页。2.2 事件驱动与消息循环启动输入姓名输入第一次测试成绩输入第二次测试成绩输入第三次测试成绩计算平均成绩结束启动消息处理结束输入姓名输入第一次成绩输入第二次成绩输入第三次成绩计算平均成绩过程驱动事件驱动第22页,共54页。2.2 事件驱动与消息循环启动消息处理结束输入姓名输入第一次成绩输入第二次成绩输入第三次成绩计算平均成绩第23页,共54页。2.2 事件驱动与消息循环第24页,共54页。2.2 事件驱动与消息循环第25页,共54页。2.2 事件

10、驱动与消息循环 while (GetMessage (&messages, NULL, 0, 0) TranslateMessage(&messages); DispatchMessage(&messages); 第26页,共54页。2.2 事件驱动与消息循环LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) switch (message) case WM_DESTROY: PostQuitMessage (0); break; case WM_PAINT: brea

11、k;第27页,共54页。2.2 事件驱动与消息循环LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) switch (message) default: return DefWindowProc (hwnd, message,wParam, lParam); return 0;第28页,共54页。2.3 Windows函数和新数据类型函数LoadIcon、LoadCursorRegisterClassEx:注册窗口CreateWindowEx:创建窗口ShowWindo

12、w:显示窗口GetMessage、TranslateMessage等第29页,共54页。2.3 Windows函数和新数据类型新数据类型typedef void* PVOID;typedef PVOID HANDLE;typedef HANDLE HDC;typedef HANDLE HINSTANCE;typedef HANDLE HWND;typedef long LONG_PTR;typedef unsigned int UINT_PTR;typedef UINT_PTR WPARAM;typedef LONG_PTR LPARAM;typedef CHAR *PSTR;第30页,共54

13、页。2.3 Windows函数和新数据类型新数据类型typedef struct tagWNDCLASSEX UINT cbSize; UINT style; WNDPROC lpfnWndProc; int cbClsExtra; int cbWndExtra; HINSTANCE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH hbrBackground; LPCTSTR lpszMenuName; LPCTSTR lpszClassName; HICON hIconSm; WNDCLASSEX, *PWNDCLASSEX;第31页,共54页

14、。2.3 Windows函数和新数据类型新数据类型typedef struct tagMSG HWND hWnd;/指定消息发向的窗口句柄UINTmessage;/标识消息的消息值WPARAMwParam;/消息参数LPARAMlParam;/消息参数DWORDtime;/消息进入队列的时间POINTpt; /消息进入队列时鼠标指针的屏幕坐标 MSG,*PMSG,NEAR *NPMSG, FAR * LPMSG;第32页,共54页。2.3 Windows函数和新数据类型新数据类型message是标识消息的消息值或消息名#define WM_CREATE 0X0001 /创建窗口产生的消息#de

15、fine WM_DESTROY 0X0002 /撤销窗口产生的消息#define WM_PAINT 0X000F /重画窗口产生的消息#define WM_CLOSE 0X0010 /关闭窗口产生的消息#define WM_CHAR 0X0102 /按下非系统键产生的字符消息#define WM_USER 0X0400 /用户自定义消息#define WM_LBUTTONDOWN 第33页,共54页。2.3 Windows函数和新数据类型新数据类型wParam和lParam都是32位消息参数,对message进行补充。例如:WM_LBUTTONDOWN:产生单击鼠标左键的消息lParam高字节

16、包含当前光标的Y坐标值低字节包含当前光标的X坐标值wParam包含一整数值以标识鼠标键的按下状态MK_LBUTTON按下鼠标左键MK_MBUTTON按下鼠标中键MK_RBUTTON按下鼠标右键第34页,共54页。3. 图形基础(GDI)图形设备接口(GDI)是Windows的子系统,负责在屏幕或打印机上输出图形。GDI函数调用获取和释放设备描述表函数,如GetDC等。绘图函数,如TextOut等。设置和获取设备描述表参数的函数,如SetTextColor等。其它第35页,共54页。3. 图形基础(GDI)设备描述表函数(DC)包含GDI函数如何在设备上工作的属性信息。如:显示文本信息时,字体、

17、文本颜色以及字符间距等属于设备描述表中的信息。第36页,共54页。3.1 字体显示字体显示:在窗口过程中添加代码case WM_PAINT: HDC hdc; PAINTSTRUCT ps; hdc = BeginPaint(hwnd, &ps); SetTextColor(hdc, RGB(255,0,0); TextOut(hdc, 100, 100, Hello world!, 12); EndPaint(hwnd, &ps);break;第37页,共54页。3.2 图形绘制图形绘制:椭圆 case WM_PAINT: HDC hdc; PAINTSTRUCT ps; HBRUSH hB

18、rush; hdc = BeginPaint(hwnd, &ps); hBrush = CreateSolidBrush(RGB(0,128,255); SelectObject(hdc, hBrush); Ellipse (hdc, 250, 100, 450,250); EndPaint(hwnd, &ps); break;第38页,共54页。4. 控件类控件:一种特殊的窗口(子窗口)按钮静态滚动条编辑列表框等第39页,共54页。4.1 按钮类子窗口的创建HWND CreateWindow(类名,/ “button”窗口文本,窗口风格,/BS_PUSHBUTTON | WS_CHILD |

19、 WS_VISIBLEx位置,y位置,宽度,高度,父窗口,子窗口ID,程序实例句柄,额外参数)第40页,共54页。4.1 按钮类消息处理WM_COMMANDwParam(子窗口ID)第41页,共54页。4.2 编辑类子窗口的创建CreateWindow(类名,/“edit”窗口文本,窗口风格,/ES_RIGHT|WS_BORDER| WS_CHILD | WS_VISIBLEx位置,y位置,宽度,高度,父窗口,子窗口ID,程序实例句柄,额外参数)第42页,共54页。4.2 编辑类消息处理WM_COMMANDwParam(子窗口ID)给编辑类发送消息SendMessage(hwnd, WM_SE

20、TTEXT, 0,string);获取编辑类文本信息GetWindowText(hwnd,buff,len);第43页,共54页。5. 应用实例:简易计算器的实现第44页,共54页。表达式求值类#include #include ExpCalc.hstring strExpression;CExpCalc expCalc;expCalc.Compute(strExpression);12.1808123+456-789*0.C/=xy第45页,共54页。命名12.1808123+456-789*0.C/=xyconst int ID_BTN_NUM0 = 10000;const int ID_

21、BTN_NUM1 = 10001;const int ID_BTN_NUM2 = 10002;const int ID_BTN_NUM3 = 10003;const int ID_BTN_NUM4 = 10004;const int ID_BTN_NUM5 = 10005;const int ID_BTN_NUM6 = 10006;const int ID_BTN_NUM7 = 10007;const int ID_BTN_NUM8 = 10008;const int ID_BTN_NUM9 = 10009;const int ID_BTN_OPTR_ADD = 10010;const int

22、 ID_BTN_OPTR_SUB = 10011;const int ID_BTN_OPTR_MUL = 10012;const int ID_BTN_OPTR_DIV = 10013;const int ID_BTN_OPTR_DOT = 10014;const int ID_BTN_OPTR_CLR = 10015;const int ID_BTN_OPTR_EQ = 10016;const int ID_EDIT_RESULT = 10017;第46页,共54页。布局12.1808123+456-789*0.C/=窗口大小:210*280结果显示(编辑框):190*48按钮(=除外):4

23、0*28按钮=尺寸:190*28横向间隔:15纵向间隔:10起始位置:(10,10)xy第47页,共54页。布局12.1808123+456-789*0.C/=WinW=210; WinH=280;EdtW=190; EdtH=48;BtnW=40; BtnH=28;SBtnW=EdtW=190;SpaH=15;SpaW=10;SX=10; SY=10;xy第48页,共54页。布局12.1808123+456-789*0.C/=POINT EditPos= SX, SY;POINT BtnPos17;BtnPosID_BTN_NUM1-10000.x = SX;BtnPosID_BTN_NUM1-10000.y = SY+EdtH+SpaH;char *BtnCaption=0, 1, 2, 3, 4, 5, 6, 7, 8, 9,+, -, *, /, ., c, =;xy第49页,共54页。窗口句柄12.1808123+456-789*0.C/=static HWND hwndEdit;static HWND hwndButton17;xy第50页,共54页。消息处理(1)12.1808123+456-789*0.C/=case WM_CREATE: for(int i=0; i=ID_BTN_NUM0 & wParam=ID_BTN_OPT

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论