企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# CPaintDC封装类 封装结构的好处是在成对使用的函数不会被漏掉 ```c++ void CMCdcDlg::OnPaint() { CPaintDC dc(this);//内BeginPaint EndPaint CRect rect; GetClientRect(rect); dc.Ellipse(rect); dc.MoveTo(20,20); dc.LineTo(200,200); CDialogEx::OnPaint(); } void CMCdcDlg::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 CClientDC dc(this);//绘制客户区 //内GetDC ReleaseDC dc.Rectangle(point.x - 10,point.y-10,point.x+10,point.y+10); CDialogEx::OnLButtonDown(nFlags, point); } void CMCdcDlg::OnNcPaint() { // TODO: 在此处添加消息处理程序代码 // 不为绘图消息调用 CDialogEx::OnNcPaint() CWindowDC dc(this);//内 GetWindowDC ReleaseDC CRect rect; GetWindowRect(rect); rect.OffsetRect(-rect.right,-rect.top);//屏幕坐标系转化为非客户区坐标系 dc.Rectangle(0,0,rect.Width(),rect.Height()); } //拖动客户区使用 LRESULT CCPointDlg::OnNcHitTest(CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 UINT nHitTest = CDialog::OnNcHitTest(point); CRect rect; GetClientRect(rect); rect.bottom = 30; ScreenToClient(&point); //屏幕坐标系转化为客户坐标系 if (rect.PtInRect(point)) { if (HTCLIENT == nHitTest) { nHitTest = HTCAPTION; } } return CDialogEx::OnNcHitTest(point); } ``` CDC派生类封装的GDI函数及功能说明 a)CPaintDC类,封装了BeginPaint和EndPaint函数 用于标准客户区绘图,窗口刷新时不小时,在WM_PAINT消息下使用 b)CWindowDC类,封装了GetWindowDC和ReleaseDC函数 用户非客户区绘图,在WM_NCPAINT消息下使用,窗口刷新时不消失 c)CClientDC类,封装了GetDC和ReleaseDC函数 用于临时客户绘图,窗口刷新时小时,任何时候都可以使用, d)CMenDC类,封装CreateCompatibleDC和DeleteDC等函数。 VC6.0暂时未封装该类,网上可以找到。在内存中绘图,常用于双缓冲防止画面闪烁。 四 GDI对象包括六中类型,全部由CGdiObject类派生: a)CPen(画笔):用于修饰线条的颜色、宽度和线型(实线、虚线或点划线等) b)CBrush(画刷):用于修饰一个闭合图形内部的填充内容(填充颜色、填充线条以及平铺位图) c)CFont(字体),用于修饰输出文字的样式,高度,粗细以及字间距等; d)CBitmap(位图):用于显示和处理点阵图的GDI对象 e)CRgn(区域)用于修饰输出图像的不规则边界,例如:椭圆或多边形等。 f)CPalette(调色板):用于修饰输出图像的色调。例如:16色或256色; int GetBitmap(BITMAP* pBitMap); 通过BITMAP结构体来获取位图属性信息 static CBitmap* FromHandle(HBITMAP hBitmap); 将HBITMAP句柄转化为CBitmap对象 opeartor HBITMAP() const; 从CBitmap对象中获取HBITMAP句柄 五、CRgn(区域):用于修饰输出图像的不规则边界,例如:椭圆或多边形等; ```c++ BOOL CreateRectRgn(int x1, int y1, int x2, int y2); //创建一个矩形区域 BOOL CreateEllipticRgn(int x1, int y1, int x2, int y2); //创建一个椭圆区域 BOOL CreatePloygonRgn(LPPOINT lpPoints, int nCount, int nNode); //创建一个多边形 BOOLCreateRoundRectRgn(int x1, int y1, int x2, int y2, int x3,int y3); //创建一个圆角矩形区域; int CopyRgn(CRgn* pRgnSrc); //从已有的区域对象中复制 int ConbineRgn(CRgn* pRgn1, CRgn* pRgn2, int nCombineMode); //将两个区域合并成一个区域 static CRgn* FromHandle(HRGN hRgn); //HBRUSH 转化为CBrush对象 opeartor HRGN() const; //从CRgn获取HRGN句柄 Int GetRegionData(LPRGNDATA lpRgnData, int nCount)const; //获取区域的属性信息 ``` 六、扩充函数: CDC::SelectStockObject:选择系统GDI对象, 内部封装了GetStockObject和SelectObject函数 ::GetStockObjec;获取系统GDI对象 GetSysColor;获取系统标准色