MFC下如何設定控制元件的字型樣式,視窗背景和控制元件底色透明
阿新 • • 發佈:2019-02-17
重寫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; }