1. 程式人生 > >MFC下如何設定控制元件的字型樣式,視窗背景和控制元件底色透明

MFC下如何設定控制元件的字型樣式,視窗背景和控制元件底色透明

重寫OnPaint方法(WM_PAINT)和OnCtlColor的方法(WM_CTLCOLOR)

void CPannelRecentUsed::OnPaint()
{
	CPaintDC dc(this); // device context for painting
					   // TODO: 在此處新增訊息處理程式程式碼
					   // 不為繪圖訊息呼叫 CDialogEx::OnPaint()
	CRect   rect;
	GetClientRect(rect);
	dc.FillSolidRect(rect, RGB(0, 191, 255)); //繪製背景

	SetText(&dc, &rect);//設定字型樣式,宣告void SetText(CPaintDC *pDC, CRect rec);

	CDialog::OnPaint();
}

//設定字型樣式
void CPannelRecentUsed::SetText(CPaintDC *pDC, CRect rec)
{
	
    //CFont font;需要定義在標頭檔案中才生效
	font.CreatePointFont(180, "微軟雅黑", pDC);
	GetDlgItem(IDC_STATIC_TITLE)->SetFont(&font);//未繫結控制元件變數下的
	font.CreatePointFont(160, "微軟雅黑", pDC);
	m_edlit_curBillNo.SetFont(&font);//繫結控制元件變數下的


}

//解決控制元件與背景顏色不融合的情況
HBRUSH CPannelRecentUsed::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
	HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
	
	// TODO:  在此更改 DC 的任何特性
	UINT id = pWnd->GetDlgCtrlID();
	if ((id == IDC_STATIC)||(id == IDC_STATIC_TITLE))//id指控制元件的ID
	{
		pDC->SetBkMode(TRANSPARENT);

		CRect rc;
		pWnd->GetWindowRect(&rc);
		ScreenToClient(&rc);

		CDC* dc = GetDC();

		pDC->BitBlt(0, 0, rc.Width(), rc.Height(), dc, rc.left, rc.top, SRCCOPY);  //把父視窗背景圖片先畫到按鈕上

		ReleaseDC(dc);

		hbr = (HBRUSH) ::GetStockObject(NULL_BRUSH);
	}
	// TODO:  如果預設的不是所需畫筆,則返回另一個畫筆
	return hbr;
}