<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    VC 對話框背景顏色、控件顏色

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

    系統環境:Windows 7
    軟件環境:Visual C++ 2008 SP1
    本次目的:為對話框設置背景顏色、控件顏色

          既然MFC對話框不好開發,那么現在我們來開始美化我們的對話框。為對話框設置背景顏色、控件顏色等等。

     


    對話框背景顏色:

     

    網上流傳有四種方法(可能還不止),在VC++2008SP1測試后,發現只有三種可以使用了,其中第一種被廢棄了。以下是四種方法:

    方法一 (失效):調用CWinApp類的成員函數SetDialogBkColor來實現。     
      其中函數的第一個參數指定了背景顏色,第二個參數指定了文本顏色。下面的例子是將應用程序對 話框設置為藍色背景和紅色文本,步驟如下:     
      ①   新建一個基于Dialog的MFC   AppWizard應用程序ExampleDlg。     
      ②   在CExampleDlgApp   ::InitInstance()中添加如下代碼:     
     

    [cpp] view plaincopy
    1. BOOL   CExampleDlgApp:   :   InitInstance   (   )    
    2.   {    
    3.   …      CExampleDlgDlg   dlg;    
    4.           m_pMainWnd   =   &dlg;    
    5.           //先于DoModal()調用,將對話框設置為藍色背景、紅色文本    
    6.           SetDialogBkColor(RGB(0,0,255),RGB(255,0,0));    
    7.           int   nResponse   =   dlg.DoModal();    
    8.   …}   

     編譯并運行,此時對話框的背景色和文本色已發生了改變。值得注意的是:在調用DoModal()之前必須先調用SetDialogBkColor,且此方法是將改變應用程序中所有的對話框顏色,并不能針對某一個指定的對話框。     
    方法二 :重載OnPaint(),即WM_PAINT消息。有關代碼如下(以上例工程為準):    

     

    [cpp] view plaincopy
    1. void   CExampleDlgDlg::OnPaint()      
    2.   {    
    3.           if  (IsIconic())     
    4.             …    
    5.           else    
    6.          {    
    7.             CRect   rect;    
    8.             CPaintDC   dc(this);    
    9.             GetClientRect(rect);    
    10.             dc.FillSolidRect(rect,RGB(0,255,0));     //設置為綠色背景    
    11.             CDialog::OnPaint();    
    12.          }    
    13.    }  

     

    方法三 :重載OnCtlColor   (CDC*   pDC,   CWnd*   pWnd,   UINT   nCtlColor),即WM_CTLCOLOR消息。具體步驟如下(以上例工程為準):     
      ①在CExampleDlgDlg的頭文件中,添加一個CBrush的成員變量:     
     

    [cpp] view plaincopy
    1. class   CExampleDlgDlg   :   public   CDialog    
    2.   {...    
    3.     protected:    
    4.     CBrush   m_brush;      
    5.     ...    
    6.   };   

      ②在OnInitDialog()函數中添加如下代碼:     
       [cpp] view plaincopy
    1. BOOL   CExampleDlgDlg::OnInitDialog()      
    2.   {    
    3.     ...    
    4.     //   TODO:   Add   extra   initialization   here    
    5.     m_brush.CreateSolidBrush(RGB(0,   255,   0));   //   生成一綠色刷子      
    6.     ...    
    7.   }   

      ③利用ClassWizard重載OnCtlColor(…),即WM_CTLCOLOR消息:     
      [cpp] view plaincopy
    1. HBRUSH   CExampleDlgDlg::OnCtlColor(CDC*   pDC,   CWnd*   pWnd,   UINT   nCtlColor)      
    2.   {    
    3.     /*   
    4.     **   這里不必編寫任何代碼!   
    5.     **下行代碼要注釋掉   
    6.     **   HBRUSH   hbr   =   CDialog::OnCtlColor(pDC,   pWnd,   nCtlColor);   
    7.     */    
    8.     return   m_brush;       //返加綠色刷子    
    9.   }   

    方法四 :還是重載OnCtlColor   (CDC*   pDC,   CWnd*   pWnd,   UINT   nCtlColor),即WM_CTLCOLOR消息。具體步驟如下(以上例工程為準):     
      步驟①、②同上方法三中的步驟①、②。     
      步驟③利用ClassWizard重載OnCtlColor(…)(即WM_CTLCOLOR消息)時則有些不同:     
      [cpp] view plaincopy
    1. HBRUSH   CExampleDlgDlg::OnCtlColor(CDC*   pDC,   CWnd*   pWnd,   UINT   nCtlColor)      
    2.   {    
    3.     HBRUSH   hbr   =   CDialog::OnCtlColor(pDC,   pWnd,   nCtlColor);    
    4.     //在這加一條是否為對話框的判斷語句    
    5.     if(nCtlColor   ==CTLCOLOR_DLG)    
    6.     return   m_brush;       //返加綠色刷子    
    7.     return   hbr;    
    8.   }  

     

    效果圖,在基于上一篇的位圖按鈕 ,看看是否與背景蠻和諧的:

    RFID設備管理軟件

     


    控件顏色:

    對于分布在對話框上的控件,我們可以修改其顏色、其背景顏色,比如對靜態文本、文本編輯框、列表框等等。

    步驟①、②同上方法三中的步驟①、②。
    步驟③:利用ClassWizard重載OnCtlColor(…)(即WM_CTLCOLOR消息)時則有些不同:

    [cpp] view plaincopy
    1. HBRUSH CTestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)  
    2. {  
    3.     HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);  
    4.     if(nCtlColor   ==CTLCOLOR_DLG)      //對話框顏色  
    5.       return   m_brush;       //返加綠色刷子    
    6.     if(nCtlColor==CTLCOLOR_STATIC && pWnd->GetDlgCtrlID()==IDC_STATIC)  //靜態文本顏色,并且指定控件ID號  
    7.     {  
    8.          pDC->SetTextColor(RGB(255,0,0));  
    9.          pDC->SetBkColor(RGB(191,219,255));     //靜態控件的背景顏色設置,這里設置于背景顏色一致,則可以免設置透明  
    10.          //pDC->SetBkMode(TRANSPARENT);    //模式設置透明的話,則忽略靜態控件的背景顏色設置,與對話框顏色融合  
    11.          hbr=(HBRUSH)m_brush;  
    12.     }  
    13.     if(nCtlColor==CTLCOLOR_EDIT)    //文本編輯框顏色  
    14.     {  
    15.         pDC->SetTextColor(RGB(0,0,255));   
    16.         //pDC->SetBkColor(RGB(191,219,255));     //靜態控件的背景顏色設置  
    17.         pDC->SetBkMode(TRANSPARENT);  
    18.         hbr=(HBRUSH)m_brush;  
    19.     }     
    20.     return hbr;  
    21. }  

     

    效果如下:

    RFID設備管理軟件

    對于其中nCtlColor類型,即它的取值:

    CTLCOLOR_DLG   對話框  
    CTLCOLOR_EDIT   編輯框  
    CTLCOLOR_LISTBOX   列表框    
    CTLCOLOR_MSGBOX   消息框  
    CTLCOLOR_SCROLLBAR   滑動條  
    CTLCOLOR_STATIC   靜態文本框、矩形等。

    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全