0
我有一個包含許多控件的對話框。例如:編輯控件。 現在我正在開發這些具有豐富邊框的編輯控件。 但每次用戶在編輯控件中輸入輸入時控件都會重繪,因此邊框閃爍。 現在我想在具有此控件的對話框上繪製邊框。在mfc中可能嗎?在mfc的父對話框中繪製
我有一個包含許多控件的對話框。例如:編輯控件。 現在我正在開發這些具有豐富邊框的編輯控件。 但每次用戶在編輯控件中輸入輸入時控件都會重繪,因此邊框閃爍。 現在我想在具有此控件的對話框上繪製邊框。在mfc中可能嗎?在mfc的父對話框中繪製
您可以通過自定義您的控件類並在非客戶區繪製來實現此目的。 我已經在我的項目中實現了這個功能,沒有閃爍問題。
這裏的想法雲:
/////////////////////////////////////////////////////////////////////////////
///
/// /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);
}
我在篩上部分所做的更改,並通過降低控制每邊1px然後繪製邊框。 像這樣
rcRichEdit.left += 1;
rcRichEdit.right -= 1;
rcRichEdit.bottom -= 1;
你是如何進行編輯控制圖紙邊界?我會通過處理'WM_NCCALCSIZE'來定義邊框尺寸和'WM_NCPAINT'來實際繪製邊框。如果正確,沒有閃爍。 – zett42
*「現在我正在開發這些編輯控件」 - 這可能意味着什麼。作爲你的問題的核心組成部分,它值得更多的細節。 – IInspectable