图形输出.ppt

上传人:hwp****526 文档编号:84694029 上传时间:2023-04-07 格式:PPT 页数:20 大小:1.87MB
返回 下载 相关 举报
图形输出.ppt_第1页
第1页 / 共20页
图形输出.ppt_第2页
第2页 / 共20页
点击查看更多>>
资源描述

《图形输出.ppt》由会员分享,可在线阅读,更多相关《图形输出.ppt(20页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、Windows编程技术图形输出图形输出图形输出简介图形输出简介Windows应用程序不支持标准输出流(例如printf或cout)之类的输出函数,应用程序输出包括文字在内的所有数据均是以图形方式输出的,即数据“绘制”到窗口上。Windows通过图形设备接口GDI对图形输出进行支持。GDI由几百个函数和与此相关的数据类型、宏定义和结构体组成。主要有:获取和释放(或创建和删除)设备描述表函数、获取设备信息函数、使用GDI绘图对象函数、绘图函数、设置和获取设备参数函数等,其显示的图形类型(简称图元)有:直线、曲线、填充、位图、文本等。wingdi.h设备场境(设备场境(1)设备场景指Windows对

2、图形显示设备封装后形成的统一虚拟图形显示设备。用一个包含各种设备属性的数据结构来表示,称为设备场境,又称设备上下文,简称DC(device content),可以用来输出图形。当程序员想在一个图形输出设备(例如屏幕或者打印机)上绘图时,必须首先获得设备场境句柄,然后以此为参数调用GDI函数绘图。Windows提供了几种获取设备场境句柄的方法。如果在处理一条消息时获取了设备场境句柄,那么应该在退出窗口过程WndProc之前释放它或者删除它。一旦释放了DC句柄,它就不能再使用了。设备场景(设备场景(2)设备场景(设备场景(3)获取设备场境句柄的方法:1.处理WM_PAINT消息时,使用BeginP

3、aint和EndPaint调用:hdc=BeginPaint(hWnd,&ps);/客户区准备绘图/GDI绘图调用.EndPaint(hWnd,&ps);/客户区绘图结束2.处理非WM_PAINT消息时获取设备场境句柄:hdc=GetDC(hWnd);/hdc得到客户区DC句柄/GDI绘图调用.ReleaseDC(hWnd,hdc);/释放客户区DC句柄 设备场景(设备场景(4)获取设备场境句柄的方法:3.获取整个窗口的设备场境句柄 hdc=GetWindowDC(hWnd);/hdc得到窗口DC句柄/GDI绘图调用.ReleaseDC(hWnd,hdc);/释放窗口DC句柄4.hdc=Cre

4、ateDC(lpszDriver,lpszDevice,lpszOutput,lpInitData);/hdc得到设备DC句柄/GDI绘图调用.DeleteDC(hdc);/删除设备DC句柄GDI绘图对象(绘图对象(1)GDI绘图对象是绘制图形的工具。工具类型说明画笔(Pen)画笔工具定义了绘制图形和文字所使用的宽度、颜色和线条类型。画刷(Brush)画刷工具定义了用于填充形状的图案和颜色。字体(Font)字体工具定义了绘制文本所使用的字体。调色板(Palette)调色板工具定义了在给定设备上绘制图形的颜色系统。裁剪区(Region)裁剪区工具定义了用于绘制复杂图形的裁剪区域。位图(Bitma

5、p)位图工具定义了输出图形的图像数据。GDI绘图对象(绘图对象(2)GDI绘图对象的使用必须按如下步骤进行:创建绘图对象或调用GetStockObject获取预定义绘图对象。调用SelectObject将绘图对象选进设备场境DC中。调用DeleteObject删除绘图对象(GetStockObject获取的对象除外)。创建和删除绘图对象一般有两个时机。一个时机是在WM_CREATE消息处理中创建绘图对象,在WM_DESTROY消息处理中删除绘图对象,即在窗口建立时创建对象,窗口销毁时删除对象。另一个时机是在设备场境句柄有效期间,例如在BeginPaint、GetDC、GetWindowDC、C

6、reateDC、CreateCompatibleDC之后创建绘图对象,在EndPaint、ReleaseDC、DeleteDC之后删除绘图对象。Windows规定不能删除设备场境当前选择的绘图对象。GDI绘图对象(绘图对象(3)创建函数功能CreatePen创建逻辑画笔。CreatePenIndirect用给定的LOGPEN结构创建逻辑画笔。CreateSolidBrush创建逻辑画刷。CreatePatternBrush用给定的位图句柄创建画刷。CreateHatchBrush创建有阴影线的画刷。CreateDIBPatternBrushPt用给定的设备无关位图创建画刷。CreateBrus

7、hIndirect用给定的LOGBRUSH结构创建画刷。CreateBitmapIndirect创建以BITMAP结构数据为基础的位图。CreateBitmap创建以颜色值组成的数据块为基础的位图。CreateCompatibleBitmap创建与设备兼容的内存位图。CreateFont创建逻辑字体。CreateFontIndirect用给定的LOGFONT结构创建字体。CreatePalette创建逻辑调色板。CreateHalftonePalette创建半色调调色板。CreateRectRgn创建矩形裁剪区。CreateEllipticRgn创建椭圆形裁剪区。CreateEllipticR

8、gnIndirect用给定的RECT结构创建椭圆形裁剪区。CreatePolygonRgn创建多边形裁剪区。CreatePolyPolygonRgn在多边形基础上创建裁剪区。CreateRectRgnIndirect用给定的RECT结构创建矩形裁剪区。CreateRoundRectRgn创建带圆角的矩形裁剪区。GDI绘图对象(绘图对象(4)Windows系统在应用程序初始化时提供了一套默认的绘图工具,例如默认的画笔工具颜色是黑色,所以这时绘制出来的线条都是黑色的。如果应用程序认为默认绘图工具不适用的话,则需要另行创建绘图对象,并将其选进设备场境中,函数原型为:HGDIOBJ SelectObj

9、ect(HDC hdc,HGDIOBJ hgdiobj);如:hPen=CreatePen(PS_SOLID,4,RGB(255,0,255);/创建紫色画笔hOldPen=SelectObject(hdc,hPen);/将画笔选进DC中,此后画线均用此画笔,直到另选画笔为止LineTo(hdc,300,100);/画紫色线hbr=CreateSolidBrush(RGB(255,0,0);/创建红色画刷hOldBrush=SelectObject(hdc,hbr);/将画刷选进DC中,此后填充均用此画刷,直到另选画刷为止Rectangle(hdc,300,100,400,200);/画矩形框

10、且填充红色 GDI绘图对象(绘图对象(5)画文字/在指定坐标开始输出cbString个字符,如果输出全部字符串,cbString设为-1BOOL TextOut(HDC hdc,int nXStart,int nYStart,LPCTSTR lpString,int cbString);/在一个矩形范围内输出字符串,uFormat值表示使用对齐等格式int DrawText(HDC hDC,LPCTSTR lpString,int nCount,LPRECT lpRect,UINT uFormat);/设置文本颜色COLORREF SetTextColor(HDC hdc,COLORREF c

11、rColor);/设置文本背景颜色COLORREF SetBkColor(HDC hdc,COLORREF crColor);/设置文本字符间距int SetTextCharacterExtra(HDC hdc,int nCharExtra);/设置文本对齐方式UINT SetTextAlign(HDC hdc,UINT fMode);/设置背景色模式,iBkMode=OPAQUE使用背景色,iBkMode=TRANSPARENT背景是透明的int SetBkMode(HDC hdc,int iBkMode);GDI绘图对象(绘图对象(6)画位图和图标1.hBmp=LoadBitmap(hIn

12、st,MAKEINTRESOURCE(IDB_PICTURE);/加载位图资源2.GetObject(hBmp,sizeof(BITMAP),&bm);/bm.bmWidth,bm.bmHeight分别为宽和高3.hdcMem=CreateCompatibleDC(hdc);/创建内存DC hOldBmp=(HBITMAP)SelectObject(hdcMem,hBmp);/位图选进内存DC4./等比复制hdcSrc的图形到hdcDest中,dwRop表示像素光栅运算模式 BOOL BitBlt(HDC hdcDest,int nXDest,int nYDest,int nWidth,int

13、 nHeight,HDC hdcSrc,int nXSrc,int nYSrc,DWORD dwRop);/拉伸复制hdcSrc的图形到hdcDest中,dwRop表示像素光栅运算模式 BOOL StretchBlt(HDC hdcDest,int nXOriginDest,int nYOriginDest,int nWidthDest,int nHeightDest,HDC hdcSrc,int nXOriginSrc,int nYOriginSrc,int nWidthSrc,int nHeightSrc,DWORD dwRop);5.BOOL DrawIcon(HDC hDC,int X

14、,int Y,HICON hIcon);事件处理事件处理-菜单菜单LRESULT OnCommand(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)/命令消息处理WORD wID;wID=LOWORD(wParam);/菜单项标识或快捷键命令标识switch(wID)case IDM_ABOUT:/软件简介 MessageBox(hWnd,菜单消息演示n版本:1.01,软件简介,MB_OK);break;case IDM_EXIT:/退出DestroyWindow(hWnd);break;default:/其他菜单调用默认处理return

15、 DefWindowProc(hWnd,message,wParam,lParam);return 0;/处理了这条消息后必须返回0菜单命令既可以使用按键选项,又可以使用鼠标选项,还可以使用快捷键来操作。无论何种操作方式,一旦执行菜单命令就产生WM_COMMAND消息,随消息传来的wParam参数低16位值,即LOWORD(wParam)为菜单项或快捷键资源标识。菜单事件响应需要增加WM_COMMAND消息处理,其函数结构如下:事件处理事件处理-菜单菜单LRESULT OnCommand(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)/命

16、令消息处理WORD wID;wID=LOWORD(wParam);/菜单项标识或快捷键命令标识switch(wID)case IDM_ABOUT:/软件简介 MessageBox(hWnd,菜单消息演示n版本:1.01,软件简介,MB_OK);break;case IDM_EXIT:/退出DestroyWindow(hWnd);break;default:/其他菜单调用默认处理return DefWindowProc(hWnd,message,wParam,lParam);return 0;/处理了这条消息后必须返回0菜单命令既可以使用按键选项,又可以使用鼠标选项,还可以使用快捷键来操作。无论

17、何种操作方式,一旦执行菜单命令就产生WM_COMMAND消息,随消息传来的wParam参数低16位值,即LOWORD(wParam)为菜单项或快捷键资源标识。菜单事件响应需要增加WM_COMMAND消息处理,其函数结构如下:事件处理事件处理-鼠标鼠标当用户移动鼠标或按动鼠标时会产生鼠标事件。鼠标在屏幕上显示为光标,光标有一个指向屏幕上位置的单个像素的“热点”,通常将热点的位置作为鼠标在屏幕上的位置。根据鼠标消息发生时鼠标所处的位置,鼠标消息分为客户区鼠标消息和非客户区鼠标消息,非客户区是指窗口标题栏、窗口外框、菜单、滚动条等所组成的区域。事件处理事件处理-键盘键盘当用户敲击键盘时会向应用程序发

18、送消息,与鼠标消息不一样的是键盘消息总是发送到获得输入焦点的窗口上,即当前活动的窗口,其特征为标题栏是高亮的,而不是灰色的。当按下键盘上的某个按键时,键盘硬件会产生与该键对应的扫描码。由于扫描码与键盘设备有关,不同的键盘设备某个按键的扫描码有可能不同,因此Windows对每个按键定义了与设备无关的编码,称为虚拟键盘码,简称虚键码。事件处理事件处理-定时器定时器Windows还有定时器事件,它由计算机内部时钟产生。利用定时器事件,可以让应用程序定时地自动完成某些操作。使用定时器时需按三个步骤进行:调用SetTimer开启定时器。每个定时间隔到时产生WM_TIMER消息。不再使用定时器时需要调用K

19、illTimer关闭定时器。控件与对话框控件与对话框-控件控件一个窗口除包含标题栏、客户区、菜单、滚动条等图形元素外,还可以使用控件,例如按钮、编辑框等。通常窗口将其内部的控件看作是其子窗口,控件对窗口的作用主要是作为人机交互中的输入和输出元素。窗口上的控件是通过调用CreateWindow函数创建的,一般在窗口WM_CREATE消息中进行,这样控件会随窗口立即显示出来。如果在其他地方创建,则需要再调用ShowWindow和UpdateWindow将控件显示出来。得到的控件窗口句柄一般需要保存下来,以便能够通过该句柄访问控件。控件一般是独立的,它能够自己绘制自己的形状,在窗口移动时控件也会随之

20、移动,能够处理自身支持的许多事件等。控件一旦被触发事件,通常会发送WM_COMMAND消息到父窗口,随消息而来的参数含义如下:wNotifyCode=HIWORD(wParam);/子控件通知码wId=LOWORD(wParam);/子控件标识hwndCtl=(HWND)lParam;/子控件句柄实际上,控件通知消息处理与菜单消息处理是完全一样的。控件与对话框控件与对话框-对话框对话框对话框是用来进行人机交互的独特窗口,一般应用于数据输入、操作控制、参数选择、信息显示等。对话框分两类:模式对话框和非模式对话框。当程序显示模式对话框时,使用者不能在对话框与同一个程序的另一个窗口之间进行切换,必须结束该对话框才可以切换,甚至系统模式对话框连程序之间的切换都不允许。非模式对话框本质上就是一个普通的窗口,模式对话框比非模式对话框应用得更多。西北工业大学 刘君瑞

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 资格考试

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

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com