WINDOWS应用编程.ppt

上传人:sh****n 文档编号:8631475 上传时间:2020-03-30 格式:PPT 页数:28 大小:252KB
返回 下载 相关 举报
WINDOWS应用编程.ppt_第1页
第1页 / 共28页
WINDOWS应用编程.ppt_第2页
第2页 / 共28页
WINDOWS应用编程.ppt_第3页
第3页 / 共28页
点击查看更多>>
资源描述
Win32应用编程 VC交流学习 作者 唐凯 Windows应用程序 操作系统 计算机硬件之间的相互关系 应用程序 操作系统 输入输出设备 消息队列 1 2 3 4 API 上面图中向下的箭头3表示应用程序可以通知操作系统执行某个具体的动作 例如控制声卡发出声音等 操作系统本身是不知道执行何种具体动作 需要由应用程序来通知操作系统具体的动作 那么应用程序应该如何通知操作系统执行某个功能的呢 API 大家都写过程序 相信大家都知道 在程序中实现某项功能的时候一般是通过函数调用实现的 那么同样的 应用程序也是通过函数调用的方式来通知操作系统执行相应的操作的 操作系统所能够完成的每一个功能都有一个函数与其相对应 也就是说 操作系统把所能完成的功能以函数的形式提供给应用程序 应用程序程序对这些函数的调用称作系统调用 这些函数就是操作系统提供给应用程序编程的接口 ApplicationProgrammingInterface 简称WindowsAPI 消息与消息队列 前图中向上的箭头4表示操作系统能够将输入设备的变化上传给应用程序 如果用户在某个应用程序活动时按了一下 操作系统马上就能感知到这一事件 而操作系统对此事件做过处理后再转交给应用程序 由应用程序来决定对该事件的响应 那么操作系统是如何通知应用程序的呢 消息与消息队列 操作系统将每一个事件都包装成一个称为消息的结构体MSG来传递给应用程序 MSG的定义如下 typedefstructtagMSG HWNDhwnd UINTmessage WPARAMwParam LPARAMlParam DWORDtime POINTpt MSG 消息与消息队列 应用程序是如何接收这些消息的呢 在Windows下每一个应用程序都拥有一个消息队列 操作系统发送消息就是发到消息队列里面 应用程序从消息队列里面按照顺序获取相应的消息进行响应处理 以上就是Windows消息机制 句柄 句柄 HANDLE 资源的标识 操作系统要管理和操作这些资源 都是通过句柄来找到对应的资源 按照资源类型 又可将句柄细分为图标句柄 HICON 光标句柄 HCURSOR 窗口句柄 HWND 应用程序实例句柄 HINSTANCE 等等各种类型的句柄 操作系统给每一个窗口唯一的标识号 即窗口句柄 WinMain函数 Windows程序的入口函数 intWINAPIWinMain HINSTANCEhInstance handletocurrentinstanceHINSTANCEhPrevInstacne handletopreviouseinstanceLPSTRlpCmdLine commandlineintnCmdShow showstate 窗口的创建 创建一个完整的窗口需要经过以下四个步骤 设计注册一个窗口类 注册窗口类 创建窗口 显示及更新窗口 设计窗口类 typedefstruct WNDCLASS UINTstyle WNDPROClpfnWndProc intcbClsExtra intcbWndExtra HANDLEhInstance HICONhIcon HCURSORhCursor HBRUSHhbrBackground LPCTSTRlpszMenuName LPCTSTRlpszClassName WNDCLASS 窗口的过程函数 第二个成员变量lpfnWndProc指定了这一类型窗口的过程函数 也称回调函数 回调函数的原理是这样的 当应用程序收到给某一窗口的消息时 就应该调用某一处函数来处理这条消息 这一调用过程不用应用程序自己实施 而由操作系统完成 但是回调函数代码本身必须由应用程序完成 对于一条消息 操作系统就是调用lpfnWndProc成员指定的应用程序中函数来处理 每一种不同类型的窗口都有自己专用的回调函数 该函数就是通过lpfnWndProc成员指定 注册窗口类 RegisterClass constWNDCLASS lpWndClass 创建窗口 HWNDCreateWindow LPCTSTRlpClassName LPCTSTRlpWindowName DWORDdwStyle intx nty intnWidth intnHeight HWNDhWndParent HMENUhMenu HANDLEhInstance PVOIDlpParam 显示窗口 BOOLShowWindow HWNDhWnd intnCmdShow BOOLUpdateWindow HWNDhWnd 消息的获取 消息循环GetMessage PeekMessage从程序的消息队列当中 获取到消息 TranslateMessage检查获取到的消息 如果发现是按键消息 产生一个字符消息 并放入程序的消息队列 DispatchMessage根据消息 找到窗口处理函数 调用窗口处理函数 完成消息的处理 消息的相关函数 BOOLGetMessage LPMSGlpMsg HWNDhWnd UINTwMsgFilterMin UINTwMsgFilterMax 从系统获取消息 将消息从系统中移除 阻塞函数 当系统无消息时 GetMessage会等候下一条消息 BOOLPeekMessage LPMSGlpMsg HWNDhWnd UINTwMsgFilterMin UINTwMsgFilterMax UINTwRemoveMsg 以查看的方式从系统获取消息 可以不将消息从系统移除 非阻塞函数 当系统无消息时 返回FALSE 继续执行后续代码 消息的相关函数 TranslateMessage 翻译消息 将按键消息 翻译成字符消息 BOOLTranslateMessage CONSTMSG lpMsg 要翻译的消息地址 检查消息是否是按键的消息 如果不是按键消息 不做任何处理 继续执行 DispatchMessage 派发消息 将消息派发到该消息所属窗口的窗口处理函数上 LRESULTDispatchMessage CONSTMSG lpmsg 要派发的消息 消息的相关函数 SendMessage 发送消息 会等候消息处理的结果 PostMessage 投递消息 消息发出后立刻返回 不等候消息执行结果 BOOLSendMessage PostMessage HWNDhWnd 消息发送的目的窗口UINTMsg 消息IDWPARAMwParam 消息参数LPARAMlParam 消息参数 常用的消息 WM DESTROY 窗口被销毁时的消息 无消息参数 常用于在窗口被销毁之前 做相应的善后处理 例如资源 内存等 WM SYSCOMMAND 系统命令消息 当点击窗口的最大化 最小化 关闭等命令时 收到这个消息 WM CREATE 在窗口创建成功还未显示之前 收到这个消息 常用于初始化窗口的参数 资源等等 包括创建子窗口 WM QUIT 用于结束消息循环处理 WM PAINT 绘图消息 键盘消息鼠标消息定时器消息 窗口处理函数 每个窗口都必须具有窗口处理函数 LRESULTCALLBACKWindowProc HWNDhwnd 窗口句柄UINTuMsg 消息IDWPARAMwParam 消息参数LPARAMlParam 消息参数 当系统通知窗口时 会调用窗口处理函数同时 将消息ID和消息参数传递给窗口处理函数 在窗口处理函数中 不处理的消息 使用缺省窗口处理函数 例如DefWindowProc Windows绘图 绘图相关GDI Windowsgraphicsdeviceinterface Win32提供的绘图API绘图设备DC DeviceContext HDC DC句柄 表示绘图设备颜色的使用COLORREF 实际DWORD 例如 COLORREFnColor 0 赋值使用RGB宏 例如 nColor RGB 255 0 0 获取RGB值 GetRValue GetGValue GetBValue例如 BYTEnRed GetRValue nColor Windows绘图 点的使用GetPixel获取指定点的颜色COLORREFGetPixel HDChdc handletoDCintnXPos x coordinateofpixelintnYPos y coordinateofpixel SetPixel设置指定点的颜色COLORREFSetPixel HDChdc DC句柄intX X坐标intY Y坐标COLORREFcrColor 设置的颜色 返回点原来的颜色 Windows绘图 线的使用 直线 圆形 弧线 MoveToEx 移动当前点到指定点LineTo 从当前点到指定点绘制一条直线当前点 上一次绘图时的最后一点 初始为 0 0 点 封闭图形RectangleEllipse Windows绘图 GDI绘图对象 画笔线的颜色 线型 粗细 HPEN 画笔句柄画笔的使用1创建画笔HPENCreatePen intfnPenStyle 画笔的样式intnWidth 画笔的粗细COLORREFcrColor 画笔的颜色 创建成功返回句柄PS SOILD 实心线 可以支持多个像素宽其他线型只能是一个像素宽 2将画笔应用到DC中HGDIOBJSelectObject HDChdc 绘图设备句柄HGDIOBJhgdiobj GDI绘图对象句柄 画笔句柄 返回原来的GDI绘图对象句柄注意保存原来DC原有画笔 Windows绘图 3绘图4取出DC中的画笔将原来的画笔 使用SelectObject函数 放入到设备DC中 就会将我们创建的画笔取出 5释放画笔BOOLDeleteObject HGDIOBJhObject GDI绘图对象句柄 画笔句柄 只能删除不被DC使用的画笔 所以在释放前 必须将画笔从DC中取出 位图和画刷的用法类似于画笔就不作介绍了 Windows绘图 文字的绘制BOOLTextOut HDChdc DC句柄intnXStart 绘制位置横坐标intnYStart 绘制位置纵坐标LPCTSTRlpString 字符串intcbString 字符串长度 将文字绘制在指定坐标位置 intDrawText HDChDC DC句柄LPCTSTRlpString 字符串intnCount 字符数量LPRECTlpRect 绘制文字的矩形框UINTuFormat 绘制的方式 Windows绘图 文字颜色和背景文字颜色SetTextColor文字背景色SetBkColor文件背景模式SetBkMode 总结 介绍了Windows程序消息驱动机制介绍了编写Windows窗口程序的基本步骤介绍一些Windows绘图基础知识
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!