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

            笑看風(fēng)云淡

            寵辱不驚,看庭前花開花落;去留無意,望天空云卷云舒
            posts - 96, comments - 48, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 ::  :: 聚合  :: 管理

            CImageList用法介紹

            Posted on 2007-11-02 15:33 天之驕子 閱讀(8460) 評(píng)論(0)  編輯 收藏 引用

            圖像列表控制(CImageList)是相同大小圖像的一個(gè)集合,每個(gè)集合中均以0為圖像的索引序號(hào)基數(shù),圖像列表通常由大圖標(biāo)或位圖構(gòu)成,其中包含透明位圖模式。可以利用WINDOWS32位應(yīng)用程序接口函數(shù)API來繪制、建立和刪除圖像,并能實(shí)現(xiàn)增加、刪除、替換和拖動(dòng)圖像等操作。圖像列表控制提供了控制圖像列表的基本方法,這些方法在WINDOWS95及以后版本才能實(shí)現(xiàn)。

             

            (一)圖像控制的對象結(jié)構(gòu)

            1、圖像控制的數(shù)據(jù)成員

            m_hImageList 連接圖像對象的控制句柄

             

            2、圖像控制的建立方法

            CimageList&imageList建立圖像控制對象結(jié)構(gòu)

            Create 初始化圖像列表并綁定對象

            圖像控制的建立方法如下:

             

            BOOL Create( int cx, int cy, UINT nFlags, int nInitial, int nGrow );

            BOOL Create( UINT nBitmapID, int cx, int nGrow, COLORREF crMask );

            BOOL Create( LPCTSTR lpszBitmapID, int cx, int nGrow, COLORREF crMask );

            BOOL Create( CImageList& imagelist1, int nImage1, CImageList& imagelist2,int nImage2,int dx, int dy );

             

            其中各項(xiàng)參數(shù)的含義為:cx定義圖像的寬度,單位為象素;cy定義圖象的高度,單位為象素;nFlags確定建立圖像列表的類型,可以是以下值的組合:ILC_COLOR、ILC_COLOR4(圖像為24色)、ILC_COLOR8(圖像為28色)、ILC_COLOR16(圖像為216色)、ILC_COLOR24、ILC_COLOR32、ILC_COLORDDB和ILC_MASK;nInitial用來確定圖像列表包含的圖像數(shù)量;nGrow用來確定圖像列表可控制的圖像數(shù)量。

             

            NbitmapID 用來確定圖像列表聯(lián)系的位圖標(biāo)志值;crMask表示顏色屏蔽位;

             

            LpszBitmapID 用來確定包含位圖資源的標(biāo)識(shí)串;

             

            imagelist1 指向圖像列表控制對象的一個(gè)指針;nImage1圖像列表1中包含的圖像數(shù)量;imagelist2指向圖像列表控制對象的一個(gè)指針;nImage2圖像列表2中包含的圖像數(shù)量;dx表示以象素為單位的圖像寬度;dy表示以象素為單位的圖像高度。

             

            同樣,圖像控制的建立也包括兩個(gè)步驟,首先建立圖像列表結(jié)構(gòu),然后建立圖像列表控制。

            3、圖像控制的屬性類

            圖像控制的屬性類包括返回m_hImageList.控制句柄GetSafeHandle、取得圖像列表中的圖像數(shù)量GetImageCount、設(shè)置圖像列表的背景顏色SetBkColor、取得圖像列表的背景顏色SetBkColor和取得圖像的有關(guān)信息SetBkColor。

             

            4、圖像控制的操作方法

            圖像控制的操作方法包括將一個(gè)圖像列表綁定到一個(gè)對象上Attach、將對象上的圖像列表解除綁定并返回句柄Detach、刪除一個(gè)圖像列表DeleteImageList、將一個(gè)圖像增加到圖像列表中Add和將一個(gè)圖像從圖像列表中刪除Remove等。

             

            (二)圖像控制的應(yīng)用技巧

            對于圖像控制,同樣不能單獨(dú)使用,必須與列表控制、樹控制和標(biāo)簽控制相互結(jié)合應(yīng)用,下面分別介紹其具體應(yīng)用技巧。

            1、圖像控制在列表控制中的應(yīng)用技巧

            ①設(shè)置圖像控制CListCtrl::SetImageList的調(diào)用格式如下:

            CImageList* SetImageList( CImageList* pImageList, int nImageList );

            其返回值是指向前一個(gè)圖像列表控制的一個(gè)指針,如果不存在前一個(gè)圖像列表則為NULL;其中參數(shù)pImageList是指向圖像列表的標(biāo)識(shí),nImageList是圖像列表的類型,可以是如下值:

            LVSIL_NORMAL 用大圖標(biāo)方式進(jìn)行圖像列表;

            LVSIL_SMALL 用小圖標(biāo)方式進(jìn)行圖像列表;

            LVSIL_STATE 以圖像狀態(tài)進(jìn)行圖像列表;

             

            ②取得圖像控制CListCtrl::GetImageList的調(diào)用格式如下:

            CImageList* GetImageList( int nImageList ) const;

            其返回值為指向圖像列表控制的指針,其中nImageList用來確定取得返回值的圖像列表的值,其取值與設(shè)置圖像列表函數(shù)相同。

             

            ③圖像控制在列表控制中的應(yīng)用示例

            注意:加入位圖時(shí)要設(shè)置圖標(biāo)顯示狀態(tài)為LVSIL_NORMAL,加入icon圖標(biāo)時(shí),如果圖標(biāo)大小為32×32,則也設(shè)置圖標(biāo)顯示狀態(tài)為LVSIL_NORMAL,否則設(shè)置為LVSIL_SMALL。

            CImageList Cil1,Cil2; //定義大小圖標(biāo)像列表

            CVCLISTApp *pApp=(CVCLISTApp *)AfxGetApp();//取得列表控制程序

            Cil1.Create(32,32,TRUE,2,2); //建立32位圖像控制

            Cil1.Add(pApp->LoadIcon(IDI_GJ));//增加選中狀態(tài)圖像

            Cil1.Add(pApp->LoadIcon(IDI_XS));//增加非選中狀態(tài)圖像

            Cil2.Create(16,16,TRUE,2,2); //建立16位圖像控制

            Cil2.Add(pApp->LoadIcon(IDI_GJ));//增加選中狀態(tài)圖像

            Cil2.Add(pApp->LoadIcon(IDI_XS));//增加非選中狀態(tài)圖像

            m_ListCtrl.SetImageList(&Cil1,LVSIL_NORMAL);//設(shè)置大圖標(biāo)控制

            m_ListCtrl.SetImageList(&Cil2,LVSIL_SMALL);//設(shè)置小圖標(biāo)控制

            另外一種加載BMP位圖的方法是:

            CimageList* m_pImageList = new CimageList();

            HBITMAP hBitmap;

            CBitmap* pBitmap;

            strBmpPath = "\\*.bmp";

            hBitmap = (HBITMAP)LoadImage(NULL,(LPCTSTR)strBmpPathDisCnnct,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);

            pBitmap = new CBitmap;

            pBitmap->Attach(hBitmap);  

            m_pImageList->Add(pBitmap,RGB(0,0,0));

            delete pBitmap

            2、圖像控制在樹控制中的應(yīng)用技巧

            ①設(shè)置圖像控制CTreeCtrl::SetImageList的調(diào)用格式如下:

            CImageList* SetImageList( CImageList * pImageList, int nImageListType );

            其返回值為指向前前一個(gè)圖像列表的指針,否則為NULL;參數(shù)pImageList為指向圖像列表的標(biāo)識(shí),如果pImageList為NULL則所有的圖像都將從樹控制中被清除;nImageListType為圖像列表設(shè)置的類型,可以是如下值之一:

            TVSIL_NORMAL 設(shè)置正常圖像列表,其中包括選中和非選中兩種圖標(biāo);

            TVSIL_STATE 設(shè)置圖像列表狀態(tài),指用戶自定義狀態(tài);

             

            ②取得圖像控制CTreeCtrl::GetImageList的調(diào)用格式如下:

            CImageList* GetImageList( UINT nImage );

            如果調(diào)用成功則返回圖像列表控制指針,否則為NULL;nImage為取得返回值的圖像列表類型,其取值和取得圖像列表控制完全相同。

             

            ③圖像控制在樹控制中的應(yīng)用示例

            CImageList Cil1,Cil2;//定義大小圖標(biāo)像列表

            CVCTREEApp *pApp=(CVCTREEApp *)AfxGetApp();//獲取應(yīng)用程序指針

            Cil1.Create(16,16,ILC_COLOR,2,2);//建立圖像控制

            Cil1.Add(pApp->LoadIcon(IDI_PM));//增加選中狀態(tài)圖像

            Cil1.Add(pApp->LoadIcon(IDI_CJ));//增加非選中狀態(tài)圖像

            m_TreeCtrl.SetImageList(&Cil1,TVSIL_NORMAL);//設(shè)置圖像控制列表

            然后在樹控制的結(jié)構(gòu)定義中進(jìn)行如下設(shè)置:

            TCItem.item.iImage=0; //設(shè)置未選中圖像索引號(hào)

            TCItem.item.iSelectedImage=1;//設(shè)置選中時(shí)圖像引號(hào)

             

            3、圖像控制在標(biāo)簽控制中的應(yīng)用技巧

            ①設(shè)置圖像控制CTabCtrl::SetImageList的調(diào)用格式

            CImageList * SetImageList( CImageList * pImageList );

            其返回值為指向前一個(gè)圖像列表的指針,如果不存在前一個(gè)圖像列表則為NULL;pImageList為標(biāo)識(shí)TAB控制的圖像列表指針。

             

            ②取得圖像控制CTabCtrl::GetImageList的調(diào)用格式

            HIMAGELIST GetImageList() const;

            其返回值為指向TAB控制的圖像列表指針,如果調(diào)用不成功則為NULL。

            在MFC中CImageList類封裝了圖像列表控件的功能,圖像列表是一個(gè)具有相同大小的圖像(可以是不同類型)的集合,其主要用于應(yīng)用程序中大

            規(guī)模圖標(biāo)的存儲(chǔ),該控件是不可見的。通常與其它如CListBox,CComboBox,CComboBoxEx以及CTabCtrl一起使用,為他們提供圖標(biāo)資源。

            圖象的每個(gè)集合中均以0為圖象索引基數(shù),可以把這些圖標(biāo)看成是以數(shù)組方式存儲(chǔ)的,圖像列表通常由大圖標(biāo)或位圖構(gòu)成,其中包含位圖模式,

            實(shí)際上,所有的在同一個(gè)圖象列表中的圖標(biāo)都被存儲(chǔ)在一個(gè)屏 
            幕設(shè)備的位圖中。

            2.添加圖像的兩種方法
            通常可以向CImageList對象中添加位圖和圖標(biāo)資源。其資源可以是程序中資源文件中的資源,也可以直接從外部文件調(diào)入。

            (1)從程序中資源文件中添加圖標(biāo)和位圖圖像如下所示(通常這是最為簡單直觀的方法):

             

            // 創(chuàng)建一個(gè)CImageList類的指針變量
            CImageList* pImageList;
            pImageList = new CImageList();
            pImageList->Create(32, 32, ILC_COLOR32, 0, 4);

            // 添加圖標(biāo),圖標(biāo)可以隨圖像列表大小自動(dòng)拉伸
            pImageList->Add(AfxGetApp()->LoadIcon(IDI_ICON1));
            pImageList->Add(AfxGetApp()->LoadIcon(IDI_ICON2));

            // 添加位圖,并使黑色為透明色,如果圖像列表大小和位圖大小不一致可能會(huì)導(dǎo)致天添加失敗
            CBitmap bmp;
            bmp.LoadBitmap(IDB_BITMAP1)
            pImageList->Add(&bmp, RGB(0, 0, 0));
            bmp.DeleteObject();
            bmp.LoadBitmap(IDB_BITMAP2)
            pImageList->Add(&bmp, RGB(0, 0, 0));

             

            (2)從外部文件中添加圖標(biāo)和位圖圖像代碼如下所示(這種方法可以是可執(zhí)行程序更小,便于發(fā)行)

             

            HBITMAP hBitmap;
            CBitmap *pBitmap;
            CString FilePathName = "e:\TIME.bmp";
            pBitmap = new  CBitmap;
            // 從文件導(dǎo)入位圖
            hBitmap = (HBITMAP)LoadImage(AfxGetInstanceHandle(),FilePathName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
            pBitmap->Attach(hBitmap);
            m_pImageList->Add(pBitmap, RGB(0,0,0));

             

            這樣一個(gè)圖像列表控件就創(chuàng)建好了,并且已經(jīng)添加了圖像,接下來就可以在其它控件中使用其中的圖像。通常需要調(diào)用SetImageList(m_pImageList)將當(dāng)前圖像列表設(shè)置為引用圖像源。


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


            奇米影视7777久久精品人人爽 | 久久国产色AV免费观看| 久久免费国产精品一区二区| 国产99久久久国产精品小说| 日产久久强奸免费的看| 久久久久人妻精品一区三寸蜜桃| 久久播电影网| 91久久精一区二区三区大全| 精品多毛少妇人妻AV免费久久| 国产精品欧美久久久天天影视| 久久婷婷五月综合国产尤物app| 色婷婷久久综合中文久久蜜桃av| 亚洲成色www久久网站夜月| 久久天天躁狠狠躁夜夜躁2O2O| 久久亚洲AV成人出白浆无码国产| 久久精品黄AA片一区二区三区| 国产产无码乱码精品久久鸭| 久久亚洲国产中v天仙www| 国产aⅴ激情无码久久| 久久久受www免费人成| 久久电影网2021| 77777亚洲午夜久久多喷| 欧美成a人片免费看久久| 久久国产精品-国产精品| 亚洲av伊人久久综合密臀性色| 亚洲人成无码网站久久99热国产| 久久午夜电影网| 久久精品国产91久久麻豆自制| 亚洲国产精品18久久久久久| 久久久午夜精品福利内容| 久久久久亚洲AV成人网人人网站| 久久99精品久久久久久| 国产欧美久久一区二区| 色综合久久无码五十路人妻| 香蕉久久av一区二区三区| 久久精品免费一区二区| 国产成人无码精品久久久性色| 婷婷久久综合九色综合九七| 日韩十八禁一区二区久久| 欧美亚洲另类久久综合婷婷 | 久久久91人妻无码精品蜜桃HD|