• <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)勾上
            最終的效果是:
            日产精品久久久久久久| 色偷偷91久久综合噜噜噜噜| av色综合久久天堂av色综合在| 一本久久a久久精品vr综合| 久久精品天天中文字幕人妻| 久久久精品午夜免费不卡| 无码任你躁久久久久久| 亚洲香蕉网久久综合影视 | 久久九九精品99国产精品| 久久香蕉综合色一综合色88| 久久中文字幕精品| 99久久精品国产一区二区蜜芽| 综合久久给合久久狠狠狠97色 | 久久乐国产精品亚洲综合| 99久久夜色精品国产网站 | www久久久天天com| yy6080久久| 久久久受www免费人成| 青青草国产精品久久久久| 中文精品久久久久人妻不卡| 99久久www免费人成精品 | 亚洲va中文字幕无码久久不卡| 99久久夜色精品国产网站| 久久99精品国产麻豆| 偷窥少妇久久久久久久久| 久久免费视频6| 久久久久久毛片免费看| 91久久精品国产免费直播| 久久99国产亚洲高清观看首页| 无码超乳爆乳中文字幕久久 | 国产午夜福利精品久久| 久久国产精品77777| 久久精品国产亚洲AV无码麻豆 | 香蕉aa三级久久毛片| 久久久精品波多野结衣| 久久夜色精品国产| 久久久久国产一级毛片高清板| 国产精品美女久久久久网| 精品999久久久久久中文字幕| 精品久久久久香蕉网| 久久最近最新中文字幕大全|