1. 程式人生 > >對話方塊控制元件背景、字型顏色設定

對話方塊控制元件背景、字型顏色設定

1、控制元件背景顏色
每個控制元件和對話方塊本身在宣示之前會向其父對話方塊傳送WM_CTLCOLOR訊息。如果你在派生類對話方塊對WM_CTLCOLOR訊息進行對映,就可以設定控制元件的顏色,以及某些控制元件的背景顏色和字型的顏色。

HBRUSH CMyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)

{

       if((nCtlColor==CTLCOLOR_EDIT)&& pWnd->GetDlgCtrlID()==IDC_EDIT1)

      // 對ID號為IDC_EDIT1的EDIT控制元件屬性進行設定

   {

         pDC->SetBkColor(RGB(255,0,255)); //設定文字的背景色

         pDC->SetTextColor(RGB(255,255,0));//設定文字顏色

         return m_hYellowBrush;// 設定控制元件的填充顏色

     }

if(nCtlColor==CTLCOLOR_STATIC)

//對所有的STATIC控制元件的屬性進行設定

   {

          pDC->SetBkColor(RGB(0,0,0));

           pDC->SetTextColor(RGB(255, 255, 0));

          pDC->SetBkMode(TRANSPARENT);

         return m_hBlue;

   }

   HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

   return hbr;

}

nCtlColor的其它對應值:

CTLCOLOR_BTN(按鈕),CTLCOLOR_DLG(對話方塊),CTLCOLOR_LISTBOX(列表框),CTLCOLOR_MSGBOX(訊息框),CTLCOLOR_SCROLLBAR(滾動條)。

2、圖片作為背景並做透明處理

(1)對話方塊中增加成員變數或者全域性變數如下:
          CBitmap m_bmDents;
          CBrush m_brDents;

(2)在OnInitDialog()中加入匯入函式:

        BOOL CMyDlg::OnInitDialog()

        { ……

            m_bmDents.DeleteObject();
m_brDents.DeleteObject();
m_bmDents.LoadBitmap(IDB_BITMAP1);     //匯入背景圖片
              m_brDents.CreatePatternBrush(&m_bmDents);

       }

(3)在對話方塊增加OnCtlColor訊息函式(在VC生成的函式修改如下,條件判斷中就是對各種控制元件的透明處理):

      HBRUSH CBitMapDlgDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
      {
          if(nCtlColor == CTLCOLOR_DLG || nCtlColor == CTLCOLOR_BTN || nCtlColor ==                     CTLCOLOR_STATIC)
         {
             pDC->SetBkMode(TRANSPARENT);
  
             return m_brDents;
   }
         return(CDialog::OnCtlColor(pDC, pWnd, nCtlColor));
}

3、設定對話方塊背景點陣圖

對於文件檢視結構和基於對話方塊的應用程式都對應著相應的WINDOWS訊息WM_ERASEBKGND,對該訊息進行對映就可以用於背景的修改

BOOL CMyDlg::OnEraseBkgnd(CDC* pDC)

{   

   CBitmap bitmap;

   CRect    client;

   CDC      dc;

     GetClientRect(&client);

     BITMAP   hb;

     bitmap.LoadBitmap(IDB_BITMAP1);//IDB_BITMAP1為資源中背景點陣圖資源的ID號

     dc.CreateCompatibleDC(pDC);

   dc.SelectObject(&bitmap);

     bitmap.GetObject(sizeof(hb),&hb);

     pDC->StretchBlt(0,0,client.right-client.left,client.bottom-client.top,&dc,

                            0,0,hb.bmWidth,hb.bmHeight,SRCCOPY);

   return TRUE;

}

4、改變對話方塊背景顏色

最簡單的方法就是在OnPaint()中新增如下語句即可:
CRect rect;
CPaintDC dc(this);
GetClientRect(rect);
dc.FillSolidRect(rect,RGB(0,255,0));

參考資料: