效果预览图:
以下是实现代码:
void CControlButton::DrawVirtualFrame(CDC * pDC, CRect rectScreen)
{
CRect rectVirtual(rectScreen.left + m_usLeftX, rectScreen.top + m_usLeftY, rectScreen.left + m_usRightX, rectScreen.top + m_usRightY);
DWORD style[4] = {1, 1, 1, 1};//绘制不同背景颜色而显示不同前景色的虚线矩形
LOGBRUSH logBrush;
logBrush.lbColor = RGB(0, 0, 0);
logBrush.lbStyle = BS_SOLID;
CPen pen(PS_USERSTYLE, 1, &logBrush, 4, style);
CBrush * pBrush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));//背景透明效果
CBrush * pOldBrush = pDC->SelectObject(pBrush);
CPen * pOldPen = pDC->SelectObject(&pen);
int nOldMode = pDC->SetROP2(R2_NOT);//像素是屏幕颜色的反向操作。
pDC->Rectangle(rectVirtual);
pDC->SelectObject(pOldBrush);
pDC->SelectObject(pOldPen);
pDC->SetROP2(nOldMode);
}