CEDIT 背景色

來源:互聯網
上載者:User

總結:

一。首先,利用Class Wizard為WM_CTLCOLOR 訊息構造相應的訊息映射,將得到以下的訊息處理函數:
     //說明,WM_CTLCOLOR 是從CWnd就有的,所以直接從CWnd或是CDialogue類(其實也是從CWnd中繼承來的)繼承的都可以

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

二。在MyDlg.h標頭檔中增加如下的函數說明:

    afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);

     ....

     DECLARE_MESSAGE_MAP()

     protected:

        static HBRUSH  m_BrushBack;

三。在MyDlg.cpp檔案中初始化靜態變數:

      HBRUSH  CMyDlg::m_BrushBack = HBRUSH(RGB(235,235,235));

 

四。在MyDlg.cpp檔案中增加如下的訊息映射:

BEGIN_MESSAGE_MAP(CMyDlg, CDialog)
        ON_WM_CTLCOLOR()   //增加此條目

        ....

    再增加如下的訊息處理函數:

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

  {

  //獲得控制項

   CEdit * pEdit = (CEdit *)GetDlgItem(IDC_MYEDIT);  //此處的IDC_MYEDIT即為CMyDlg視窗中要設定的CEdit控制項的ID

   if(pEdit->GetSafeHwnd() == pWnd->GetSafeHwnd())

  {
      // 返回設定好的刷子
      return m_BrushgRA;

   }

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

   return hbr;

  }


//////////////////////////////////////////////////////////////////////////////////以下為別人的//////////// 

 

VC中由於沒有直接的屬性設定可以調整編輯控制項的背景色,因此我們需要利用圖形裝置介面的有關操作來實現這一目標。

  首先,利用Class Wizard為WM_CTLCOLOR 訊息構造相應的訊息映射,將得到以下的訊息處理函數:

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

  {

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

   return hbr;

   // TODO: Return a different brush if the default is not desired

   // return hbr;

  }

  接著檢查CTLCOLOR_EDIT 控制項的nCtlColor 屬性值,與我們希望控制項的背景色是否存在差異。最好的方法是使用視窗控制代碼的比較,而不要比較兩個指標。因此需要在訊息處理函數中增加以下代碼:

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

  {

  //獲得控制項

   CEdit * pEdit = (CEdit *)GetDlgItem(IDC_REDEDIT);

   if(nCtlColor == CTLCOLOR_EDIT &&&& pEdit->GetSafeHwnd() == pWnd->GetSafeHwnd())

  {

  // 設定背景模式

  pDC->SetBkMode(TRANSPARENT);

  // 調整文本顏色,以便更好地在新的背景色上顯示

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

  // 返回紅色的刷子

  return m_Brush;

   }

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

   return hbr;

  }

  如果控制項置為唯讀即READONLY ,則最好將nCtlColor與CTLCOLOR_STATIC進行比較,代碼如下:

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

  {

  // 取得具有唯讀性質的控制項

  CEdit * pEditReadOnly = (CEdit *)GetDlgItem(IDC_READONLYEDIT);

  //取得控制項對應的視窗

  HWND hWndReadOnly = pEditReadOnly->GetSafeHwnd();

  if(nCtlColor == CTLCOLOR_STATIC &&&& hWndReadOnly == pWnd->GetSafeHwnd()) {

  // 設定背景色為刷子顏色(當前為紅色)

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

  // 調整文本色

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

  // 返回紅色的刷子

  return m_Brush;

   }

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

   return hbr;

   }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.