0
votes

I modified my dialog to a polygon region dialog. Then i am trying to frame/draw the border.Using device context the CRgn::FrameRgn, i am bale to draw the border around the dialog. But i want to achieve this using Gdi+. I did as below, but the border is appearing only on left and top of the dialog. Can someone please help on this.

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);
}

Thanks

1

1 Answers

0
votes

When you call GetClientRect(), it returns the size of the client area of the window - the part you can easily draw on, and the part that is controlled by the device context when you do CPaintDC dc(this); in your OnPaint() method.

The problem you are facing is that your dialog window has a border and you need to handle WM_NCPAINT in order to draw on border area.