• <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>
            posts - 131, comments - 12, trackbacks - 0, articles - 0
              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            MFC中有許多控件,將控件拖到窗口中右鍵鼠標(biāo),點(diǎn)擊屬性,到樣式標(biāo)簽頁(yè)中會(huì)有很多樣式可以選擇

            但是往往這些樣式會(huì)滿足不了我們的需求,這時(shí)候,我們需要自己來(lái)完成我們想要的樣式控件

            我們就來(lái)拿ListBox為例子,因?yàn)槲野l(fā)現(xiàn)ListBox的樣式擴(kuò)展的需求量是最大的

            (1)在Dialog中拖入ListBox控件

            (2)在類視圖添加一個(gè)該控件的子類

            (3)然后按Ctrl+W在類向?qū)е薪o你的控件加一個(gè)CColorListBox的變量

            (4)可以開(kāi)始為你的CColorListBox添加樣式了

            1. int CColorListBox::AddMsg(CString lpszItem, DWORD info)  
            2. {  
            3.     int nItem = AddString(lpszItem);  
            4.     if (nItem >= 0)  
            5.         SetItemData(nItem,info);  
            6.     int numList = GetCount()-1;  
            7.     SetTopIndex(numList);  
            8.     SetCurSel(numList);  
            9.     //水平滾動(dòng)  
            10.     int max_width=0;  
            11.     CSize sz;  
            12.     CClientDC dc(this);  
            13.     for(int i=0;i<GetCount();i++)  
            14.     {  
            15.         GetText(i,lpszItem);  
            16.         sz=dc.GetTextExtent(lpszItem);  
            17.         if(max_width<sz.cx)  
            18.             max_width=sz.cx;  
            19.     }  
            20.     SendMessage(LB_SETHORIZONTALEXTENT,max_width,0);  
            21.   
            22.     return nItem;  
            23. }  
            1. void CColorListBox::DrawItem(LPDRAWITEMSTRUCT lpDIS)   
            2. {  
            3.     // TODO: Add your code to draw the specified item  
            4.     if ((int)lpDIS->itemID < 0)  
            5.         return;   
            6.   
            7.     CDC *pDC = CDC::FromHandle(lpDIS->hDC);  
            8.   
            9.     COLORREF crText;  
            10.     CString sText;  
            11.     COLORREF crNorm;  
            12.     HICON icon;  
            13.     switch (lpDIS->itemData)  
            14.     {  
            15.         case M_OK:  
            16.             crNorm = #00ff00;  
            17.             icon = AfxGetApp()->LoadIcon(IDI_ICON_OK);  
            18.             break;  
            19.         case M_ERROR:  
            20.             crNorm=#ff0000;  
            21.             icon = AfxGetApp()->LoadIcon(IDI_ICON_ERROR);  
            22.             break;  
            23.         case M_WARING:  
            24.             crNorm=#0000ff;  
            25.             icon = AfxGetApp()->LoadIcon(IDI_ICON_WARING);  
            26.             break;  
            27.         case M_USER:  
            28.             crNorm=#00ff00;  
            29.             icon = AfxGetApp()->LoadIcon(IDI_ICON_USER);  
            30.             break;  
            31.         case M_USER_:  
            32.             crNorm=#000000;  
            33.             icon = AfxGetApp()->LoadIcon(IDI_ICON_USER_);  
            34.             break;  
            35.     }  
            36.   
            37.   
            38.     // 字符串顏色  
            39.     COLORREF crHilite = RGB(255-GetRValue(crNorm), 255-GetGValue(crNorm), 255-GetBValue(crNorm));  
            40.     CRect rectBK(lpDIS->rcItem.left+22,lpDIS->rcItem.top,lpDIS->rcItem.right+18,lpDIS->rcItem.bottom);  
            41.   
            42.   
            43.     // 如果被選中,使用高亮色會(huì)矩形  
            44.     if ((lpDIS->itemState & ODS_SELECTED) &&  
            45.          (lpDIS->itemAction & (ODA_SELECT | ODA_DRAWENTIRE)))  
            46.     {  
            47.         CBrush brush(crNorm);  
            48.         pDC->FillRect(rectBK, &brush);  
            49.     }  
            50.   
            51.     // 如果取消選中,恢復(fù)  
            52.     if (!(lpDIS->itemState & ODS_SELECTED) &&    (lpDIS->itemAction & ODA_SELECT))  
            53.     {  
            54.         CBrush brush(::GetSysColor(COLOR_WINDOW));  
            55.         pDC->FillRect(rectBK, &brush);  
            56.     }         
            57.   
            58.     // 繪制焦點(diǎn)矩形  
            59.     if ((lpDIS->itemAction & ODA_FOCUS) && (lpDIS->itemState & ODS_FOCUS))  
            60.         pDC->DrawFocusRect(&lpDIS->rcItem);   
            61.   
            62.     // 取消焦點(diǎn)矩形  
            63.     if ((lpDIS->itemAction & ODA_FOCUS) &&   !(lpDIS->itemState & ODS_FOCUS))  
            64.         pDC->DrawFocusRect(&lpDIS->rcItem);   
            65.   
            66.   
            67.     // 透明背景  
            68.     int nBkMode = pDC->SetBkMode(TRANSPARENT);  
            69.   
            70.       
            71.     if (lpDIS->itemData)       
            72.     {  
            73.         if (lpDIS->itemState & ODS_SELECTED)  
            74.             crText = pDC->SetTextColor(crHilite);  
            75.         else if (lpDIS->itemState & ODS_DISABLED)  
            76.             crText = pDC->SetTextColor(::GetSysColor(COLOR_GRAYTEXT));  
            77.         else  
            78.             crText = pDC->SetTextColor(crNorm);  
            79.     }  
            80.       
            81.     else  
            82.     {  
            83.         if (lpDIS->itemState & ODS_SELECTED)  
            84.             crText = pDC->SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));  
            85.         else if (lpDIS->itemState & ODS_DISABLED)  
            86.             crText = pDC->SetTextColor(::GetSysColor(COLOR_GRAYTEXT));  
            87.         else  
            88.             crText = pDC->SetTextColor(::GetSysColor(COLOR_WINDOWTEXT));  
            89.     }  
            90.   
            91.   
            92.     // 顯示字符串  
            93.     GetText(lpDIS->itemID, sText);  
            94.     CRect rect = lpDIS->rcItem;  
            95.   
            96.     // 字符格式  
            97.     UINT nFormat = DT_LEFT | DT_SINGLELINE | DT_VCENTER;  
            98.     if (GetStyle() & LBS_USETABSTOPS)  
            99.         nFormat |= DT_EXPANDTABS;  
            100.       
            101.   
            102.     pDC->DrawText(sText, -1, &rectBK, nFormat | DT_CALCRECT&DT_CENTER);  
            103.     pDC->DrawText(sText, -1, &rectBK, nFormat);  
            104.     DrawIconEx(lpDIS->hDC,rect.left+2,rect.top+1,icon,16,16,0,NULL, DI_NORMAL | DI_COMPAT);  
            105.   
            106.     pDC->SetTextColor(crText);   
            107.     pDC->SetBkMode(nBkMode);   
            108. }  

            關(guān)于改變成什么樣子的,就要好好運(yùn)用windows編程里面的知識(shí)了

            (5)最重要的一點(diǎn):右鍵控件點(diǎn)開(kāi)屬性中的樣式(Styles)將所有者下拉框改成可變的(variable)把有字符串(has strings)勾上
            最終的效果是:

            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            国产精品亚洲综合久久| 精品久久777| 久久精品无码一区二区日韩AV | 青青热久久综合网伊人| 色综合久久精品中文字幕首页| 无码人妻精品一区二区三区久久| 久久久久国产精品熟女影院| 色综合久久中文色婷婷| 国产精品久久久久…| 中文成人无码精品久久久不卡 | 国产精品久久久香蕉| 伊人久久大香线蕉综合5g| 少妇久久久久久被弄到高潮| 日日噜噜夜夜狠狠久久丁香五月 | 青青青国产成人久久111网站| 国产亚洲色婷婷久久99精品| 久久久久国产成人精品亚洲午夜| 国产激情久久久久影院| 久久午夜无码鲁丝片| 97久久精品午夜一区二区| 国产福利电影一区二区三区,免费久久久久久久精 | 婷婷久久综合九色综合绿巨人| 久久久久久国产a免费观看黄色大片| 久久精品国产精品青草| 久久精品免费大片国产大片| 久久久国产99久久国产一| 久久精品国产久精国产思思| 91精品国产91久久久久久蜜臀 | www.久久热.com| 久久久久国产一级毛片高清板| 国内精品久久久久影院老司| 乱亲女H秽乱长久久久| 国产综合成人久久大片91| 国产精品天天影视久久综合网| 国产99久久九九精品无码| 久久综合久久自在自线精品自| 国产成人无码精品久久久久免费| 狠狠色丁香久久婷婷综合| 亚洲精品乱码久久久久久按摩| 久久天堂电影网| 久久久久久国产精品无码超碰|