• <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++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            MFC中有許多控件,將控件拖到窗口中右鍵鼠標,點擊屬性,到樣式標簽頁中會有很多樣式可以選擇

            但是往往這些樣式會滿足不了我們的需求,這時候,我們需要自己來完成我們想要的樣式控件

            我們就來拿ListBox為例子,因為我發現ListBox的樣式擴展的需求量是最大的

            (1)在Dialog中拖入ListBox控件

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

            (3)然后按Ctrl+W在類向導中給你的控件加一個CColorListBox的變量

            (4)可以開始為你的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.     //水平滾動  
            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.     // 如果被選中,使用高亮色會矩形  
            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.     // 如果取消選中,恢復  
            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.     // 繪制焦點矩形  
            59.     if ((lpDIS->itemAction & ODA_FOCUS) && (lpDIS->itemState & ODS_FOCUS))  
            60.         pDC->DrawFocusRect(&lpDIS->rcItem);   
            61.   
            62.     // 取消焦點矩形  
            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. }  

            關于改變成什么樣子的,就要好好運用windows編程里面的知識了

            (5)最重要的一點:右鍵控件點開屬性中的樣式(Styles)將所有者下拉框改成可變的(variable)把有字符串(has strings)勾上
            最終的效果是:
            97久久精品国产精品青草| 91精品久久久久久无码| 久久久这里只有精品加勒比| 久久人人爽人人人人片av| 精品无码久久久久国产| 亚洲国产成人久久精品动漫| 久久精品国产亚洲av麻豆图片 | 国产精品天天影视久久综合网| 国产午夜久久影院| 伊人久久一区二区三区无码| 国产精品一区二区久久国产| 久久午夜无码鲁丝片午夜精品| 久久人人爽人人爽人人AV东京热 | 亚洲国产精品一区二区三区久久 | 人人狠狠综合久久亚洲| 久久久老熟女一区二区三区| 久久亚洲精品无码播放| 久久久久亚洲AV成人片| 久久久久久久女国产乱让韩| 久久久久亚洲精品中文字幕| 69国产成人综合久久精品| 亚洲伊人久久精品影院| 久久亚洲中文字幕精品一区四| 久久久噜噜噜久久中文字幕色伊伊| 香蕉久久一区二区不卡无毒影院| 久久夜色精品国产噜噜噜亚洲AV | 伊人久久精品无码二区麻豆| 性高湖久久久久久久久AAAAA| 亚洲成人精品久久| 久久精品成人免费网站| 亚洲国产精品无码久久久蜜芽| 国产精品亚洲美女久久久| 国产美女久久久| 国产精品久久久久久| 美女写真久久影院| 国产成人精品久久一区二区三区av | 亚洲精品无码久久久影院相关影片| 午夜视频久久久久一区 | 久久综合九色综合欧美狠狠| 99久久99这里只有免费的精品| 午夜精品久久久久久久|