MFC設定字型及顏色

來源:互聯網
上載者:User

 

設定字型
函數原型:
     BOOL CreateFont( int nHeight, int nWidth, int nEscapement, int nOrientation, int nWeight, BYTE bItalic, BYTE bUnderline, BYTE cStrikeOut, BYTE nCharSet, BYTE nOutPrecision, BYTE nClipPrecision, BYTE nQuality, BYTE nPitchAndFamily, LPCTSTR lpszFacename );

     參數說明:
     nHeight            :字型高度. 三中情況 1、>0:字型的高度值(裝置座標);2、=0:字型採用預設值. 3、<0:此值的絕對值為高度.
     nWidth             :字型寬度.
     nEscapement        :文本行的傾斜度.
     nOrientation       :字元基準的傾斜度.
     nWeight            :字型的粗細.如下:
       .FW_DONTCARE
       .FW_THIN
       .FW_EXTRALIGHT
        .....
     bItalic            :字型是否為斜體
     bUnderline         :字型是否帶底線
     cStrikeOut         :字型是否帶刪除線
     nCharSet           :字型的字元集
       .ANSI_CHARSET
       .DEFAULT_CHARSET
       .SYMBOL_CHARSET.....
     nOutPrecision      :字元的輸出精度
     nClipPrecision     :字元裁剪的精度
     nQuality           :字元的輸出品質
     nPitchAndFamily :字元間距和字型族(低位說明間距,高位說明字元族)
     lpszFacename       :字型名稱
     [程式實現]
     假設你已有了名為My的對話方塊工程.並有一個ID=IDC_EDIT1的Edit控制項.
     class CMyDlg : public CDialog
     {  
     public:
            CFont *m_Font;//最好用指標,我用對象調用好像不起作用,不清楚原因!
     m_Font = new CFont;//結束時記得要delete m_Font;
     ........
     };
     BOOL CTMyDlg::OnInitDialog()
     {
        CDialog::OnInitDialog();

        // TODO: Add extra initialization here
        //CFont m_Font;
        m_Font->CreateFont(-11,0,0,0,100,FALSE,FALSE,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,FF_SWISS,"Arial");
       CEdit *m_Edit=(CEdit *)GetDlgItem(IDC_EDIT1);
        m_Edit->SetFont(m_Font,FALSE);
        return TRUE;     // return TRUE     unless you set the focus to a control
     }
     小小說明:在OnInitDialog()中的//CFont m_Font;前的"//"號去掉,將類聲明中的CFont m_Font;去掉會是什麼結果?請自己試試.
改變Edit字型顏色!
HBRUSH CButtonDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
       HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    
       // TODO: Change any attributes of the DC here
       if(nCtlColor == CTLCOLOR_EDIT)
       {
       if(pWnd->GetDlgCtrlID()== IDC_EDIT1)
           {
               pDC->SetTextColor(RGB(255,255,0));
               pDC->SetBkColor(RGB(251, 247, 200));
               pDC->SetBkMode(TRANSPARENT);
               return (HBRUSH) m_brush.GetSafeHandle();
           }
       }

       // TODO: Return a different brush if the default is not desired
       return hbr;
}

CBrush      m_brushedit;   
     m_brushedit.CreateSolidBrush      (RGB      (      255,      255,      0      )      );   
    
     在Dlg::OnCtlColor函數中加入:   
     if(nCtlColor      ==      CTLCOLOR_EDIT){   
     pDC->SetTextColor(RGB(255,0,0));          //文字顏色   
     pDC->SetBkColor(RGB(255,255,200));      //文字背景顏色   
     return      (HBRUSH)m_brushedit.GetSafeHandle()      ;        //edit框的顏色   
     }   

改變對話方塊背景

CBitmap m_BkGndBmp;
m_BkGndBmp.LoadBitmap(IDB_BITMAP1);

BOOL CButtonDlg::OnEraseBkgnd(CDC* pDC)
{
CRect rcClient;
GetClientRect(&rcClient);
BITMAP bm;
m_BkGndBmp.GetBitmap(&bm);
CDC memDC;
memDC.CreateCompatibleDC(pDC);
CBitmap *pOldBmp = memDC.SelectObject(&m_BkGndBmp);
pDC->StretchBlt(0,0,rcClient.Width(),rcClient.Height(),&memDC,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
memDC.SelectObject(pOldBmp);
memDC.DeleteDC();
return TRUE;

// return CDialog::OnEraseBkgnd(pDC);
}

在一個mfc應用程式中,要改變控制項的背景色可通過重載onctlcolor()函數來實現。方法是在該函數中設定所需顏色後再返回一個畫刷控制代碼便可重繪控制項背景色。onctlcolor()函數對於控制項背景色的處理是通過捕捉相應的控制項訊息來實現的。常用的此類訊息有:

ctlcolor_dlg 對話方塊

ctlcolor_edit 編輯框

ctlcolor_listbox 列表框

ctlcolor_msgbox 訊息框

ctlcolor_scrollbar 滑動條

ctlcolor_static 靜態文字框、矩形等。

以下範例程式碼說明如何更改以上控制項的背景色:

afx_msg hbrush onctlcolor(cdc* pdc, cwnd* pwnd, uint nctlcolor); //重載方法原形聲明 *.h
afx_msg BOOL OnEraseBkgnd(CDC* pDC);//對話方塊背景
......
BEGIN_MESSAGE_MAP(CButtonDlg, CDialog)

ON_WM_CTLCOLOR() //建立訊息映射 *.cpp
ON_WM_ERASEBKGND() //設定對話方塊圖片背景

END_MESSAGE_MAP()

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.