2024年4月11日发(作者:)

列表框控件简单应用

重复性的过程我就不详细讲明了,只给出类里面函数的解释。

int CListBox::AddString( LPCTSTR lpszItem );//添加一个项,lpszItem是项文本内容

int CListBox::InsertString( int nIndex, LPCTSTR lpszItem );//同上,只不过这个可

以指定项位置(索引),由参数nIndex指定

int CListBox::GetCurSel( ) const;//获取当前选中项的索引,函数返回索引值

int CListBox::GetText( int nIndex,CString &rString ) const;//根据索引获得项文本

int CListBox::GetCount( ) const;//获取项数量

void CListBox::ResetContent( );//删除列表框所有的项

int CListBox::DeleteString( UINT nIndex );//根据项索引从列表框删除一个项

int CListBox::SetItemHeight( int nIndex, UINT cyItemHeight );//设置一个项的高度,

注意:列表框具有

//LBS_OWNERDRAWVARIABLE风格才可以单独设置一个项的高度,否则是所有项的高度

自绘列表框

这里自绘要达到的效果,就是简单模仿一下QQ界面里类似列表框控件的那种效果,先往对

话框里添加列表框控件.

然后再改一下列表框的属性,所有者绘制项选择固定,有字符串前面打上勾.

接着准备两张位图,一张用于列表框的背景,一张用于项选中时的背景,ID号分别为:IDB_BK、

IDB_SELECTED

如下两张位图:

再导入五张位图(QQ头像),ID号保持默认不变。

从CListBox派生出子类CNewListBox,往CNewListBox添加一个函数,用于画位图,函数

如下:

void CNewListBox::DrawBK(CDC *pDC, CRect rect, UINT uIDBK)

{

CDC memDC;

CompatibleDC(pDC);//兼容DC

CBitmap bmp;

tmap(uIDBK);//加载位图

BITMAP bmpInfo;

map(&bmpInfo);//获取位图信息

Object(&bmp);//选入位图

pDC->StretchBlt(,,(),(),&memDC,

0,0,h,ht,SRCCOPY);

Object();

DC();

}

然后给CNewListBox添加WM_ERASEBKGND消息处理函数,这个消息是系统擦除背景时产生。

我们就在这个函数里画背景位图,函数代码如下:

BOOL CNewListBox::OnEraseBkgnd(CDC* pDC)

{

// TODO: Add your message handler code here and/or call default

CRect rect;