• <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   管理


            亚洲中文字幕无码久久2017| 久久综合精品国产一区二区三区| 久久国产乱子伦精品免费午夜| 色欲久久久天天天综合网| 久久久久久久免费视频| 人妻丰满?V无码久久不卡| 欧美日韩成人精品久久久免费看| 99久久综合国产精品免费| 久久久国产亚洲精品| 欧美精品乱码99久久蜜桃| 思思久久精品在热线热| 久久精品国产精品亚洲精品| 久久免费国产精品| 伊人久久综合无码成人网| 亚洲国产一成人久久精品| 99久久精品日本一区二区免费| 青青草原精品99久久精品66| 久久久无码精品亚洲日韩蜜臀浪潮| 国产Av激情久久无码天堂| 久久涩综合| 97久久国产露脸精品国产| 99久久99这里只有免费费精品| 亚洲午夜精品久久久久久人妖| 日本久久久久久久久久| 亚洲va久久久噜噜噜久久狠狠 | 欧美黑人又粗又大久久久| 国产精品禁18久久久夂久| 国产精品美女久久久久av爽| 无码任你躁久久久久久老妇| 久久精品无码一区二区无码 | 久久www免费人成看片| 国产精品美女久久久久网| 久久影院午夜理论片无码| 日产精品久久久久久久性色| 国产成人久久777777| 伊人久久综合成人网| 91精品国产91久久| 久久精品亚洲中文字幕无码麻豆| 精品国产91久久久久久久a| 久久亚洲AV成人无码国产 | 国产精品乱码久久久久久软件|