输出文本与绘图.docx

上传人:b****6 文档编号:3459626 上传时间:2022-11-23 格式:DOCX 页数:25 大小:148.25KB
下载 相关 举报
输出文本与绘图.docx_第1页
第1页 / 共25页
输出文本与绘图.docx_第2页
第2页 / 共25页
输出文本与绘图.docx_第3页
第3页 / 共25页
输出文本与绘图.docx_第4页
第4页 / 共25页
输出文本与绘图.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

输出文本与绘图.docx

《输出文本与绘图.docx》由会员分享,可在线阅读,更多相关《输出文本与绘图.docx(25页珍藏版)》请在冰豆网上搜索。

输出文本与绘图.docx

输出文本与绘图

第二讲:

输出文本与绘图

●显示器为多个程序共享,只能在窗口的客户区内输出。

●客户区是窗口中可以由程序任意书写和传递视觉信息的部分,通常显示了用户的某种交互需求

●窗口大小不固定,窗口之间的覆盖,要求开发者更新对应的客户区

●处理客户区的绘制,一般在WM_PAINT消息的处理过程中完成

●GDI:

GraphicsDeviceInterface

●WM_PAINT消息

1.在WinMain()中的UpdateWindow()函数直接给窗口过程发送第一个WM_PAINT消息。

2.当窗口客户区域的一部分或全部变成“无效”,以致必须刷新时,系统将产生这个消息:

(a)当窗口被最初创建时,整个客户区域都是无效的,第一个WM_PAINT消息通常是在WinMain()中调用UpdateWindow产生的;

(b)当窗口的大小发生变化时,整个客户区域都变得无效;

(c)当窗口区域的一部分不再被其他窗口遮盖之后,先前被遮盖的客户区域将变得无效;

●设备描述表(DC:

DeviceContext):

是GDI内部保存的数据结构,指物理输出设备,与特定显示设备相关,其属性定义了被输出文本的颜色、文本的背景色、字体等。

●设备描述表句柄是GDI函数的窗口“通行证”,有了这种设备内容句柄,程序员就能自如地在显示区域上绘图。

Windows提供了几个GDI函数,用于将字符串输出到窗口的显示区域内

●绘制的一般过程

 

 

●获取设备描述表句柄方法一:

处理WM_PAINT消息,必须使用BeginPaint()和EndPaint(),BeginPaint()和EndPaint()必须成对出现。

在BeginPaint()调用中,它使用注册窗口类的WNDCLASS结构的hbrBackGround域中指定的刷子来删除无效区域背景,BeginPaint()调用使整个客户区域有效。

如果窗口过程不处理WM_PAINT消息,则必须把它传给DefWindowProc()来处理,DefWindowProc()函数依次调用BeginPaint()和EndPaint()以使整个客户区域有效。

绘图信息结构PAINSTRUCT:

在程序调用BeginPaint()时,WINDOWS填充该结构的各个字段,若fErase为0,则意味着在调用BeginPaint()时,BeginPaint()已经用刷子删除无效区域背景;RECTrcPaint字段定义了包围无效区域的最小矩形,GDI输出函数只能在这个矩形内输出。

typedefstructtagPAINTSTRUCT

{

HDChdc;

BOOLfErase;

RECTrcPaint;

BOOLfRestore;

BOOLfIncUpdate;

BYTErgbReserved[32];

}PAINTSTRUCT;

●获取设备描述表句柄方法二:

在处理非WM_PAINT消息时,在客户区上做图获取设备描述表句柄的方法是GetDC()和ReleaseDC(),用GetDC()获取的设备描述表句柄,可在整个客户区上做图。

●程序必须在处理单个消息期间,获取和释放设备描述表句柄。

●系统字体:

设备描述表的默认字体是系统字体,系统字体是Windows用来在标题条、菜单和对话框中显示文本串的字体。

●字体大小:

系统用结构TEXTMETRIC来描述字体的各个参数,用函数GetTextMetrics(hdc,&tm)来取得当前字体的尺寸。

结构TEXTMETRIC的定义如下:

typedefstructtagTEXTMETRIC

{

LONGtmHeight;

LONGtmAscent;

LONGtmDescent;

LONGtmInternalLeading;

LONGtmExternalLeading;

LONGtmAveCharWidth;

LONGtmMaxCharWidth;

[otherstructurefields]

}TEXTMETRIC,*PTEXTMETRIC;

tmAveCharWidthfieldisaweightedaverageoflowercasecharacters.

tmMaxCharWidthisthewidthofthewidestcharacterinthefont.

ThelowbitofthetmPitchAndFamilyfieldintheTEXTMETRICstructureis1foravariable-widthfontand0forafixed-pitchfont.

●文本输出函数TextOut(hdc,x,y,psText,iLength):

TextOutwritesacharacterstringtotheclientareaofthewindow.ThepsTextargumentisapointertothecharacterstring,andiLengthisthelengthofthestringincharacters.Thexandyargumentsdefinethestartingpositionofthecharacterstringintheclientarea.(Moredetailssoononhowthesework.)Thehdcargumentisa"handletoadevicecontext".

●映射方式(MappingMode):

映射方式定义了如何把逻辑坐标转换成物理坐标,系统默认的映射方式是WM_TEXT,在WM_TEXT映射方式下,逻辑单位和物理单位相同,以像素为单位。

●输出文本程序例

/*-----------------------------------------------

SYSMETS.H--Systemmetricsdisplaystructure

-----------------------------------------------*/

#defineNUMLINES((int)(sizeofsysmetrics/sizeofsysmetrics[0]))

struct

{

intiIndex;

TCHAR*szLabel;

TCHAR*szDesc;

}

sysmetrics[]=

{

SM_CXSCREEN,TEXT("SM_CXSCREEN"),

TEXT("Screenwidthinpixels"),

SM_CYSCREEN,TEXT("SM_CYSCREEN"),

TEXT("Screenheightinpixels"),

SM_CXVSCROLL,TEXT("SM_CXVSCROLL"),

TEXT("Verticalscrollwidth"),

SM_CYHSCROLL,TEXT("SM_CYHSCROLL"),

TEXT("Horizontalscrollheight"),

SM_CYCAPTION,TEXT("SM_CYCAPTION"),

TEXT("Captionbarheight"),

SM_CXBORDER,TEXT("SM_CXBORDER"),

TEXT("Windowborderwidth"),

SM_CYBORDER,TEXT("SM_CYBORDER"),

TEXT("Windowborderheight"),

SM_CXFIXEDFRAME,TEXT("SM_CXFIXEDFRAME"),

TEXT("Dialogwindowframewidth"),

SM_CYFIXEDFRAME,TEXT("SM_CYFIXEDFRAME"),

TEXT("Dialogwindowframeheight"),

SM_CYVTHUMB,TEXT("SM_CYVTHUMB"),

TEXT("Verticalscrollthumbheight"),

SM_CXHTHUMB,TEXT("SM_CXHTHUMB"),

TEXT("Horizontalscrollthumbwidth"),

SM_CXICON,TEXT("SM_CXICON"),

TEXT("Iconwidth"),

SM_CYICON,TEXT("SM_CYICON"),

TEXT("Iconheight"),

SM_CXCURSOR,TEXT("SM_CXCURSOR"),

TEXT("Cursorwidth"),

SM_CYCURSOR,TEXT("SM_CYCURSOR"),

TEXT("Cursorheight"),

SM_CYMENU,TEXT("SM_CYMENU"),

TEXT("Menubarheight"),

SM_CXFULLSCREEN,TEXT("SM_CXFULLSCREEN"),

TEXT("Fullscreenclientareawidth"),

SM_CYFULLSCREEN,TEXT("SM_CYFULLSCREEN"),

TEXT("Fullscreenclientareaheight"),

SM_CYKANJIWINDOW,TEXT("SM_CYKANJIWINDOW"),

TEXT("Kanjiwindowheight"),

SM_MOUSEPRESENT,TEXT("SM_MOUSEPRESENT"),

TEXT("Mousepresentflag"),

SM_CYVSCROLL,TEXT("SM_CYVSCROLL"),

TEXT("Verticalscrollarrowheight"),

SM_CXHSCROLL,TEXT("SM_CXHSCROLL"),

TEXT("Horizontalscrollarrowwidth"),

SM_DEBUG,TEXT("SM_DEBUG"),

TEXT("Debugversionflag"),

SM_SWAPBUTTON,TEXT("SM_SWAPBUTTON"),

TEXT("Mousebuttonsswappedflag"),

SM_CXMIN,TEXT("SM_CXMIN"),

TEXT("Minimumwindowwidth"),

SM_CYMIN,TEXT("SM_CYMIN"),

TEXT("Minimumwindowheight"),

SM_CXSIZE,TEXT("SM_CXSIZE"),

TEXT("Min/Max/Closebuttonwidth"),

SM_CYSIZE,TEXT("SM_CYSIZE"),

TEXT("Min/Max/Closebuttonheight"),

SM_CXSIZEFRAME,TEXT("SM_CXSIZEFRAME"),

TEXT("Windowsizingframewidth"),

SM_CYSIZEFRAME,TEXT("SM_CYSIZEFRAME"),

TEXT("Windowsizingframeheight"),

SM_CXMINTRACK,TEXT("SM_CXMINTRACK"),

TEXT("Minimumwindowtrackingwidth"),

SM_CYMINTRACK,TEXT("SM_CYMINTRACK"),

TEXT("Minimumwindowtrackingheight"),

SM_CXDOUBLECLK,TEXT("SM_CXDOUBLECLK"),

TEXT("Doubleclickxtolerance"),

SM_CYDOUBLECLK,TEXT("SM_CYDOUBLECLK"),

TEXT("Doubleclickytolerance"),

SM_CXICONSPACING,TEXT("SM_CXICONSPACING"),

TEXT("Horizontaliconspacing"),

SM_CYICONSPACING,TEXT("SM_CYICONSPACING"),

TEXT("Verticaliconspacing"),

SM_MENUDROPALIGNMENT,TEXT("SM_MENUDROPALIGNMENT"),

TEXT("Leftorrightmenudrop"),

SM_PENWINDOWS,TEXT("SM_PENWINDOWS"),

TEXT("Penextensionsinstalled"),

SM_DBCSENABLED,TEXT("SM_DBCSENABLED"),

TEXT("Double-ByteCharSetenabled"),

SM_CMOUSEBUTTONS,TEXT("SM_CMOUSEBUTTONS"),

TEXT("Numberofmousebuttons"),

SM_SECURE,TEXT("SM_SECURE"),

TEXT("Securitypresentflag"),

SM_CXEDGE,TEXT("SM_CXEDGE"),

TEXT("3-Dborderwidth"),

SM_CYEDGE,TEXT("SM_CYEDGE"),

TEXT("3-Dborderheight"),

SM_CXMINSPACING,TEXT("SM_CXMINSPACING"),

TEXT("Minimizedwindowspacingwidth"),

SM_CYMINSPACING,TEXT("SM_CYMINSPACING"),

TEXT("Minimizedwindowspacingheight"),

SM_CXSMICON,TEXT("SM_CXSMICON"),

TEXT("Smalliconwidth"),

SM_CYSMICON,TEXT("SM_CYSMICON"),

TEXT("Smalliconheight"),

SM_CYSMCAPTION,TEXT("SM_CYSMCAPTION"),

TEXT("Smallcaptionheight"),

SM_CXSMSIZE,TEXT("SM_CXSMSIZE"),

TEXT("Smallcaptionbuttonwidth"),

SM_CYSMSIZE,TEXT("SM_CYSMSIZE"),

TEXT("Smallcaptionbuttonheight"),

SM_CXMENUSIZE,TEXT("SM_CXMENUSIZE"),

TEXT("Menubarbuttonwidth"),

SM_CYMENUSIZE,TEXT("SM_CYMENUSIZE"),

TEXT("Menubarbuttonheight"),

SM_ARRANGE,TEXT("SM_ARRANGE"),

TEXT("Howminimizedwindowsarranged"),

SM_CXMINIMIZED,TEXT("SM_CXMINIMIZED"),

TEXT("Minimizedwindowwidth"),

SM_CYMINIMIZED,TEXT("SM_CYMINIMIZED"),

TEXT("Minimizedwindowheight"),

SM_CXMAXTRACK,TEXT("SM_CXMAXTRACK"),

TEXT("Maximumdraggablewidth"),

SM_CYMAXTRACK,TEXT("SM_CYMAXTRACK"),

TEXT("Maximumdraggableheight"),

SM_CXMAXIMIZED,TEXT("SM_CXMAXIMIZED"),

TEXT("Widthofmaximizedwindow"),

SM_CYMAXIMIZED,TEXT("SM_CYMAXIMIZED"),

TEXT("Heightofmaximizedwindow"),

SM_NETWORK,TEXT("SM_NETWORK"),

TEXT("Networkpresentflag"),

SM_CLEANBOOT,TEXT("SM_CLEANBOOT"),

TEXT("Howsystemwasbooted"),

SM_CXDRAG,TEXT("SM_CXDRAG"),

TEXT("Avoiddragxtolerance"),

SM_CYDRAG,TEXT("SM_CYDRAG"),

TEXT("Avoiddragytolerance"),

SM_SHOWSOUNDS,TEXT("SM_SHOWSOUNDS"),

TEXT("Presentsoundsvisually"),

SM_CXMENUCHECK,TEXT("SM_CXMENUCHECK"),

TEXT("Menucheck-markwidth"),

SM_CYMENUCHECK,TEXT("SM_CYMENUCHECK"),

TEXT("Menucheck-markheight"),

SM_SLOWMACHINE,TEXT("SM_SLOWMACHINE"),

TEXT("Slowprocessorflag"),

SM_MIDEASTENABLED,TEXT("SM_MIDEASTENABLED"),

TEXT("HebrewandArabicenabledflag"),

SM_MOUSEWHEELPRESENT,TEXT("SM_MOUSEWHEELPRESENT"),

TEXT("Mousewheelpresentflag"),

SM_XVIRTUALSCREEN,TEXT("SM_XVIRTUALSCREEN"),

TEXT("Virtualscreenxorigin"),

SM_YVIRTUALSCREEN,TEXT("SM_YVIRTUALSCREEN"),

TEXT("Virtualscreenyorigin"),

SM_CXVIRTUALSCREEN,TEXT("SM_CXVIRTUALSCREEN"),

TEXT("Virtualscreenwidth"),

SM_CYVIRTUALSCREEN,TEXT("SM_CYVIRTUALSCREEN"),

TEXT("Virtualscreenheight"),

SM_CMONITORS,TEXT("SM_CMONITORS"),

TEXT("Numberofmonitors"),

SM_SAMEDISPLAYFORMAT,TEXT("SM_SAMEDISPLAYFORMAT"),

TEXT("Samecolorformatflag")

};

/*----------------------------------------------------

SYSMETS1.C--SystemMetricsDisplayProgramNo.1

(c)CharlesPetzold,1998

----------------------------------------------------*/

#defineWINVER0x0500

#include

#include"sysmets.h"

LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);

intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,

PSTRszCmdLine,intiCmdShow)

{

staticTCHARszAppName[]=TEXT("SysMets1");

HWNDhwnd;

MSGmsg;

WNDCLASSwndclass;

wndclass.style=CS_HREDRAW|CS_VREDRAW;

wndclass.lpfnWndProc=WndProc;

wndclass.cbClsExtra=0;

wndclass.cbWndExtra=0;

wndclass.hInstance=hInstance;

wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);

wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);

wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);

wndclass.lpszMenuName=NULL;

wndclass.lpszClassName=szAppName;

if(!

RegisterClass(&wndclass))

{

MessageBox(NULL,TEXT("ThisprogramrequiresWindowsNT!

"),

szAppName,MB_ICONERROR);

return0;

}

hwnd=CreateWindow(szAppName,TEXT("GetSystemMetricsNo.1"),

WS_OVERLAPPEDWINDOW,

CW_USEDEFAULT,CW_USEDEFAULT,

CW_USEDEFAULT,CW_USEDEFAULT,

NULL,NULL,hInstance,NULL);

ShowWindo

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1