有时候我们需要绘制一个三维效果的矩形,比如自绘一个按钮,按下和凸起状态都是三维的。MSDN里好像没有这个API,但MFC的代码里实现了一个
void CDC::Draw3dRect(int x, int y, int cx, int cy, COLORREF clrTopLeft, COLORREF clrBottomRight)
{
FillSolidRect(x, y, cx - 1, 1, clrTopLeft);
FillSolidRect(x, y, 1, cy - 1, clrTopLeft);
FillSolidRect(x + cx, y, -1, cy, clrBottomRight);
FillSolidRect(x, y + cy, cx, -1, clrBottomRight);
}
就是画四条宽度为一个像素的线,而FillSolidRect的实现如下:
void CDC::FillSolidRect(int x, int y, int cx, int cy, COLORREF clr)
{
ASSERT_VALID(this);
ASSERT(m_hDC != NULL);
::SetBkColor(m_hDC, clr);
CRect rect(x, y, x + cx, y + cy);
::ExtTextOut(m_hDC, 0, 0, ETO_OPAQUE, &rect, NULL, 0, NULL);
}
如果只是画一个像素的线条,个人认为可以用画笔还来的轻松些。