跟我一起学编程系列课程: 第一篇汇编语言 32位汇编.

Slides:



Advertisements
Similar presentations
软件开发技术基础 第 3 章 操作系统及程序设计 讲授教师:卫颜俊. 主 要 内 容 主 要 内 容 操作系统及其功能 进程管理应用程序设计 内存管理应用程序设计 设备与文件管理应用程序设计 人机接口管理应用程序设计.
Advertisements

UI(用户界面)集训班 Illustrator 高级班.
Oracle数据库 Oracle 子程序.
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
在PHP和MYSQL中实现完美的中文显示
第4讲 Windows编程基础 此为封面页,需列出课程编码、课程名称和课程开发室名称。
简要回顾 了解课程体系、课程目的和主要内容 掌握Windows编程涉及的一些主要概念 DOS程序和Windows程序的主要区别 窗口和程序
辅导课程六.
第3章 Windows 应用程序基础 2018/12/6 第2讲 Windows 应用程序基础 VC++面向对象与可视化程序设计.
网络游戏开发语言基础 ——Windows程序设计
第4章 MFC编程 4.1 MFC概述 4.2 MFC和Win CObject类 4.4 消息映射的实现
本节内容 模拟线程切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
Windows 7 的系统设置.
本节内容 字符编码 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第二章 登录UNIX操作系统.
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
_01Win32简介与IDE简介 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
本节内容 随机读取 视频提供:昆山爱达人信息技术有限公司.
本节内容 消息的分发 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第1章 c++概述 1.1 C++语言的简史及特点 1.2 简单的C++程序 1.3 C++语言的基本组成
第二章 Java基本语法 讲师:复凡.
_04Combox控件和ListBox控件的使用
_05MessageMap的原理 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
<编程达人入门课程> 本节内容 内存的使用 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
MFC控件 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
Select模型 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
编译OpenSSL 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
本节内容 Win32 API中的宽字符 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
_08文件的基本操作 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
本节内容 类成员的访问控制 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 内存复制指令 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 Private Memory 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
iSIGHT 基本培训 使用 Excel的栅栏问题
<编程达人入门课程> 本节内容 计算机编程语言 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
本节内容 结构体 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 线性地址的管理 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
_13简单的GDI绘图操作 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
本节内容 文件系统 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 模块隐藏 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第二章 Java基本语法 讲师:复凡.
3.1私有内存的分配.
本节内容 消息的接收 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
<编程达人入门课程> 本节内容 学习路线 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
_03宽字符与Unicode编程 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
第二章 Java基本语法 讲师:复凡.
本节内容 结构体.
本节内容 Windows线程切换_时钟中断切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
本节内容 指针类型的使用 视频提供:昆山爱达人信息技术有限公司.
本节内容 通用寄存器 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
_08文件操作 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
WSAAsyncSelect 模型 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang
MFC控件 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
_07多连接之select模型 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
阻塞式模型 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
MFC的六大核心 机制 命令传递 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang
_01自己实现简单的消息处理框架模型 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 导出表 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 如何调试驱动程序? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 进程 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
创建、启动和关闭Activity 本讲大纲: 1、创建Activity 2、配置Activity 3、启动和关闭Activity
编程达人-- 从零开始学UI系列教程 第九节、布尔运算 先行者 YC.
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
<编程达人入门课程> 本节内容 有符号数与无符号数 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
本节内容 SEMAPHORE 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
本节内容 this指针 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
跟我一起学编程系列课程: 第一篇汇编语言 32位汇编.
Presentation transcript:

跟我一起学编程系列课程: 第一篇汇编语言 32位汇编

第十二章MS-Windows程序设计 第二节 ●Win32控制台编程 ●编写Windows图形界面应用程序 ●动态内存分配 ●IA-32内存管理 ●本章小结

编写Windows图形界面应用程序 在本节中,我们来演示如何写出一个简单的Windows下的图形界面应用程序,WinApp.asm程序将创建并显示一个主窗口,显示一些消息框,而且可以响应鼠标动作。下面的内容仅仅试一个简要介绍,因为即使试要描述清楚一个最简单的Windows应用程序中的事件,也需要至少一整章的篇幅。如果读者需要更详尽的信息,请参阅Platform SDK的文档。另一份很好的文献资料是Charles Petzold所著的Programming in Windows:The Definitive Guide to the win32 API一书。 表11.10列出了构建该程序时使用的各种库和包含文件,可以使用本书附带代码Examples\Ch11\WinApp目录下的Visual Studio项目文件构建和运行该程序。 编译时应使用选项/SUBSYSTEM:WINDOWS代替我们在前面章节中使用的/SUBSYSTEM:CONSOLE选项。回到控制台程序时,注意更改回来。 windows系统下,可以设置一个程序对应的console运行于前台还是后台。/SUBSYSTEM:WINDOWS隐藏控制台窗口。 连接器对控制台程序设置的入口函数是 mainCRTStartup,mainCRTStartup 调用 main 函数; 对图形用户界面(GUI)程序设置的入口函数是 WinMainCRTStartup,WinMainCRTStartup 调用 WinMain 函数。 过设置连接器的选项来设置程序是一个Window程序或者是Console程序。

编写Windows图形界面应用程序

编写Windows图形界面应用程序 把入口点main清空

编写Windows图形界面应用程序 程序调用了两个标准Windows库文件:kernel32.lib和user32.lib文件。 主窗口:程序将显示一个填满整个屏幕的主窗口。

一、必须了解的数据结构 POINT结构定义了以像素为单位的屏幕上某个点的X和Y坐标,它可以用来定位屏幕上某个对象的坐标,如图形对象、窗口、鼠标单击时的位置等: POINT STRUCT ptX DWORD ? ptY DWORD ? POINT ENDS RECT结构定义了一个矩形的边界,left字段为矩形左边界的X坐标,top字段矩形顶边的Y坐标。类似地,right和bottom字段地值定义了矩形右下角地坐标: RECT STRUCT left DWORD ? top DWORD ? right DWORD ? bottom DWORD ? RECT ENDS MSGStruct结构定义了Windows消息需要的相关数据: MSGStruct STRUCT msgWnd DWORD ? msgMessage DWORD ? msgWparam DWORD ? msgLparam DWORD ? msgTime DWORD ? msgPt POINT <> MSGStruct ENDS

一、必须了解的数据结构 WNDCLASS结构定义了一个窗口类,程序中的每个窗口必须属于一个窗口类,所以每个程序必须为它的主窗口创建窗口类。在能够显示主窗口之前,窗口类必须首先在系统里面注册: WNDCLASS STRUC style DWORD ? ; 窗口风格 lpfnWndProc DWORD ? ; 窗口过程地址 cbClsExtra DWORD ? ; 共享内存 cbWndExtra DWORD ? ; 额外定义的数据 hInstance DWORD ? ; 当前程序的句柄 hIcon DWORD ? ; 图标句柄 hCursor DWORD ? ; 光标句柄 hbrBackground DWORD ? ; 背景画刷句柄 lpszMenuName DWORD ? ; 菜单名称的指针 lpszClassName DWORD ? ; 类名称的指针 WNDCLASS ENDS

一、必须了解的数据结构 以下是这些字段的简要介绍: •style是一些不同风格选项的组合,如WS_CAPTION和WS_BORDER,这个字段影响窗口的外观和行为。 •lpfnWndProc是指向一个子程序的指针,这个子程序在我们自己的程序中,用来接收由用户触发的事件消息。 •cbClsExtra定义了这个窗口类所属的所有窗口都可以共享的内存,这个参数可以指定为NULL。 •cbWndExtra参数为每个窗口实例分配一些额外的内存。 •hInstance参数用来保存当前运行程序的句柄。 •hIcon和hCursor参数为当前程序使用的图标和光标句柄。 •hbrBackground参数为背景颜色画刷的句柄。 •lpszMenuName指向一个菜单名称字符串。 •lpszClassName指向一个以0结尾的窗口类名称字符串。

二、MessageBox函数 程序显示文本的最简单方法是把文本放到一个消息框中,消息框会弹出并直到用户按下了上面某个按钮为止。Win32 API中的MessageBox函数显示一个简单的消息框,它的函数原型如下所示: MessageBox PROTO, hWnd:DWORD, lpText:PTR BYTE, lpCaption:PTR BYTE, uType:DWORD hWnd是当前窗口的句柄;lpText指向要在消息框中显示的以0结尾的字符串;lpCaption指向要显示在消息框标题栏上的以0结尾的字符串;utyle参数是一个整数,用来描述消息框中的图标(可选)和按钮(必选)的样式。按钮由MB_OK或MB_YESNO等常量定义,图标由MB_ICONQUESTION等常量定义。当想要显示一个消息框的时候,可以把这些常量加一切以便同时显示图标和按钮: INVOKE MessageBox, hWnd, ADDR QuestionText, ADDR QuestionTitle, MB_OK + MB_ICONQUESTION

三、WinMain过程 每个Windows应用程序都需要一个启动过程,通常名为WinMain,它负责以下的工作: •获取当前程序的句柄 •装载程序使用的图标和鼠标光标 •注册窗口使用的窗口类,并且指定用来接收窗口事件消息的过程 •创建主窗口 •显示并更新主窗口 •开始一个消息循环来接收和分派处理消息,循环会一直持续到用户关闭了应用程序窗口。 WinMain中包含了一个消息循环,使用GetMessage从程序的消息队列中返回下一个可用的消息。如果GetMessage取到WM_QUIT消息,那么函数返回0,通知WinMain终止程序。对于其他消息,WinMain会把它们传递给DispatchMessage函数,由该函数把消息分发给程序的WinProc过程。要了解更多关于消息方面的知识,可在Platform SDK文档中搜索“Windows Messages”。

四、WinProc过程 WinProc过程接收并处理所有和窗口相关的事件消息,大部分的事件是由用户单击,拖动鼠标或按下了一个键盘按键等动作而引起的。该过程的任务是解译每个消息。如果某个消息是可以辨认的,那么运行和该消息对应的任务,下面是过程的声明: WinProc PROC, hWnd:DWORD, ; handle to the window localMsg:DWORD, ; message ID wParam:DWORD, ; parameter 1 (varies) lParam:DWORD ; parameter 2 (varies) 根据不同的消息ID,第3个参数和第4个参数的含义是不同的。如当鼠标被按下的时候,IParam参数里面包含的是鼠标按下点的X和Y坐标。在下面马上要看到的例子中,WinProc过程处理了三种消息: •WM_LBUTTONDOWN,用户按下鼠标左键的时候产生 •WM_CREATE,表明主窗口刚刚被创建 •WM-CLOSE,表明主窗口即将被关闭 举例来说,过程的下面几行代码处理WM_LBUTTONDOWN消息,处理方法是调用MessageBox函数向用户显示一条提示信息: .IF eax == WM_LBUTTONDOWN INVOKE MessageBox, hWnd, ADDR PopupText, ADDR PopupTitle, MB_OK jmp WinProcExit 用户看到的结果如图11.5所示。任何我们不想处理的消息都应该传递给Windows的默认消息处理函数DefWindowsProc。

五、ErrorHandler过程 ErrorHandler过程是可选的,如果程序的主窗口在注册和创建的过程中发生错误,就会调用这个过程。举例来说,调用RegisterClass函数时,如果窗口类成功注册,那么函数会返回一个非0值。若函数返回0,则可调用ErroHandler来显示错误信息并退出程序的执行: INVOKE RegisterClass, ADDR MainWin .IF eax == 0 call ErrorHandler jmp Exit_Program .ENDIF ErrorHandler过程完成了下面几件重要的事情: •调用GetLastError函数获取系统错误代码 •调用FormatMessage函数获取操作系统格式化的出错信息字符串 •调用MessageBox显示包含出错信息的消息框 •调用LocalFree函数释放为出错信息字符串分配的内存。

六、程序清单 winAPP.asm 略 需要查阅几个API的具体细节信息: WNDCLASS,GetModuleHandle,LoadIcon,LoadCursor,RegisterClass,CreateWindowEx,ShowWindow,GetMessage,DispatchMessage

本节视频的课后练习 1、请描述POINT结构 2、WNDCLASS结构时怎样使用的? 3、WNDCLASS结构的lpfnWndProc字段的含义是什么? 4、WNDCLASS结构的style字段的含义是什么? 5、WNDCLASS结构的hInstance字段的含义是什么? 6、调用CreateWindowsEx函数的时候,是如何把窗口的外观信息传递给函数的? 7、试举一个调用MessageBox函数的例子。 8、说出两个定义MessageBox函数显示的消息框上的按钮的常量。 9、说出两个定义MessageBox函数显示的消息框上的图标常量。 10、说出至少三个由WinMain过程所做的工作。 11、描述WinProc过程在例子程序中扮演的角色。 12、例子程序中的WinProc过程处理了哪些消息? 13、描述ErrorHandle过程在例子程序中扮演的角色。 14、例子程序中,调用CreateWindow函数后,消息框是在主窗口显示前还是显示后出现的? 15、例子程序中,由WM_CLOSE消息激活的消息框是在主窗口关闭前还是关闭后出现的? 课后练习请务必完成后,再继续学习后面的课程。官网视频播放页面有参考答案。

0512-57882866 www.bcdaren.com 昆山爱达人 1250121864 昆山爱达人信息技术有限公司 视频录制:编程达人 视频提供 视频录制:编程达人 联系电话: 0512-57882866 官网地址: www.bcdaren.com 联系公众号: 昆山爱达人 联系QQ: 1250121864 编程达人APP: