发布: 2010-5-01 13:28| 作者: waltons| | 查看: 1次
2008年02月21日
//ListBox控件的使用
ListBox窗户用来列出一系列的文本,每条则本占一行。创建一个列表窗户可使用成员函数:
BOOL CListBox::Create( LPCTSTR lpszText,DWORD dwStyle,const RECT& rect,CWnd* pParentWnd,UINT nID = 0xffff );
其中dwStyle将指明该窗户的风格,除了子窗户常用的风格WS_CHILD,WS_VISIBLE外,你可以针对列表控件指明专门的风格。
LBS_MULTIPLESEL 指明列表框可以同时选择多行
LBS_EXTENDEDSEL 可以路程经过过程按下Shift/Ctrl键选择多行
LBS_SORT 所有的行根据字母挨次进行排序
在列表框天生后需要向其中插手或是删除行,可以利用:
int AddString( LPCTSTR lpszItem )新增行,
int DeleteString( UINT nIndex )删除指定行,
int InsertString( int nIndex,LPCTSTR lpszItem )将行插入到指定位置。
void ResetContent( )可以删除列表框中所有行。
路程经过过程调用int GetCount( )获患上时下列表框中行的数量。
要是需要获患上/设置时下被选中的行,可以调用int GetCurSel( )/int SetCurSel(int iIndex)。要是你指明了选择多行的风格,你就需要先调用int GetSelCount( )获患上被选中的行的数量,之后int GetSelItems( int nMaxItems,LPINT rgIndex )获患上所有选中的行,参量rgIndex为储存安放被选中行的数组。路程经过过程调用int GetLBText( int nIndex,LPTSTR lpszText )获患上列表框内指定行的字符串。
这个之外路程经过过程调用int FindString( int nStartAfter,LPCTSTR lpszItem )可以在时下所有行中查寻指定的字符传的位置,nStartAfter指明从那一行起头进行查寻。 int SelectString( int nStartAfter,LPCTSTR lpszItem )可以选中包罗指定字符串的行。
在MFC 4.2版本中新增了CCheckListBox类,该类是由CListBox派生并拥有CListBox的所有功能,差别的是可以在每行前加之一个检查框。必须注重的是在创建时必须指明LBS_OWNERDRAWFIXED或LBS_OWNERDRAWVARIABLE风格。
路程经过过程void SetCheckStyle( UINT nStyle )/UINT GetCheckStyle( )可以设置/获患上检查框的风格,关于检查框风格可以参考4.1 Button中先容。路程经过过程void SetCheck( int nIndex,int nCheck )/int GetCheck( int nIndex )可以设置以及获患上某行的检查状况,关于检查框状况可以 vb listBox参考4.1 Button中先容。
最后先容一下列表框几种常用的消息照射宏:
ON_LBN_DBLCLK 鼠标双击
ON_EN_ERRSPACE 输入框无法分配内存时孕育发生
ON_EN_KILLFOCUS / ON_EN_SETFOCUS 在输入框掉去/获患上输入焦点时孕育发生
ON_LBN_SELCHANGE 选择的行发生转变
使用以上几种消息照射的方法为界说原形如:afx_msg void memberFxn( );的函数,而且界说形式如ON_Notification( id,memberFxn )的消息照射。要是在对话框中使用列表框,Class Wizard会不佣人的劳力列出相干的消息,并能不佣人的劳力孕育发生消息照射代码。
CListBox 以及 CCheckListBox 简介
CListBox
用来输出一系列的文本,每条则本占一行。
CCheckListBox
CCheckListBox是由CListBox派生,具有CListBox的所有功能。与CListBox独一差别是在每一行前面加之了一个检查框(Check Box)。要使用CCheckListBox,需要在资源视图(resourceview)中
⑴ Style->Owner draw->选中Fixed
⑵ 选中Has Strings
(3) 新增成员变量
方法一:路程经过过程类向导(ClassWizard)给新增成员变量CListBox m_listBox;,之后手动改成CCheckListBox m_listBox;
方法二:用SubclassDlgItem或SubclassWindow函数,子类化控件。
CCheckListBox m_checkListBox;
m_checkListBox.SubclassDlgItem(IDC_LISTBox1,this);
1. listBox的styles先容
在listBox的styles中的selection中有4个选项:Single,Multiple,Extended以及None。
Single:允许每次选择一个item。
Multiple:允许每次选择多个item。
Extended:允许按下Shift/Ctrl键选择多行。
None:选中item而不高亮之,只显示该item获患上焦点(item外有矩形框)。
2. 关于在运行时转变listBox的style
在运行时是不克不及转变style的,只有毁掉本来的,再新创建一个listBox。或先创建两个listBox,隐蔽其中一个。
3. 设置listBox程度滚动条
int dx=0;
CSize sz;
CDC* pDC = m_listBox.GetDC();
CString str;
for (int j = 0; j < m_listBox.GetCount(); j )
{
m_listBox.GetText(j,str);
sz = pDC->GetTextExtent(str);
if ( sz.cx > dx )
dx = sz.cx;
}
m_listBox.ReleaseDC(pDC);
m_listBox.SetHorizontalExtent(dx);
4. 导入文件夹下所有文件以及目录到listBox
TCHAR szPath [MAX_PATH] = {"c://"};
int nReslt = DlgDirList(szPath,IDC_LISTBox1,
DDL_READWRITE |DDL_READONLY |
DDL_SYSTEM | DDL_ARCHIVE | DDL_DIRECTORY );
5. listBox插手数据时,不佣人的劳力滚动到最后
//不佣人的劳力滚动到最后并选中最后最后一行
m_listBox.SetCurSel(m_listBox.GetCount()-1);
//不佣人的劳力滚动到最后
m_listBox.SetCaretIndex(m_listBox.GetCount()-1,FALSE);
或
m_listBox.SetTopIndex(m_listBox.GetCount()-1);
6.关于 SetItemDataPtr() 以及 GetItemDataPtr() 的使用
SetItemDataPtr()是将一个32位的指针与列表框中的一个item成立相干联,在设置后可以路程经过过程调 listBox 清空用GetItemDataPtr()而获取。那末由此,咱们可以将列表框中的数据通外部成立联系了。 在现实应用方面,比如,在列表框中的item是人的姓名,那末咱们可以成立一个数据布局,存储人的性别,住址,手机等相干信息,与item成立联系。当取患上item时,同时咱们也取患上了该人的相干信息。 示例: struct _Person_Info { CString strSex; CString strAddress; CString strPhoneNumber; }PersonInfo; PersonInfo *pi; int nIndex = m_listBox.AddString(_T("第三者")); m_pPersonInfo = new PersonInfo(); pi->strSex = _T("Male"); pi->strAddress = _T("xxx city"); pi->strPhoneNumber = _T("1234567678"); m_listBox.SetItemDataPtr(nIndex,(LPVOID)pi); //获取 PersonInfo *pi = NULL; pi = (PersonInfo *)m_listBox.GetItemDataPtr(nIndex); 7. 带彩色字符串 listBox http://www.codeguru.com/cpp/controls/listBox/color listBoxes/article.PHP/c1611/ http://www.codeproject.com/comboBox/xlistBox.asp 8. 违景透明 listBox http://www.codeguru.com/cpp/controls/listBox/color listBoxes/article.PHP/c10413/ 9. 在listBox中使成为事实拖放 ⑴ 在一个listBox中拖放 http://www.codeguru.com/cpp/controls/listBox/dragd rop/article.PHP/c11061/ http://www.codeguru.com/cpp/controls/listBox/dragd rop/article.PHP/c4747/ ⑵ 在两个listBox间使成为事实拖放 http://msdn.microsoft.com/msdnmag/issues/04/10/CQA / http://www.codeguru.com/cpp/controls/listBox/dragd rop/article.PHP/c11069/ 10. CListBoxST 一个非常好的类 http://www.codeguru.com/cpp/controls/listBox/artic le.PHP/c4753/ 11. 近似于 vb 属性选择窗户 http://www.codeguru.com/cpp/controls/listBox/artic le.PHP/c1607/ http://www.codeproject.com/comboBox/Property_List. asp 12. 近似于 vc 的 tools->options->directories 的目录设置窗户 http://www.codeguru.com/cpp/controls/listBox/artic le.PHP/c1613/ 13. 带 icon 的 listBox http://www.codeguru.com/cpp/controls/listBox/artic le.PHP/c4749/ http://www.codeguru.com/cpp/controls/listBox/artic le.PHP/c4753/ 14. 带 checkBox 的listBox http://www.codeproject.com/comboBox/CCheckListBoxU sage.asp 15. 可编辑 item 的 listBox http://www.codeproject.com/comboBox/lbed.asp 16. 可 disable item 的 listBox http://www.codeproject.com/comboBox/disableditemsl istBox.asp 17. 一个自绘的listBox Q113189: ListDlg.exe Implements a List Box Full of Dialog Boxes http://support.microsoft.com/kb/113189/en-us
//ListBox控件的使用
ListBox窗户用来列出一系列的文本,每条则本占一行。创建一个列表窗户可使用成员函数:
BOOL CListBox::Create( LPCTSTR lpszText,DWORD dwStyle,const RECT& rect,CWnd* pParentWnd,UINT nID = 0xffff );
其中dwStyle将指明该窗户的风格,除了子窗户常用的风格WS_CHILD,WS_VISIBLE外,你可以针对列表控件指明专门的风格。
LBS_MULTIPLESEL 指明列表框可以同时选择多行
LBS_EXTENDEDSEL 可以路程经过过程按下Shift/Ctrl键选择多行
LBS_SORT 所有的行根据字母挨次进行排序
在列表框天生后需要向其中插手或是删除行,可以利用:
int AddString( LPCTSTR lpszItem )新增行,
int DeleteString( UINT nIndex )删除指定行,
int InsertString( int nIndex,LPCTSTR lpszItem )将行插入到指定位置。
void ResetContent( )可以删除列表框中所有行。
路程经过过程调用int GetCount( )获患上时下列表框中行的数量。
要是需要获患上/设置时下被选中的行,可以调用int GetCurSel( )/int SetCurSel(int iIndex)。要是你指明了选择多行的风格,你就需要先调用int GetSelCount( )获患上被选中的行的数量,之后int GetSelItems( int nMaxItems,LPINT rgIndex )获患上所有选中的行,参量rgIndex为储存安放被选中行的数组。路程经过过程调用int GetLBText( int nIndex,LPTSTR lpszText )获患上列表框内指定行的字符串。
这个之外路程经过过程调用int FindString( int nStartAfter,LPCTSTR lpszItem )可以在时下所有行中查寻指定的字符传的位置,nStartAfter指明从那一行起头进行查寻。 int SelectString( int nStartAfter,LPCTSTR lpszItem )可以选中包罗指定字符串的行。
在MFC 4.2版本中新增了CCheckListBox类,该类是由CListBox派生并拥有CListBox的所有功能,差别的是可以在每行前加之一个检查框。必须注重的是在创建时必须指明LBS_OWNERDRAWFIXED或LBS_OWNERDRAWVARIABLE风格。
路程经过过程void SetCheckStyle( UINT nStyle )/UINT GetCheckStyle( )可以设置/获患上检查框的风格,关于检查框风格可以参考4.1 Button中先容。路程经过过程void SetCheck( int nIndex,int nCheck )/int GetCheck( int nIndex )可以设置以及获患上某行的检查状况,关于检查框状况可以 vb listBox参考4.1 Button中先容。
最后先容一下列表框几种常用的消息照射宏:
ON_LBN_DBLCLK 鼠标双击
ON_EN_ERRSPACE 输入框无法分配内存时孕育发生
ON_EN_KILLFOCUS / ON_EN_SETFOCUS 在输入框掉去/获患上输入焦点时孕育发生
ON_LBN_SELCHANGE 选择的行发生转变
使用以上几种消息照射的方法为界说原形如:afx_msg void memberFxn( );的函数,而且界说形式如ON_Notification( id,memberFxn )的消息照射。要是在对话框中使用列表框,Class Wizard会不佣人的劳力列出相干的消息,并能不佣人的劳力孕育发生消息照射代码。
CListBox 以及 CCheckListBox 简介
CListBox
用来输出一系列的文本,每条则本占一行。
CCheckListBox
CCheckListBox是由CListBox派生,具有CListBox的所有功能。与CListBox独一差别是在每一行前面加之了一个检查框(Check Box)。要使用CCheckListBox,需要在资源视图(resourceview)中
⑴ Style->Owner draw->选中Fixed
⑵ 选中Has Strings
(3) 新增成员变量
方法一:路程经过过程类向导(ClassWizard)给新增成员变量CListBox m_listBox;,之后手动改成CCheckListBox m_listBox;
方法二:用SubclassDlgItem或SubclassWindow函数,子类化控件。
CCheckListBox m_checkListBox;
m_checkListBox.SubclassDlgItem(IDC_LISTBox1,this);
1. listBox的styles先容
在listBox的styles中的selection中有4个选项:Single,Multiple,Extended以及None。
Single:允许每次选择一个item。
Multiple:允许每次选择多个item。
Extended:允许按下Shift/Ctrl键选择多行。
None:选中item而不高亮之,只显示该item获患上焦点(item外有矩形框)。
2. 关于在运行时转变listBox的style
在运行时是不克不及转变style的,只有毁掉本来的,再新创建一个listBox。或先创建两个listBox,隐蔽其中一个。
3. 设置listBox程度滚动条
int dx=0;
CSize sz;
CDC* pDC = m_listBox.GetDC();
CString str;
for (int j = 0; j < m_listBox.GetCount(); j )
{
m_listBox.GetText(j,str);
sz = pDC->GetTextExtent(str);
if ( sz.cx > dx )
dx = sz.cx;
}
m_listBox.ReleaseDC(pDC);
m_listBox.SetHorizontalExtent(dx);
4. 导入文件夹下所有文件以及目录到listBox
TCHAR szPath [MAX_PATH] = {"c://"};
int nReslt = DlgDirList(szPath,IDC_LISTBox1,
DDL_READWRITE |DDL_READONLY |
DDL_SYSTEM | DDL_ARCHIVE | DDL_DIRECTORY );
5. listBox插手数据时,不佣人的劳力滚动到最后
//不佣人的劳力滚动到最后并选中最后最后一行
m_listBox.SetCurSel(m_listBox.GetCount()-1);
//不佣人的劳力滚动到最后
m_listBox.SetCaretIndex(m_listBox.GetCount()-1,FALSE);
或
m_listBox.SetTopIndex(m_listBox.GetCount()-1);
6.关于 SetItemDataPtr() 以及 GetItemDataPtr() 的使用
SetItemDataPtr()是将一个32位的指针与列表框中的一个item成立相干联,在设置后可以路程经过过程调 listBox 清空用GetItemDataPtr()而获取。那末由此,咱们可以将列表框中的数据通外部成立联系了。 在现实应用方面,比如,在列表框中的item是人的姓名,那末咱们可以成立一个数据布局,存储人的性别,住址,手机等相干信息,与item成立联系。当取患上item时,同时咱们也取患上了该人的相干信息。 示例: struct _Person_Info { CString strSex; CString strAddress; CString strPhoneNumber; }PersonInfo; PersonInfo *pi; int nIndex = m_listBox.AddString(_T("第三者")); m_pPersonInfo = new PersonInfo(); pi->strSex = _T("Male"); pi->strAddress = _T("xxx city"); pi->strPhoneNumber = _T("1234567678"); m_listBox.SetItemDataPtr(nIndex,(LPVOID)pi); //获取 PersonInfo *pi = NULL; pi = (PersonInfo *)m_listBox.GetItemDataPtr(nIndex); 7. 带彩色字符串 listBox http://www.codeguru.com/cpp/controls/listBox/color listBoxes/article.PHP/c1611/ http://www.codeproject.com/comboBox/xlistBox.asp 8. 违景透明 listBox http://www.codeguru.com/cpp/controls/listBox/color listBoxes/article.PHP/c10413/ 9. 在listBox中使成为事实拖放 ⑴ 在一个listBox中拖放 http://www.codeguru.com/cpp/controls/listBox/dragd rop/article.PHP/c11061/ http://www.codeguru.com/cpp/controls/listBox/dragd rop/article.PHP/c4747/ ⑵ 在两个listBox间使成为事实拖放 http://msdn.microsoft.com/msdnmag/issues/04/10/CQA / http://www.codeguru.com/cpp/controls/listBox/dragd rop/article.PHP/c11069/ 10. CListBoxST 一个非常好的类 http://www.codeguru.com/cpp/controls/listBox/artic le.PHP/c4753/ 11. 近似于 vb 属性选择窗户 http://www.codeguru.com/cpp/controls/listBox/artic le.PHP/c1607/ http://www.codeproject.com/comboBox/Property_List. asp 12. 近似于 vc 的 tools->options->directories 的目录设置窗户 http://www.codeguru.com/cpp/controls/listBox/artic le.PHP/c1613/ 13. 带 icon 的 listBox http://www.codeguru.com/cpp/controls/listBox/artic le.PHP/c4749/ http://www.codeguru.com/cpp/controls/listBox/artic le.PHP/c4753/ 14. 带 checkBox 的listBox http://www.codeproject.com/comboBox/CCheckListBoxU sage.asp 15. 可编辑 item 的 listBox http://www.codeproject.com/comboBox/lbed.asp 16. 可 disable item 的 listBox http://www.codeproject.com/comboBox/disableditemsl istBox.asp 17. 一个自绘的listBox Q113189: ListDlg.exe Implements a List Box Full of Dialog Boxes http://support.microsoft.com/kb/113189/en-us