资源描述:
《gdi绘图基本步骤总结》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、GDI绘图基本步骤总结一、获得绘图的窗口句柄方法(详细参数及其调用可以看考MSDN):1、HWNDFindWindow(LPCTSTRlpClassName,LPCTSTRlpWindowName)HWNDFindWindowEx(HWNDhwndParent,HWNDhwndChildAfter,LPCTSTRlpClassName,LPCTSTRlpWindowName)2、HWNDWindowFromPoint(POINT&Point)3、BOOLCALLBACKEnumChildProc(HWNDhw
2、nd,LPARAMlParam)BOOLCALLBACKEnumChildWindows(HWNDhWndParent,WNDENUMPROClpEnumFunc,LPARAMlParam)BOOLCALLBACKEnumWindows(WNDENUMPROClpEnumFunc,LPARAMlParam)BOOLCALLBACKEnumWindowsProc(HWNDhwnd,LPARAMlParam)二、由窗口句柄得到设备环境句柄HDC方法:BeginPaint、GetWindowDC、GetDC。这些函
3、数都需要步骤一中的HWND的句柄。调用这些函数后要释放句柄,相应的有EndPaint、ReleaseDC进行清理。1、采用BeginPaint获取HDCHDChdc;PAINTSTRUCTps;//保存hdc=::BeginPaint(hwnd,&ps);//此处添加绘图代码::EndPaint(hwnd,&ps);说明:获得的hdc的有效区域仅限于客户区无效区域的设备环境句柄,不包括标题栏、边框等。2、采用GetWindowDC获取HDCHDChdc=::GetWindowDC(hwnd);//此处添加绘图
4、代码::ReleaseDC(hwnd,hdc);说明:绘制区域是整个窗口(边框、标题栏、客户区的总和)。3、采用GetDC获取HDCHDChdc=::GetDC(hwnd);//此处添加绘图代码::ReleaseDC(hwnd,hdc);说明:获得的hdc的有效区域仅限于客户区有效区域的设备环境句柄,不包括标题栏、边框等。三、图形绘制方法1、画笔CreatePen绘画之前先选择画笔,画笔的功能主要是绘制边框,其函数原型如下:WINGDIAPIHPENWINAPICreatePen(__inintiStyle,
5、//画笔的类型,比如是实线,还是虚线等等。__inintcWidth,//线的宽度。__inCOLORREFcolor//线的颜色。);//iStyle参数可选值:PS_SOLID=0;//实线PS_DASH=1;//段线;要求笔宽<=1PS_DOT=2;//点线;要求笔宽<=1PS_DASHDOT=3;//线、点;要求笔宽<=1PS_DASHDOTDOT=4;//线、点、点;要求笔宽<=1PS_NULL=5;//不可见PS_INSIDEFRAME=6;//实线;但笔宽是向里扩展返回值为画笔类型,Select
6、Object函数选中。选中后,返回原来画刷的句柄用来恢复时使用。图形绘制完毕后使用DeleteObject函数将其释放。SelectObject函数说明:函数功能:该函数选择一对象到指定的设备上下文环境中,该新对象替换先前的相同类型的对象。函数原型:HGDIOBJSelectObject(HDChdc,HGDIOBJhgdiobj);参数:hdc:设备上下文环境的句柄。hgdiobj:被选择的对象的句型,该指定对象必须由如下的函数创建。位图:CreateBitmap,CreateBitmapIndirect,
7、CreateCompatibleBitmap,CreateDIBitmap,CreateDIBsection(只有内存设备上下文环境可选择位图,并且在同一时刻只能一个设备上下文环境选择位图)。画笔:CreateBrushIndirect,CreateDIBPatternBrush,CreateDIBPatternBrushPt,CreateHatchBrush,CreatePatternBrush,CreateSolidBrush。字体:CreateFont,CreateFontIndirect。笔:Crea
8、tePen,CreatePenIndirect。区域:CombineRgn,CreateEllipticRgn,CreateEllipticRgnIndirect,CreatePolygonRgn,CreateRectRgn,CreateRectRgnIndirect。返回值:如果选择对象不是区域并且函数执行成功,那么返回值是被取代的对象的句柄;如果选择对象是区域并且函数执行成功,返回如下一值;De