2017-05-28 21 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

私はOnSize関数で変更を加えたとして制御を削減各側に1pxを設定して境界を描画します。 このようなもの

rcRichEdit.left += 1; 
     rcRichEdit.right -= 1; 
     rcRichEdit.bottom -= 1; 
関連する問題