2010.9.8 CView的绘图(OnEraseBkgnd、OnCtlColor、OnPaint)

函数:OnPaint()

函数:BOOL CPnrNavCtrlView::OnEraseBkgnd(CDC* pDC)

函数:HBRUSH CPnrNavCtrlView::OnCtlColor(CDC* pDC,CWnd* pWnd,UINT nCtlColor) 

1、OnEraseBkgnd()可以用于绘制背景色

COLORREF   m_crBackground;  
 CBrush   m_wndbkBrush;   
 m_crBackground=RGB(146,182,237);//想要改成的颜色      
 m_wndbkBrush.CreateSolidBrush(m_crBackground);     
 CFormView::OnEraseBkgnd(pDC);//这里要看基类是什么就用哪个类.  
 CRect rect;  
 GetClientRect(rect);  
 pDC->FillRect(&rect,&m_wndbkBrush);
 return  TRUE; 

 

这段儿代码也可以写到OnPaint中,效果一样。

2、OnCtlColor()可用于绘制控件颜色

     HBRUSH hbr = CFormView::OnCtlColor(pDC, pWnd, nCtlColor);
 if(nCtlColor == CTLCOLOR_STATIC)
 {
  //pDC->SetBkMode(TRANSPARENT);//设置与背景色相同
  pDC->SetBkColor(RGB(146,182,237));//设置指定颜色
  return(HBRUSH)GetStockObject(NULL_BRUSH);//返回空画刷,避免重画背景
 }

重载此方法,用于绘制客户区的控件。比如CFormView中的CStatic、CButton,绘制Dialog上的按钮,但是不影响客户区本身(例如View,Dialog)。

所以是否可以理解OnCtlColor是循环所有控件,并绘图?

 

    以上两个组合起来,可以实现绘制界面背景色。不过在CFormView中,效果不好,主要是控件的背景色无法实现透明。

   在Dialog中效果还好。

 

 

如果给控件赋值,比如CEdit、CButton:

赋值:m_edit.SetWindowText(_T("ss"));

获取值:1、获取整数:GetDlgItemInt(IDC_EDIT1);

           2、获取字符串: CString UIText;
                                  m_edit_AimPoint_X.GetWindowText(UIText);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(paint)