列表框是CListBox类的对象,组合框是CComboBox的对象,滚动条是 CScrollBar 类的对象3、。
1、组合框
组合框(Combo Box)新建后可以修改里面的内容,需要把属性中的Type项改为Drop List即不能修改。
在组合框(Combo Box)的属性窗口有一个“ Data ”属性,这是在设计阶段输入选项的地方,输入每一项都需要用分号分隔。
CBN_EDITCHANGE :组合框的编辑框中文本改变时发出。
CBN_SELECTCHANGE :组合框的列表框中的选项改变时发送。
常用成员函数:
接口 | 功能 |
CComboBox::AddString(TEXT("test")) | 组合框添加一个字符串 |
CComboBox::SetCurSel(0) | 设置当前选择项(当前显示第几项),下标从0开始 |
CComboBox::GetCurSel | 获取组合框中当前选中项的下标 |
CComboBox::GetLBText(1,CString str) | 获取指定位置的内容 |
CComboBox::DeleteString(3) | 删除指定位置的字符串 |
CComboBox::InsertString(1,TEXT("test")) | 在指定位置插入字符串 |
2、列表框
列表框(List Control)中的属性中有个View可以修改显示效果,例如Report(报表方式)。
常用成员函数:
接口 | 功能 |
CListCtrl::SetExtendedStyle | 设置列表风格 |
CListCtrl::GetExtendedStyle | 获取列表风格 |
CListCtrl::InsertColumn | 插入某列内容,主要用于设置标题 |
CListCtrl::InsertItem | 在某行插入新项内容 |
CListCtrl::SetItemText | 设置某行某列的子项内容 |
CListCtrl::GetItemText | 获取某行某列的内容 |
3、滚动条
滚动条有水平和垂直两种。
常用成员函数有:
//设置最大值和最小值,当 bRedraw 为 TRUE 时重画滚动条
void SetScrollRange(int nMinPos , int nMaxPos , BOOL bRedraw = TRUE);
//设置滑块的位置,当 bRedraw 为 TRUE 时重画滚动条
int SetScrollPos( int nPos , BOOL bRedraw = TRUE );
当用户在滚动条上进行操作时,滚动条接收不到任何消息。但是对话框却能接收到 WM_HSCROLL (水平滚动条)或 WM_VSCROLL (垂直滚动条)消息,也就是说,程序对滚动条的操作只能在 OnHScroll() 或 OnVScroll() 中编写代码。
滚动条处理 WM_Hscroll 消息的函数为:
void CTESTDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: Add your message handler code here and/or call default
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}
在对话框的属性面板中查找WM_HSCROLL命令,并添加响应函数。
做如图选择,点击“<Add>”就把OnHScroll函数添加进去。
响应函数参数说明 :
void CTestDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
/*
① pScrollBar 指向用户正在进行操作的滚动条。
② nPos 表示滑块当前的位置。
③ nSBCode 指示用户正在进行的操作,其取值及其意义见表。
消息 用户操作
SB_THUMBTRACK 拖动滑块
SB_LINELEFT / SB_LINEUP 单击向左(上)的箭头
SB_LINERIGHT / SB_LINEDOWN 单击向右(下)的箭头
SB_PAGELEFT / SB_PAGEUP 单击向左(上)的箭头与滑块之间的区域
SB_PAGERIGHT / SB_PAGEDOWN 单击向右(下)的箭头与滑块之间的区域
*/
void CTestDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
/*
由于对话框上可能有多个滚动条,因此函数首先需要根据指针 pScrollBar 确定事件发生在哪一个滚动条上,方法是使用表达式 pScrollBar==&m_s。因为, pScrollBar 指向发生事件的滚动条,所以这个表达式为真时,意味着用户对滚动条 m_s 进行了操作。
*/
if (pScrollBar==&m_s)
{
int iNowPos;
switch(nSBCode)
{
case SB_THUMBTRACK: // 拖动滚动滑块时
m_s.SetScrollPos(nPos);
m_e=nPos;
break;
case SB_LINELEFT : // 单击滚动条向左的箭头
iNowPos=m_s.GetScrollPos(); // 获取滑块当前位置所代表的值
iNowPos=iNowPos-2;
if(iNowPos<0)
iNowPos=0;
m_s.SetScrollPos(iNowPos);
m_e=iNowPos;
break;
case SB_LINERIGHT : // 单击滚动条向右的箭头
iNowPos=m_s.GetScrollPos(); // 获取滑块当前位置所代表的值
iNowPos=iNowPos+2;
if(iNowPos>100)
iNowPos=100;
m_s.SetScrollPos(iNowPos);
m_e=iNowPos;
break;
case SB_PAGELEFT : // 单击滚动条左边的箭头与滑块之间的区域
iNowPos=m_s.GetScrollPos(); // 获取滑块当前位置所代表的值
iNowPos=iNowPos-10;
if(iNowPos<0)
iNowPos=0;
m_s.SetScrollPos(iNowPos);
m_e=iNowPos;
break;
case SB_PAGERIGHT : // 单击滚动条右边的箭头与滑块之间的区域
iNowPos=m_s.GetScrollPos(); // 获取滑块当前位置所代表的值
iNowPos=iNowPos+10;
if(iNowPos>100)
iNowPos=100;
m_s.SetScrollPos(iNowPos);
m_e=iNowPos;
break;
}
}
UpdateData(FALSE);
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}