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;
发布评论