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

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

  • <strong id="5koa6"></strong>
  • 改變對話框的背景色

    發表于:2007-07-14來源:作者:點擊數: 標簽:
    黃基前(廣西桂林) ---- 筆者曾在《軟件報》2000年第5期中討論過如何改變控件的顏色,但還有 相當一部分的讀者來信提問:一個基于對話框的MFC AppWizard應用程序中,如 何改變對話框的背景顏色呢?對于這個問題,其實可以由幾種不同的方法來實 現,具體如下(
    黃基前(廣西桂林)

    ---- 筆者曾在《軟件報》2000年第5期中討論過如何改變控件的顏色,但還有
    相當一部分的讀者來信提問:一個基于對話框的MFC AppWizard應用程序中,如
    何改變對話框的背景顏色呢?對于這個問題,其實可以由幾種不同的方法來實
    現,具體如下(粗斜體代碼為增添的):

    ---- 方法一:調用CWinApp類的成員函數SetDialogBkColor來實現。

    ---- 其中函數的第一個參數指定了背景顏色,第二個參數指定了文本顏色。
    下面的例子是將應用程序對話框設置為藍色背景和紅色文本,步驟如下:

    ---- ① 新建一個基于Dialog的MFC AppWizard應用程序ExampleDlg。

    ---- ② 在CExampleDlgApp ::InitInstance()中添加如下代碼:

    BOOL CExampleDlgApp: : InitInstance ( )
    {

    CExampleDlgDlg dlg;
    m_pMainWnd = &dlg;

    //先于DoModal()調用,將對話框設置為藍色背景、紅色文本
    SetDialogBkColor(RGB(0,0,255),RGB(255,0,0));
    int nResponse = dlg.DoModal();

    }

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

    void CExampleDlgDlg::OnPaint()
    {
    if (IsIconic())

    else
    {
    CRect rect;
    CPaintDC dc(this);
    GetClientRect(rect);
    dc.FillSolidRect(rect,RGB(0,255,0)); //設置為綠色背景

    CDialog::OnPaint();
    }


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

    class CExampleDlgDlg : public CDialog
    {
    ...
    protected:
    CBrush m_brush;
    ...
    };


    ---- ②在OnInitDialog()函數中添加如下代碼:
    BOOL CExampleDlgDlg::OnInitDialog()
    {
    ...
    // TODO: Add extra initialization here
    m_brush.CreateSolidBrush(RGB(0, 255, 0)); // 生成一綠色刷子
    ...
    }

    ---- ③利用ClassWizard重載OnCtlColor(…),即WM_CTLCOLOR消息:
    HBRUSH CExampleDlgDlg::OnCtlColor
    (CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    {
    /*
    ** 這里不必編寫任何代碼!
    **下行代碼要注釋掉
    ** HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    */

    return m_brush; //返加綠色刷子
    }


    ---- 方法四:還是重載OnCtlColor (CDC* pDC, CWnd* pWnd, UINT nCtlColor),
    即WM_CTLCOLOR消息。具體步驟如下(以上例工程為準):
    ---- 步驟①、②同上方法三中的步驟①、②。

    ---- 步驟③利用ClassWizard重載OnCtlColor(…)(即WM_CTLCOLOR消息)時則有
    些不同:

    HBRUSH CExampleDlgDlg::OnCtlColor
    (CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    {
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

    //在這加一條是否為對話框的判斷語句
    if(nCtlColor ==CTLCOLOR_DLG)
    return m_brush; //返加綠色刷子
    return hbr;
    }

    ---- 編譯并運行即可。
    ---- 關于如何改變對話框背景顏色的問題,可能還有很多種不同方法可以實現,
    筆者在這僅舉出四種常見的方法。其中方法三的編程似乎有點不太規范,方法四則
    要比方法三正統些,筆者這樣的對比舉例是為了拓寬VC編程愛好者特別是初學者的
    編程思路,讀者可以根據實際情況選用其中的一種。如果再結合《軟件報》2000年第
    5期中改變對話框上的控件顏色,相信會使您的MFC應用程序"增色"不少。

    原文轉自: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>