在mfc中绘制父对话框

时间:2017-05-28 16:05:28

标签: c++ visual-c++ mfc drawing

我有一个包含许多控件的对话框。例如:编辑控件。 现在我正在开发这些具有彩色边框的编辑控件。 但是每次用户在编辑控件中输入输入时,控件都会重绘,因此边框会闪烁。 现在我想在具有此控件的对话框上绘制边框。有没有可能在mfc?

2 个答案:

答案 0 :(得分:4)

您可以通过自定义控件类并在非客户区域上绘图来实现此目的。 我已经在我的项目中实现了这个,没有任何轻微的问题。

enter image description here

这个想法是:

/////////////////////////////////////////////////////////////////////////////
///
/// /This method is overriden, to modify the style of editcrtl
///
/////////////////////////////////////////////////////////////////////////////
void CEdit1::PreSubclassWindow()
{
    ModifyStyleEx(0, WS_EX_STATICEDGE, 0); //to make sure your border is static edge
}

在非客户区域,您只需绘制红色矩形:

/////////////////////////////////////////////////////////////////////////////
///
/// /This handler is used to paint the non- client area
///
/// /return none
///
/////////////////////////////////////////////////////////////////////////////
void CEdit1::OnNcPaint() 
{
    CDC* pDC = GetWindowDC();

    //work out the coordinates of the window rectangle,
    CRect rect;
    GetWindowRect( &rect);
    rect.OffsetRect( -rect.left, -rect.top);

    //Draw a single line around the outside
    CBrush brush(RGB(255,0,0));
    pDC->FrameRect(&rect, &brush);
    ReleaseDC( pDC);
}

答案 1 :(得分:0)

我在Onsize中进行了更改,并将控制每侧减少了1px然后绘制边框。 像这样的东西

rcRichEdit.left += 1;
        rcRichEdit.right -= 1;
        rcRichEdit.bottom -= 1;