MFC:使用 GDI+ 绘制对话框边框
Posted
技术标签:
【中文标题】MFC:使用 GDI+ 绘制对话框边框【英文标题】:MFC: Draw dialog border using GDI+ 【发布时间】:2015-04-12 04:47:15 【问题描述】:我将对话框修改为多边形区域对话框。然后我试图框架/绘制边框。使用设备上下文 CRgn::FrameRgn,我可以在对话框周围绘制边框。但我想使用 Gdi+ 来实现这一点。我做了如下,但边框只出现在对话框的左侧和顶部。 有人可以帮忙吗?
CPoint vertex[4];
BOOL CPolygonDlg::OnInitDialog()
CDialogEx::OnInitDialog();
ModifyStyle(WS_CAPTION,0);
ModifyStyle(WS_BORDER,0);
CRect rect(400,200,900,700);
CRect wr = rect;
AdjustWindowRect( wr, 0, FALSE );
MoveWindow(wr);
GetClientRect( rect );
CRect csr = rect;
ClientToScreen( csr );
vertex[0] = CPoint(rect.left,rect.top);
vertex[1] = CPoint(rect.right,rect.top);
vertex[2] = CPoint(rect.right,rect.bottom);
vertex[3] = CPoint(rect.left,rect.bottom);
m_rgnShape.CreatePolygonRgn( vertex, 4, ALTERNATE );
m_rgnShape.OffsetRgn( CPoint( csr.TopLeft() - wr.TopLeft() ) );
SetWindowRgn( (HRGN)m_rgnShape.Detach(), TRUE );
m_rgnShape.CreatePolygonRgn( vertex, 4, ALTERNATE );
return TRUE; // return TRUE unless you set the focus to a control
void CPolygonDlg::OnPaint()
Graphics graphics(dc.m_hDC);
CRect rect;
GetClientRect(rect);
GraphicsPath gp;
Point point[4];
point[0] = Point(rect.left,rect.top);
point[1] = Point(rect.right,rect.top);
point[2] = Point(rect.right,rect.bottom);
point[3] = Point(rect.left,rect.bottom);
gp.AddPolygon(point,4);
Pen pen(Color(255, 255, 0, 0));
graphics.DrawPath(&pen, &gp);
谢谢
【问题讨论】:
【参考方案1】:当您调用GetClientRect()
时,它会返回窗口客户区的大小——您可以轻松绘制的部分,以及当您在@987654323 中执行CPaintDC dc(this);
时由设备上下文控制的部分@ 方法。
您面临的问题是您的对话框窗口有边框,您需要处理 WM_NCPAINT 才能在边框区域上绘图。
【讨论】:
以上是关于MFC:使用 GDI+ 绘制对话框边框的主要内容,如果未能解决你的问题,请参考以下文章
VS2010/MFC编程入门之五十一(图形图像:GDI对象之画刷CBrush)