我新建了一个基于对话框的工程,在对话框中输入要画的线条的参数:左上角的点,长,宽,线条的宽,线条的颜色...然后用一个按钮触发一个画图事件,在屏幕上画一个矩形框,我想让这个矩形框一直保留在最前端,如何实现重画?我的代码如下:
void CRectangleDlg::OnPaintrect()
{
UpdateData(TRUE);
CDC* pWndDC=GetDesktopWindow()->GetWindowDC();
CPen pen;
LOGPEN logpen;
logpen.lopnColor=RGB(m_RGBX,m_RGBY,m_RGBZ);
logpen.lopnStyle=PS_SOLID;
logpen.lopnWidth.x=m_ThreadWidth;
pen.CreatePenIndirect(&logpen);
pWndDC->SelectObject(&pen);
pWndDC->MoveTo(m_LeftVertexx,m_LeftVertexy);
pWndDC->LineTo(m_LeftVertexx+m_Length,m_LeftVertexy);
pWndDC->LineTo(m_LeftVertexx+m_Length,m_LeftVertexy+m_Width);
pWndDC->LineTo(m_LeftVertexx,m_LeftVertexy+m_Width);
pWndDC->LineTo(m_LeftVertexx,m_LeftVertexy);}
void CRectangleDlg::OnPaintrect()
{
UpdateData(TRUE);
CDC* pWndDC=GetDesktopWindow()->GetWindowDC();
CPen pen;
LOGPEN logpen;
logpen.lopnColor=RGB(m_RGBX,m_RGBY,m_RGBZ);
logpen.lopnStyle=PS_SOLID;
logpen.lopnWidth.x=m_ThreadWidth;
pen.CreatePenIndirect(&logpen);
pWndDC->SelectObject(&pen);
pWndDC->MoveTo(m_LeftVertexx,m_LeftVertexy);
pWndDC->LineTo(m_LeftVertexx+m_Length,m_LeftVertexy);
pWndDC->LineTo(m_LeftVertexx+m_Length,m_LeftVertexy+m_Width);
pWndDC->LineTo(m_LeftVertexx,m_LeftVertexy+m_Width);
pWndDC->LineTo(m_LeftVertexx,m_LeftVertexy);}
把图先画到内存DC中,在WM_PAINT消息中用BitBlt将图象贴到窗口上。
创建一个无边框的TopMost窗口,根据设定的线条宽度,用SetWindowRgn把中间裁剪掉,只留4个边,把窗口背景设置为指定的颜色。