• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            C++樂園

            C/C++ 交流

              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              12 隨筆 :: 18 文章 :: 14 評論 :: 0 Trackbacks


            動態(tài)改變Dialog中IDC_STATIC的文字:
            SetDlgItemText(IDC_STATIC,"ABC");

            動態(tài)改變Dialog中IDC_STATIC文字的顏色:
            重載OnCtlColor函數(shù),在要更改顏色的時候向?qū)υ捒虬l(fā)送WM_CTLCOLOR就行了。


            1.在對話框的類中加入成員:

            CBrush m_brush;
            COLORREF m_color;

            2.在OnInitDialog()中,加入

            m_brush.CreateSolidBrush(RGB(255,255,255));
            //此處設(shè)置的RGB值可以改變控件的背景色。

            m_color=RGB(0,0,0)
            //此處設(shè)置控件的文字初始顏色。

            3.響應WM_ONCTLCOLOR消息,重載OnCtlColor()函數(shù),加入:
            if(nCtlColor== CTLCOLOR_STATIC){
            pDC->SetBkMode(TRANSPARENT);
            pDC->SetTextColor(m_color);
            return (HBRUSH)m_brush.GetSafeHandle();
            }

            4.需要改變顏色時
            m_color=RGB(128,0,255);//此處改變字體的顏色
            CStatic* m_pStatic1=(CStatic*)GetDlgItem(IDC_STATIC1);
            m_pStatic1->RedrawWindow();

             


            關(guān)于控件背景和字體顏色設(shè)置的疑惑,只要70分,一問題35分
            qiangv (說完就走)      2005-03-05 20:15:15 在 VC/MFC / 界面 提問如一個dialog中有一button,一edit控件  
               
               1。把dialog畫出來是發(fā)生在initinstance之后么,每個控件都是一個窗口  
               他們的回調(diào)函數(shù)都是AfxWinPro()  
               有一個函數(shù)OnCtlColor是響應畫出來這個消息的么?能不能把發(fā)生的流程說出來。  
               
               
               2。還有改變button按鈕的背景色和前景色為什么要新建一個類,而不能在onctlcolor中改變呢  
               ownerdraw是什么意思,什么時候發(fā)生呢?

            問題點數(shù):70、回復次數(shù):3

            1、OnCtlColor是響應WM_CTLCOLOR消息的函數(shù)。當子控件將要被繪制的時候,就會發(fā)送一個WM_CTLCOLOR消息給它的父窗口(通常是對話框),父窗口準備正確的顏色來繪制子窗口。在一個對話框中,每一個控件的繪制都會發(fā)送這個消息,也就是說這個OnCtlColor函數(shù)會被調(diào)用多次。OnCtlColor是一個虛函數(shù),在沒有被覆蓋之前,直接調(diào)用父類的OnCtlColor函數(shù),返回一個畫刷句柄,并用這個返回的畫刷句柄去繪制這個控件。因此,我們可以在這個函數(shù)中來設(shè)置控件的背景和控件上文字的顏色、文字字體及文字的背景色,但是對于Button控件,卻不能直接來改變背景顏色。  
               2、Button是一種自繪制控件,在自繪制之前就會調(diào)用一個虛函數(shù)CButton;;DrawItem(),因此,要想改變Button的背景及字體,就要定義一個Button類從CButton派生出來,并且覆蓋DrawItem(),則當要繪制這個按鈕的時候,框架就會調(diào)用這個函數(shù)。來改變Button的背景顏色和字體,此外,還要設(shè)置控件的ownerdraw屬性.

            MSDN上有查過...有一點不明白  
               所謂自繪是不是它有自己的ondraw函數(shù)?  
               它的WM_CTLCOLOR消息不是一樣送到和別的控件一樣的回調(diào)函數(shù)里去么?  
               它也繼承了CWND  
               應該也有OnCtlColor函數(shù)的呀

            1.還有改變button按鈕的背景色和前景色為什么要新建一個類,而不能在onctlcolor中改變呢  
               ownerdraw是什么意思,什么時候發(fā)生呢?  
               因為在他上面貼了一層用于顯示標題或貼圖.  

             

            要改變對話框的一般顏色,可以在C***App的InitInstance函數(shù)里加入如下代碼:SetDialogBkColor(RGB(0,255,255),RGB(255,0,0));//背景青藍、文字紅色
            但是這樣不能改變對話框中的圖形控件的顏色;
            每個控件在dialog中都是一個窗口,當要繪制控件時,會發(fā)出一個WM_CTLCOLOR消息給它的父窗口(對話框本身).消息映射及響應函數(shù)如下:
            ON_WM_CRLCOLOR()   //反映WM_CTLCOLOR消息

            afx_msg HBRUSH CWnd::OnCrlColor(CDC* pDC,CWnd* pWnd,UINT nCtlColor);

            //

            nCtlColor類型:

            CTLCOLOR_DLG對話框本身,不含有所有的控件

            CTLCOLOR_STATIC 所有包含static text控件的設(shè)置(也包括無效的edit box、combo box的eidt box)

            CTLCOLOR_EDIT      edit box與combo box的eidt box部分

            CTLCOLOR_LIST      list box與combo box的edit box部分

            CTLCOLOR_SCROLLBAR   Scroll bar的空白區(qū)

            我們也可以單獨改變某一個控件的顏色.OnCtrlColor函數(shù)的pWnd成員變量是各控件的窗口指針,以pWnd->GetDlgCtrlID()可以獲得調(diào)用此函數(shù)的控件ID,將它與已知ID比較,就可以改變這個控件的顏色。

            if(pWnd->GetDlgCtrlID() ==IDC_CONTROL)//為控件的ID

            {

            //pDC->SetBkColor(RGB(255, 0, 0)); -----------在這里也用上了這種寫法。不行的,

            }

            另外一個作法是比較pWnd;例如:如果一個edit box控件的成員變量m_edit1被聲明為CEdit類,那么把m_edit1.m_hWnd與pWnd->m_hWnd比較,也可以知道是哪個控件.

            下面是一個例子:

            HBRUSH CDIALOGDlg::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)

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

            if(nCtlColor== CTLCOLOR_LISTBOX)

                 {
            HBRUSH m_hbrush;
            m_hbrush=CreateSolidBrush(RGB(0,0,0));

                     pDC->SetBkMode(TRANSPARENT);

                             //設(shè)置字體顏色

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

                     return m_hbrush;

                 }

                 CBrush m_cBrush;

                 m_cBrush.CreateSolidBrush(RGB(0,255,255));

                 switch(nCtlColor)

                 {

                 case CTLCOLOR_DLG:

                     pDC->SetBkMode(TRANSPARENT);

                     break;

                 case CTLCOLOR_STATIC:

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

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

                     break;

                 }

                 DeleteObject(m_cBrush);

                 // TODO: Return a different brush if the default is not desired

                 return hbr;
             

            posted on 2008-09-18 13:27 小不懂^_^ 閱讀(7252) 評論(0)  編輯 收藏 引用
            久久九九久精品国产免费直播| 狠狠色丁香久久婷婷综合蜜芽五月| 国产精品久久久久蜜芽| 久久久SS麻豆欧美国产日韩| 精品久久久久久无码专区| 91久久精品91久久性色| 一级做a爰片久久毛片看看| 亚洲国产成人久久综合碰碰动漫3d| 精品久久久久中文字| 久久不见久久见免费视频7| 精品国产日韩久久亚洲| 久久久久亚洲Av无码专| 久久久WWW成人| 2021久久国自产拍精品| 亚洲国产成人久久笫一页| 国内精品久久久久影院日本| 久久国产精品视频| 久久ww精品w免费人成| 久久人人爽人人爽人人片AV高清 | 免费观看久久精彩视频| 久久久久成人精品无码中文字幕| 国产免费久久精品丫丫| 国产精品成人99久久久久| 无码人妻少妇久久中文字幕蜜桃 | 日韩欧美亚洲国产精品字幕久久久 | 国产成人香蕉久久久久| 久久久久人妻精品一区 | 久久天天躁夜夜躁狠狠躁2022| 久久免费线看线看| 久久精品免费观看| 国产—久久香蕉国产线看观看| 久久综合给合久久狠狠狠97色69| 少妇高潮惨叫久久久久久| 色综合久久久久综合99| 久久综合久久性久99毛片| 亚洲国产美女精品久久久久∴| 亚洲国产小视频精品久久久三级 | 免费无码国产欧美久久18| 综合久久给合久久狠狠狠97色| 午夜精品久久久内射近拍高清| 久久综合一区二区无码|