2017-05-28 86 views
0

我有一個包含許多控件的對話框。例如:編輯控件。 現在我正在開發這些具有豐富邊框的編輯控件。 但每次用戶在編輯控件中輸入輸入時控件都會重繪,因此邊框閃爍。 現在我想在具有此控件的對話框上繪製邊框。在mfc中可能嗎?在mfc的父對話框中繪製

+0

你是如何進行編輯控制圖紙邊界?我會通過處理'WM_NCCALCSIZE'來定義邊框尺寸和'WM_NCPAINT'來實際繪製邊框。如果正確,沒有閃爍。 – zett42

+1

*「現在我正在開發這些編輯控件」 - 這可能意味着什麼。作爲你的問題的核心組成部分,它值得更多的細節。 – IInspectable

回答

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

我在篩上部分所做的更改,並通過降低控制每邊1px然後繪製邊框。 像這樣

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