1. 程式人生 > >MFC設定對話方塊背景和邊框顏色

MFC設定對話方塊背景和邊框顏色

 對於對話方塊,只需要過載預設的訊息處理函式就行了:

// 過載預設的訊息處理函式,主要處理WM_MOVE WM_PAINT WM_NCPAINT WM_NCACTIVATE WM_NOTIFY這// 幾個訊息就可以了

複製程式碼
LRESULT CMyDialog::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
    LRESULT lrst=CDialog::DefWindowProc(message, wParam, lParam);
   
    if (!::IsWindow(m_hWnd))
        return
lrst; if (message==WM_MOVE||message==WM_PAINT||message==WM_NCPAINT||message==WM_NCACTIVATE ||message == WM_NOTIFY) { CDC* pWinDC = GetWindowDC(); if (pWinDC) DrawBorder(pWinDC); ReleaseDC(pWinDC); } return lrst; //return CDialog::DefWindowProc(message, wParam, lParam);
}
複製程式碼 複製程式碼
// 重畫邊框的具體程式碼
void CMyDialog::DrawBorder(CDC *pDC)
{
    if (m_hWnd )
    {
        CBrush Brush(RGB(255, 0, 0));
        CBrush* pOldBrush = pDC->SelectObject(&Brush);

        CRect rtWnd;
        GetWindowRect(&rtWnd);
       
        CPoint point;
        //填充頂部框架
        point.x = rtWnd.Width();
        point.y 
= GetSystemMetrics(SM_CYFRAME)+1; pDC->PatBlt(0, 0, point.x, point.y, PATCOPY); //填充左側框架 point.x = GetSystemMetrics(SM_CXFRAME); point.y = rtWnd.Height(); pDC->PatBlt(0, 0, point.x, point.y, PATCOPY); //填充底部框架 point.x = rtWnd.Width(); point.y = GetSystemMetrics(SM_CYFRAME) + 1; pDC->PatBlt(0, rtWnd.Height()-point.y, point.x, point.y, PATCOPY); //填充右側框架 point.x = GetSystemMetrics(SM_CXFRAME); point.y = rtWnd.Height(); pDC->PatBlt(rtWnd.Width()-point.x, 0, point.x, point.y, PATCOPY); } }
複製程式碼

以上程式碼雖然是針對對話方塊的,不過,對於一般的視窗,稍微修改一下,估計也是可以的。
如果出現對話方塊的邊框顏色沒有修改,可以用:

InvalidateRect(NULL); // 在邊框改變的對話方塊中

或者如果有父視窗,在父視窗中呼叫:

RedrawWindow(NULL, NULL, RDW_FRAME | RDW_INVALIDATE | RDW_ERASE | RDW_UPDATENOW | RDW_ALLCHILDREN );

這樣應該就差不多了。

---------------------------------------------------------------------------------------------------------------------

以下為修改對話方塊背景顏色方法:

過載OnPaint(),即WM_PAINT訊息。有關程式碼如下(以上例工程為準):   

複製程式碼
void   CExampleDlgDlg::OnPaint()   
{ 
if   (IsIconic()) 
… 
else 
{ 
CRect   rect; 
CPaintDC   dc(this); 
GetClientRect(rect); 
dc.FillSolidRect(rect,RGB(0,255,0));   //設定為綠色背景 
CDialog::OnPaint(); 
} 
複製程式碼

或者在OnInitDialog函式中呼叫

SetBackgroundColor(RGB(0,255,0));