• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • VC中改變窗體及控件的顏色

    發表于:2007-07-04來源:作者:點擊數: 標簽:
    孟學楨 一般情況下,VC中的對話框及控件的顏色大都是灰色的,但一個良好的應用程序,它的界面都是豐富多彩的,那么在VC中怎樣實現窗體及控件的著色呢? 改變窗體的顏色 要改變一個對話框的背景色,可以調用CWin::SetDialogBkColor,它可以改變所有的對話框的顏色
    孟學楨

      一般情況下,VC中的對話框及控件的顏色大都是灰色的,但一個良好的應用程序,它的界面都是豐富多彩的,那么在VC中怎樣實現窗體及控件的著色呢?


      改變窗體的顏色


      要改變一個對話框的背景色,可以調用CWin::SetDialogBkColor,它可以改變所有的對話框的顏色。第一參數指定了背景顏色,第二參數指定了文本顏色。

      用法如下:

      BOOL CSampleApp::InitInstance()

      {

      ...

      //set yellow dialog and green text

       SetDialogBkColor(RGB(255,255,0),RGB(0,255,0));

      ...

      }

      需要重畫對話框(或對話框的子控件)時,Windows向對話框發送消息WM—CTLCOLOR。通常用戶可以讓Windows選擇繪畫背景的刷子,也可以重置該消息指定刷子。下面的說明創建了一個紅色背景對話框的步驟。

      首先,給對話框基類增加一個成員變量。

      class CMyFormView::public CFormView

      {

      ...

      private:

       CBrush m—brush ; //background brush

      ...

      };

      其次,在類的構造函數中將刷子初始化為所需的背景顏色。

      CMyFormView::CMyFormView()

      {

      // Initialize background brush

       m—brush.CreateSolidBrush(RGB(255,0,0));

      }

      最后,使用ClassWizard處理WM—CTLCOLOR消息并返回一個用來繪畫對話框背景的刷子句柄。由于重畫對話框控件時也要調用該函數,所以要檢測nCtlColor參量。

      HBRUSH CMyFormView::OnCtlColor()

      {

      //determine if drawing a dialog box,

      //otherwise let windows handle it

      if(nCtlColor==CTLCOLOR—DLG)

      return (HBRUSH) m—brush.GetSafeHandle();

      return CFormView::OnCtlColor(pDC,pWnd,nCtlColor);

      }


      改變控件的顏色


      需要改變控件的顏色,可以通過兩種方法,其一,可以在父類中指定控件的顏色。其二,利用消息反射在控件類中指定顏色。

      當控件需要重新著色時,工作框調用父窗口(通常是對話框)的CWnd::OnCtlColor,可以在父窗口類中重置該函數并指定新的繪畫屬性。

      如下所示,將對話框中的編輯控件的文本顏色改為藍色。

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

      {

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

      //Draw blue text for edit controls

      if(nCtlColor==CLTCOLOR—EDIT)

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

      return hbr;

      }

      由于每個窗口必須處理通知消息并指定每個控件的繪畫屬性,所以,這種方法不是完全的面向對象的方法,控件處理該消息并指定繪畫屬性更合理一些。

      消息反射允許用戶這樣做,通知消息發給父窗口,若父窗口沒有處理則發給控件,創建一個定制彩色列表框控件,其步驟如下。

      首先用ClassWizard創建一個CListBox的派生類,并添加如下的成員變量。

      class CMyListBox::public CListBox

      {

      ...

      private :

      COLORREF m—clrFore; //foreground color

      COLORREF m—clrBack; //background color

      CBrush m—brush ; //background brush

      ...

      };

      其二,在類的構造函數中初始化數據成員。

      CMyListBox::CMyListBox()

      {

      //Initialize data members

      m—clrfore=RGB(255,0,0); //red text

      m—clrBack=RGB(0,255,0);

      //green background

      m—brush.CreateSolidBrush(m—clrBack);

      }

      第三,使用ClassWizard處理反射消息(=WM—CTLCOLOR)并指定新的繪畫屬性。

      HBRUSH CMyListBox::CtlColor(CDC* pDC,UINT nCtlColor)

      {

      pDC->SetTextColor(m—clrFore);

      pDC->SetBkColor(m—clrBack);

      return (HBRUSH)m—brush.GetSafeHandle();

      }

      現在控件可以重畫自身,與父窗口無關。

      最后,在父窗口頭文件中包含派生的CMyListBox類,然后用ClassWizard 定義列表框控件的成員變量即可。其成員變量的類性為CMyListBox。 這樣我們就完成了控件的著色。   

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>