MFC static text色を変更

3252 ワード

1.リソースビューを開きます.
2.STATICがあるダイアログボックスをダブルクリックして開きます.
3.STATICのID属性を変更し、ここではIDC_とするTEXT1.
4.CMyDialogと仮定するダイアログにクラスを追加する.
5.ダイアログを選択し、プロパティパネルでメッセージをクリックし、WM_を選択CTLCOLOR.
6.ダイアログ対応クラスのCPPに次のコードが追加されます.
HBURUSH DataSummaryDlg::OnCtlColor(CDC*pDC,CWnd*pWnd,UINT nCtlColor){BRUSH hbr=CDialog::OnCtlColor(pDC,pWnd,nCtlColor);//独自のコードreturnhbrを追加する;}
7.上のコードに修正IDCを追加するTEXTテキストの色のコードは以下の通りです.
HBRUSH DataSummaryDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor){     BRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);     if (pWnd->GetDlgCtrlID() == IDC_NOTE)     {         pDC->SetTextColor(RGB(255, 0, 0));     } return hbr;}
フォントの変更にも同様の方法が適用されます.
多くの人は自分のプログラムのインタフェースがそんなに美しくないと思って、往々にしてVCのデフォルトの発生するダイアログボックスは比較的に単調で、そのため多くの人は往々にして多くの他のコントロールを見つけてダイアログボックスを美化して修飾して、例えば静的なコントロールにフォントを設定して、背景の色を設定しますCTLCOLORメッセージで完了!
WM_CTLCOLORメッセージは、EDIT、STATIC、BUTTONなどのコントロールの背景とフォント色の設定を完了するために使用されます.
1.まず、自分がインタフェースを設定する必要があるダイアログボックスで右クリック-->クラスウィザードの作成-->WM_への参加CTLCOLORメッセージ-->OnCtlColor()関数を自動的に生成します.この関数は、このダイアログボックスのコントロールのインタフェースの外観を修飾します.次のように使用します.クラスウィザードで生成された関数を次のように変更します.
HBRUSH CDialogColor::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
    HBRUSH hbr = CDialog::OnCtlColor(pDC,pWnd, nCtlColor);
    // TODO: Change any attributes of theDC here
    //      
    CFont * cFont=new CFont;
    cFont->CreateFont(16,0,0,0,FW_SEMIBOLD,FALSE,FALSE,0, 
                                          ANSI_CHARSET,OUT_DEFAULT_PRECIS,
                                          CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,
                                          DEFAULT_PITCH&FF_SWISS,"Arial");
    //         
    switch()
    {
       case CTLCOLOR_STATIC: //            
      {
          pDC->SetBkMode(TRANSPARENT); 
          //       
          pDC->SetTextColor(RGB(255,255,0)); //      
          pWnd->SetFont(cFont); //    
          HBRUSH B = CreateSolidBrush(RGB(125,125,255)); 
          //    
          return (HBRUSH) B; //      
      }
      case CTLCOLOR_EDIT: //         
     {
          pDC->SetBkMode(TRANSPARENT); 
          pDC->SetTextColor(RGB(255,255,0)); 
          pWnd->SetFont(cFont); 
          HBRUSH B = CreateSolidBrush(RGB(125,125,255)); 
          return (HBRUSH) B; 
      }
      default:
      return CDialog::OnCtlColor(pDC,pWnd, nCtlColor);
    }
}

注意:caseのカテゴリには、CTLCOLOR_があります.BTNボタンコントロールCTLCOLOR_DLGダイアログCTLCOLOR_EDIT編集ボックスCTLCOLOR_LISTBOXリストボックスCTLCOLOR_MSGBOXメッセージボックスCTLCOLOR_SCROLLBARスクロールバーCTLCOLOR_STATIC静的テキスト2.すべてのコントロールに対して統一的なインタフェース設定を使用するのは自由ではないと思うかもしれませんが、VCも特定のIDのコントロールを設定することができます.方法は以下の通りです.
   switch (pWnd->GetDlgCtrlID()) 
            { 
            //  ID IDC_CTL1、IDC_CTL2 IDC_CTL3          
            case IDC_CTL1:
            case IDC_CTL2:
            case IDC_CTL3: 
            {
            pDC->SetBkMode(TRANSPARENT);
            pDC->SetTextColor(RGB(255,255, 0));
            pWnd->SetFont(cFont);
            HBRUSH B = CreateSolidBrush(RGB(125,125,255));
            return (HBRUSH) B;
            }
            default:
            return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
            }