組合框:
自繪組合框(顯示圖標(biāo))
要了解的概念:組合框是由一個(gè)編輯框和列表框組合而成的.
CComboBox類里要了解的函數(shù):
SetItemHeight//設(shè)置列表框項(xiàng),,或編輯框高度,,第一個(gè)參數(shù)為-1表示設(shè)置編輯框高度,0表示列表框項(xiàng),,第二個(gè)參數(shù)是要設(shè)置的高度
SetItemData//為列表框里的項(xiàng)關(guān)聯(lián)一個(gè)DWORD值,,第一個(gè)參數(shù)表示列表框項(xiàng)索引,第二個(gè)參數(shù)指明具體值
GetItemData//只有一個(gè)參數(shù),,列表框項(xiàng)索引,返回該索引關(guān)聯(lián)的值,。
首先像自繪按鈕類一樣,,從控件類中派生出一個(gè)子類(組合框類名:CComboBox),派生的類名為:CNewComboBox然后向工程導(dǎo)入五個(gè)圖標(biāo),ID號(hào)分別為:
IDI_NORMAL1,、IDI_NORMAL2,。。,。IDI_NORMAL5
往CNewComBox類添加一個(gè)函數(shù),,用于設(shè)置圖標(biāo)ID和文本內(nèi)容,如下:
int CNewComboBox::SetItemIcon(UINT nID,LPCTSTR lpszString)//第一個(gè)參數(shù)是圖標(biāo)ID號(hào),,第二個(gè)是文本內(nèi)容
{
int index=AddString(lpszString);
SetItemData(index,nID);
return index;
}
然后添加CNewComBox類的虛函數(shù)DrawItem,DrawItem函數(shù)的代碼如下:
CDC dc;
dc.Attach(lpDrawItemStruct->hDC);//組合框DC
CRect itemRect(lpDrawItemStruct->rcItem);//項(xiàng)區(qū)域
int nSate=lpDrawItemStruct->itemState;//項(xiàng)狀態(tài)
int nIndex=lpDrawItemStruct->itemID;//項(xiàng)索引
if(nIndex!=-1)
{
if(nSate&ODS_SELECTED)//如果選中該項(xiàng)
dc.FillSolidRect(&itemRect,RGB(124,231,169));
else
dc.FillSolidRect(&itemRect,RGB(2,94,193));
UINT uID=GetItemData(nIndex);
POINT pt;
pt.x=itemRect.left;
pt.y=itemRect.top;
dc.DrawIcon(pt,LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(uID)));//畫(huà)圖標(biāo)
itemRect.left+=35;
dc.SetBkMode(TRANSPARENT);
CString str;
GetLBText(nIndex,str);
dc.DrawText(str,itemRect,DT_LEFT|DT_VCENTER|DT_SINGLELINE);//顯示文本
}
dc.Detach();
接著在對(duì)話框編輯區(qū)給對(duì)話框添加一個(gè)組合框控件,,組合框的樣式:類型:下拉列表、所有者繪制:固定,、有字串:勾
并為控件關(guān)聯(lián)一個(gè)控件變量m_NewCom,,類型為CNewComboBox
然后在對(duì)話框初始化函數(shù)OnInitDialog里添加如下代碼:
m_NewCom.SetItemIcon(IDI_NORMAL1,"Kdjfkd");
m_NewCom.SetItemIcon(IDI_NORMAL2,"kjdkfj");
m_NewCom.SetItemIcon(IDI_NORMAL3,"dkjfdj");
m_NewCom.SetItemIcon(IDI_NORMAL4,"kdjfkd");
m_NewCom.SetItemIcon(IDI_NORMAL5,"kdjfkd");
m_NewCom.SetItemHeight(-1,35);
m_NewCom.SetItemHeight(0,35);
最后,記得要包含類頭文件 "NewComboBox.h"
編譯,、運(yùn)行,,效果如下: