12、组合框、列表框和滚动条

版权声明:原创不易,如引用,请附原文链接 https://blog.csdn.net/Chiang2018/article/details/88808673

列表框是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);
 }

猜你喜欢

转载自blog.csdn.net/Chiang2018/article/details/88808673