对话框和控件的背景和颜色定制

//常用设置
CClientDC dc(this);
CPen pen(PS_SOLID, 1, RGB(255,0,0));//选择画笔颜色
CPen *pOldpen = dc.SelectObject(&pen);
dc.SelectObject(CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH)));//选择画刷颜色为透明


GetDlgItem(IDC_TEST11)->GetWindowRect(&rect);
ScreenToClient(&rect); //屏幕坐标转换为客户区坐标


pDC->SetBkMode(TRANSPARENT);//设置文字背景为透明


//demo1 (改变对话框、组框和编辑栏的背景和字体颜色)

CWnd::OnCtlColor//会被多次调用
afx_msg HBRUSH OnCtlColor( CDC* pDC, CWnd* pWnd, UINT nCtlColor );

Return Value

OnCtlColor must return a handle to the brush that is to be used for painting the control background.


//改变对话框、组框和编辑栏的背景和字体颜色
//在对话框类中捕获WM_CTLCOLOR消息,并添加消息处理函数OnCtlColor
HBRUSH CSetDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
	HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
	
	// TODO: Change any attributes of the DC here


	if(pWnd->GetDlgCtrlID() == IDC_TEST11)
	{
		pDC->SetTextColor(RGB(220,0,0));
		pDC->SetBkMode(TRANSPARENT);
		return m_brush;
	}

	if(pWnd->GetDlgCtrlID() == IDC_EDIT1)
	{
		pDC->SetTextColor(RGB(220,0,0));//设置文字颜色
		pDC->SetBkMode(TRANSPARENT);//设置文字背景颜色为透明
		return m_brush;//返回画刷颜色,m_brush为CBrush类型的对话框的成员变量
	}
	
	return hbr;
	
	// TODO: Return a different brush if the default is not desired
}

//demo2 (改变按钮的字体颜色和背景)
CButton::DrawItem 
virtual void DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct );


//改变按钮的字体颜色和背景
//添加新的类CTestButton,继承自CButton
//在CTestButton类中重写虚函数DrawButton()
//在按钮的属性style页中勾选owner draw
//将按钮通过类向导关联变量,类型为CTestButton 


void CTestButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 
{
	// TODO: Add your code to draw the specified item
	 UINT uStyle = DFCS_BUTTONPUSH;

   // This code only works with buttons.
   ASSERT(lpDrawItemStruct->CtlType == ODT_BUTTON);

   // If drawing selected, add the pushed style to DrawFrameControl.
   if (lpDrawItemStruct->itemState & ODS_SELECTED)
      uStyle |= DFCS_PUSHED;

   // Draw the button frame.
   ::DrawFrameControl(lpDrawItemStruct->hDC, &lpDrawItemStruct->rcItem, 
      DFC_BUTTON, uStyle);

   // Get the button's text.
   CString strText;
   GetWindowText(strText);

   // Draw the button text using the text color red.
   COLORREF crOldColor = ::SetTextColor(lpDrawItemStruct->hDC, RGB(255,0,0));
   ::DrawText(lpDrawItemStruct->hDC, strText, strText.GetLength(), 
      &lpDrawItemStruct->rcItem, DT_SINGLELINE|DT_VCENTER|DT_CENTER);
   ::SetTextColor(lpDrawItemStruct->hDC, crOldColor);
	
}

//demo3 (在窗口中贴图)

CDC::StretchBlt 
BOOL StretchBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, 
        int ySrc, int nSrcWidth, int nSrcHeight, DWORD dwRop );
//函数从源矩形中复制一个位图到目标矩形,必要时按目前目标设备设置的模式进行图像的拉伸或压缩。



//捕获WM_ERASEBKGND或者WM_PAINT消息,并添加响应函数
//WM_PAINT消息会有闪烁
BOOL CGraphicView::OnEraseBkgnd(CDC* pDC) 
{
	// TODO: Add your message handler code here and/or call default
	//加载位图
	CBitmap bitmap;
	bitmap.LoadBitmap(IDB_BITMAP2);

	BITMAP bitmapinfo;
	bitmap.GetBitmap(&bitmapinfo);
	
	//创建兼容DC
	CDC dcCompatible;
	dcCompatible.CreateCompatibleDC(pDC);//与当前DC兼容
    
	//将位图选进兼容DC
	dcCompatible.SelectObject(&bitmap);
	

	//将兼容DC的位图拷贝到目的DC
	CRect rect;
	GetClientRect(&rect);
//	pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,0,0,SRCCOPY);
	pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,
					0,0,bitmapinfo.bmWidth,bitmapinfo.bmHeight,SRCCOPY);

	return TRUE;	
//	return CView::OnEraseBkgnd(pDC);
}


你可能感兴趣的:(null,button,attributes)