1
.列表视图控件:
ClistCtrl
类的用法:
1
常规操作函数:它们可以完成向列表视图中插入新
条目或新列等操作。
ISubItem-
指定条目子索引项
BOOL
DeleteAllItems()
删除列表控件中所有条目
int
InsertColumn(int nCol,const LVCOLUMN * pColum)
插入新列
操作成功返回新列索引
nCol-----
指定新列索引。
pColum---
为
LVCOLUMN
结构指针,包含将插入的信息。
LVCOLUMN
结构
例:
m_ListCtrl.InsertColumn( 0, _T( "
所有匹配的单词
" ), LVCFMT_LEFT, 115 );
int
InsertItem(const LVITEM *pItem)
调用该函数以
向列表中插入新条目
返回新条目索引值
pItem-------
为
LVITEM
结构,其中包含了将插入的条目信息
列表控制中包含两个非常重要的数据结构
LV_ITEM
和
LV_COLUMN
。
LV_ITEM
用于定义列表控制的一个表项,
LV_COLUMN
用于定义列表控制的一个表列
例:
m_ListCtrl.InsertItem(
0, WordSet.m_Word );//
数据项
CString s;
s.Format("%d",m_Set.m_column1);//
格式化
//int
InsertItem(i,s,0)
调用该函数以向列表中插入新条目
返回新条目索引值
//
相当于插入新的一行
数字代表列数
m_ListCtrlx.InsertItem(i,s,0);
EnsureVisible---
调用该函数以确保指定的列表视图条目可见,其原型为:
BOOL
EnsureVisible
(
int
nItem,BOOL bPartialOK
)
返回值:
nItem
:指定了必须可见的条目索引。
bPartialOK
:指定了是否允许部分可见。
列表视图控件将在必要时进行滚动,以确保指定条目可见。如果
bPartialOK
参数为非零值,则当条目部分可见时,列表视图控件不进行滚动。
2
。属性操作函数:它们可以完成对列表视图控件的属性的设置和查询等操作。
DWORD
SetExtendedStyle(DWORD dwNewStyle) //
先设计列表风格
如果函数调用成功,则返回列表视图控件先前所使用的
扩展风格。
LVS_EX_FULLROWSELECT-----
对列表视图中的项目进行整行选择,即选择某条目时,该条目的所在行都被选择。
LVS_EX_GRIDLINES----
将在列表视图控件中绘制网格线
0x21
。
例:
m_ListCtrl.SetExtendedStyle(
LVS_EX_GRIDLINES );//
将在列表视图控件中绘制网格线
0x21
。
POSITION
GetFirstSelectedItemPosition() const
如果函数执行成功,则返回条目的
POSITION
值,如果返回值为
KULL
,则表示当前列表视图控件中没有条目选中。
Int
GetNextSelectedItem(POSITION& pos) const
如果函数执行成功,则返回列表视图控件中下一个被选中的条目索引。其中参数
pos
为将接收条目
POSITION
值的变量。
BOOL
SetColumnWidth(int nCol,int cx)
调用该函数以设置报表视图或列表视图中指定列的宽度。
nCol----
指定了将被设置宽度的列索引。
cx-------
指定了列的新宽度。
Int
GetItemText(int nItem, int nSubItem
,
LPTSTR lpszText
,
int nLen) const;
CString
GetItemText(int nItem, int nSubItem) const;
对于
int,
其返回值为所指定的文本长度;对
CString
,其返回值为包含条目文本的
CString
对象。
nItem--------
指定将被获取文本的条目索引
nSubItem---------
指定了将被获取文本的条目子项的索引。
lpszText---------
将返回条目文本的缓冲区指针。
nLen----------
指定
lpszText
缓冲区的长度。
如果
nSubItem
为
0
,则函数将获取条目的标签,
nSubItem
不为
0
,将获取指定条目子项的文本。
例:
BOOL
SetItemText(int nItem, int nSubItem
,
LPTSTR lpszText);
如果函数调用成功,则返回非零值,否则返回零值。
nItem--------
指定将被设置的条目索引
nSubItem---------
指定了将被设置文本的条目子项的索引。
lpszText---------
指定了将被设置的新条目文本。
例:
char
szTemp[27] = { '/0' };//
缓冲区
POSITION
Pos = m_ListCtrl.GetFirstSelectedItemPosition();
if ( Pos ==
NULL ) return;
int
nCurIndex = m_ListCtrl.GetNextSelectedItem( Pos );
m_Display.Empty();//
文本编辑框
m_ListCtrl.GetItemText( nCurIndex, 0, szTemp, 26 );
CImageList
:图像列表
CImagelist*
GetImageList(int nImageList) const;
如果函数执行成功,则返回列表视图控件的图像列表指针。
nImageList
----指定了将获得的图像列表类型。
LVSIL_NORMAL---
获取大图标图像列表指针
LVSIL_SMALL
--获取小图标图像列表指针
LVSIL_STATE
--获取状态图像列表指针
CImageList*
SetImageList(CImageList* pImageList,int nImageList);
如果函数执行成功,返回先前的图像列表指针
参数:
pImageList
--指定了要设置的图像列表指针
nImageList
--指定了要设置的图像列表类型
COLORREF
GetBkColor() const;
调用该函数获得列表视图控件的背景颜色。
函数执行成功,返回
32
位
RGB
值
BOOL
SetBkColor (COLORREF cr);
调用该函数设置列表视图控件的背景颜色。
函数执行成功,返回非零值,否则返回零值。
CHeaderCtrl* GetHeaderCtrl();
调用改函数以得到列表视图控件的标头控件指针
函数调用成功,返回列表视图控件所使用的标头控件指针
例:
m_imagelist.Create(16,16,TRUE,2,2);
m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_YES));
m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_NO));
m_list.SetImageList(&m_imagelist,LVSIL_SMALL);
m_list.SetExtendedStyle(0x21);
m_list.SetFont(&m_font1);//
设置全部字体
//
m_list.GetHeaderCtrl()->SetFont(&m_font1);//
只设置标头控件的字体
//
以下函数与文本有关
m_list.SetBkColor(RGB(247,247,0));
m_list.SetTextColor(RGB(255,255,255));//
设置列表视图控件的文本颜色
m_list.SetTextBkColor(RGB(0,0,255));//
设置列表视图控件中文本背景色
m_iImageList.Create(24,
24, TRUE,1, 0);
HICON hIcon
= NULL;
hIcon =
(HICON)::LoadImage(::AfxGetInstanceHandle(),
MAKEINTRESOURCE(IDI_KEBIAO), IMAGE_ICON, 24, 24, 0);
m_iImageList.Add(hIcon);
m_FileTree.SetImageList ( &m_iImageList,TVSIL_NORMAL );
----------------------
事例
----------------------------------
实现排序:
BOOL m_Bs;
BOOL
m_bIsAsc;//
互斥信号量:
true
升序
反之降序
CDRecordset
m_Set;
void
Sort(BOOL isAsc=TRUE,int secol=1);
void
CBaDialog::Sort(BOOL isAsc,int secol)
{
if(m_Set.IsOpen())
m_Set.Close();
this->Select(); //
打开所选择数据表
m_bSet.Close();//
只对
m_Set
数据标排序
所以关闭
m_bSet
CODBCFieldInfo fieldInfo;
m_Set.GetODBCFieldInfo(secol,fieldInfo);//
返回纪录集中字段的特定种类的信息
即所选
择的信息
if(isAsc)//
实现排序功能
{
m_Set.m_strSort=fieldInfo.m_strName+" ASC";//order by
m_bIsAsc=TRUE;
}
else
{
m_Set.m_strSort=fieldInfo.m_strName+" DESC";
m_bIsAsc=FALSE;
}
m_Set.Requery();
}
//
单击索引
void
CBaDialog::OnColumnclickList3(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;//
系统自动生成
// TODO:
Add your control notification handler code here
if(FALSE==
m_bS)
{
int k=
pNMListView->iSubItem; //
鼠标单击选择第几行
Sort(!m_bIsAsc, k);
m_ListCtrlx.DeleteAllItems();
this->Show();//
把数据库学生的数据表内容显示
}
*pResult =
0;
}
右键单击事件
void
CCCDlg::OnRclickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO:
Add your control notification handler code here
POSITION
pos = m_list.GetFirstSelectedItemPosition(); //
得到当前选中的行
if(pos)
{
int nItem =
m_list.GetNextSelectedItem(pos);
CPoint pt;
::GetCursorPos(&pt);
COfficeXPMenu m_menu;
m_menu.LoadMenu(IDR_MENU_LIST);
COfficeXPMenu::SetType(TYPE_XP); //
设置菜单的风格
,(TYPE_XP, TYPE_NORMAL)
COfficeXPMenu *psub = (COfficeXPMenu *)m_menu.GetSubMenu(0);
DWORD dwID
=psub->TrackPopupMenu(TPM_RIGHTBUTTON,pt.x,pt.y ,this);
m_menu.DestroyMenu();
}
*pResult =
0;
}
列表双击事件(实现在编辑框中显示内容)
//
双击则显示显示信息
void
CListItemDlg::OnDblclkList(NMHDR* pNMHDR, LRESULT* pResult)
{
CWordDaoSet
WordSet;
CString
strSQL;
CString
strNewLine( "/r/n" );//
回车换行
char
szTemp[27] = { '/0' };
//
得到双击列的位置
POSITION
Pos = m_ListCtrl.GetFirstSelectedItemPosition();
if ( Pos ==
NULL ) return;
int
nCurIndex = m_ListCtrl.GetNextSelectedItem( Pos );
m_Display.Empty();
m_ListCtrl.GetItemText( nCurIndex, 0, szTemp, 26 );
strSQL.Format( "SELECT * FROM WordList WHERE word = '%s'", szTemp );
if (
WordSet.IsOpen() )
WordSet.Close();
WordSet.Open( AFX_DAO_USE_DEFAULT_TYPE, strSQL, 0 );
if (
!WordSet.IsEOF() )
{
if (
!WordSet.m_Explain0.IsEmpty() )
m_Display
+= WordSet.m_Explain0 ;//
字符串相加
if (
!WordSet.m_Explain1.IsEmpty() )
m_Display
+= ( strNewLine + WordSet.m_Explain1 );
if (
!WordSet.m_Explain2.IsEmpty() )
m_Display
+= ( strNewLine + WordSet.m_Explain2 );
if (
!WordSet.m_Phrase0.IsEmpty() )
m_Display
+= ( strNewLine + WordSet.m_Phrase0 );
if (
!WordSet.m_Phrase1.IsEmpty() )
m_Display
+= ( strNewLine + WordSet.m_Phrase1 );
if (
!WordSet.m_Phrase2.IsEmpty() )
m_Display
+= ( strNewLine + WordSet.m_Phrase2 );
if (
!WordSet.m_Sentence0.IsEmpty() )
m_Display
+= ( strNewLine + WordSet.m_Sentence0 );
if (
!WordSet.m_Sentence1.IsEmpty() )
m_Display
+= ( strNewLine + WordSet.m_Sentence1 );
}
if (
WordSet.IsOpen() )
WordSet.Close();
UpdateData(
FALSE );//
在编辑框中显示文本
*pResult =
0;
}
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
void
CCcDlg::OnDblclkList(NMHDR* pNMHDR, LRESULT* pResult) //
双击
list
控件的函数
{
POSITION
pos = m_list.GetFirstSelectedItemPosition(); //
得到当前选中的行
if(pos) //
如果选中一行
{
int nItem =
m_list.GetNextSelectedItem(pos);
CAddDlg
dlgadd;
dlgadd.m_bAddOrModify=1;
//
修改记录的标志
if(m_list.GetItemText(nItem,0)=="N")
dlgadd.m_bPassed=false; //
单项按钮
else
dlgadd.m_bPassed=true;
dlgadd.m_strName=m_list.GetItemText(nItem,1);
dlgadd.m_strCollege =m_list.GetItemText(nItem,2);
dlgadd.m_strReason
=m_list.GetItemText(nItem,3);
dlgadd.m_date1 =m_list.GetItemText(nItem,4);
dlgadd.m_date2 =m_list.GetItemText(nItem,5);
dlgadd.m_strRemark =m_list.GetItemText(nItem,6);
dlgadd.DoModal();
}
*pResult =
0;
}
////////
CListCtrl
中选择变化时如何获得通知
?
我在
Report
View
中使用了一个
CListCtrl(
自绘制类型
),
我想知道什么时候选择项发生了改变
.
在选择项变化时
,
可以使用按钮有效或失效
,
按如下操作
:
加入
LVN_ITEMCHANGED
消息处理
.
void
CYourClassNameHere::OnItemchangedEventList(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
*pResult =
0;
if
(pNMListView->uChanged == LVIF_STATE)
{
if
(pNMListView->uNewState)
GetDlgItem(IDC_DELETE)->EnableWindow(TRUE);
else
GetDlgItem(IDC_DELETE)->EnableWindow(FALSE);
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
树视图控件-树视图控件
属性设置-
style:
有按钮、有行、
line at root
、边框;
more style:
卷轴、工具栏提示。
属性操作函数
。
GetParentItem
:调用该函数得到指定树视图条目的父条目
.
HTREEITEM GetParentItem(HTREEITEM
hItem);
hItem:
指定条目句柄。
常规操作函数
.InsertItem:
向树形控件插入新条目
/*
TVINSERTSTRUCT tvInsert; //d
第一中插入方法
tvInsert.hParent = NULL;//
指定了父条目句柄,参数为
TVI_ROOT
或
NULL
,则该条目被插入控件的根部
tvInsert.hInsertAfter = NULL;
tvInsert.item.mask = TVIF_TEXT;
tvInsert.item.pszText = _T("VC
知识库
www.vckbase.com");
HTREEITEM
hCountry = m_CtrlTree.InsertItem(&tvInsert);*/
//
第二种方法
HTREEITEM
hCountry = m_CtrlTree.InsertItem( _T("VC
知识库
www.vckbase.com"), NULL, NULL);//
根目录
HTREEITEM
hPA = m_CtrlTree.InsertItem(TVIF_TEXT,_T("
程序员社区
"), 0, 0, 0, 0, 0, hCountry, NULL);//
二级目录
HTREEITEM
hWA = m_CtrlTree.InsertItem(_T("
文档代码中心
"),0, 0, hCountry, hPA);//
二级目录
//
m_CtrlTree.InsertItem(_T("
程序员论坛
"),0, 0, hPA, TVI_SORT);//
三级目录
m_CtrlTree.InsertItem(_T("
程序员论坛
"), hPA, TVI_SORT);
m_CtrlTree.InsertItem(_T("
程序员交友
"), hPA, TVI_SORT);
m_CtrlTree.InsertItem(_T("
人才交流
"), hPA, TVI_SORT);
m_CtrlTree.InsertItem(_T("
文档中心
"), hWA, TVI_SORT); //
三级目录
m_CtrlTree.InsertItem(_T("
代码仓库
"), hWA, TVI_SORT);
m_CtrlTree.InsertItem(_T("
个人专辑
"), hWA, TVI_SORT);
m_CtrlTree.Expand(hCountry,TVE_EXPAND);
。
GetItemText
:得到指定条目的文本
。
SetItemText
.Expand:
调用该函数以展开或收拢指定条目的子条目。
BOOL
Expand(HTREEITEM hItem,UINT nCode);
函数成功,返回非零值,否则返回零值。
hItem
:指定将打开或收拢的条目句柄。
nCode
:指定了采取的操作
,
如下:
TVE_COLLAPSE:
收拢列表
TVE_COLLAPSERESET
:收拢列表,并删除子条目
TVE_EXPAND
:打开列表
TVE_TOGGLE
:如果当前列表已经打开,则收拢之;如果已经收拢,则打开;
选择所单击的内容
void
CPppView::OnSelchangingTree1(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
// TODO:
Add your control notification handler code here
CTreeCtrl*
pTree2 = (CTreeCtrl*) GetDlgItem(IDC_TREE1);//
HTREEITEM
hSelected = pNMTreeView->itemNew.hItem;
CPppDoc*
pDoc = (CPppDoc*)GetDocument();//
一切都以文档传输
CString hParentName;
HTREEITEM
hParent=pTree2->GetParentItem(hSelected); //
if(hSelected!=NULL)
{
pDoc->Name=pTree2->GetItemText(hSelected);// Name
在文档里定义
}
*pResult =
0;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2
.组合框控件:
int
GetCurSel() const
得到当前选项的索引,
失败则返回
CB_ERR
。
Int
SetCurSel(int nSelect);
如果函数调用成功,返回当前选项索引。如果
nSelect
的值超出范围,或为
-1
,则返回
CB_ERR
,并清除当前选项。
int
GetLBText(int nIndex,Cstring& rString ) const
void
GetLBText(int nIndex, LPTSTR lpszText) const
如果函数调用成功,则返回字符串的字节长度(不包括末尾的空字符)。如果
nIndex
并非合法的索引,则返回
CB_ERR
。
nIndex----
指定将获取文本选项的索引。
LpszText---
指定将用以存放所得文本的缓冲区指针。该缓冲区必须足够容纳要获取的文本及其结尾空字符。
rString:
用于存放所的文本的
Cstring
对象
int
GetLBTextLen( int nIndex) const
如果函数调用成功,则返回字符串的字节长度(不包括末尾的空字符)。如果
nIndex
并非合法的索引,则返回
CB_ERR
。
nIndex----
指定将获取组合框选项的索引。
-----------------------------------------------------------
ComboBox(
下拉框
)
的用法:
CComboBox
m_cob;
CString
m_Getstring;
m_cob.GetLBText(m_cob.GetCurSel(),m_Getstring);//
把选择的内容传给
m_Getstring
void
CBaDialog::OnTimer(UINT nIDEvent)
{ //
设置列表框的选择
当再一次选择时
重新设置按钮的属性
// TODO:
Add your message handler code here and/or call default
CString
m_string;
m_cob.GetLBText(m_cob.GetCurSel(),m_string);
if(m_Getstring!=m_string)
{
GetDlgItem(IDC_STATR)->EnableWindow(TRUE);
this->Enable(FALSE);
}
CDialog::OnTimer(nIDEvent);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
3
.
BUTTON
操作函数:
HICON
SetIcon(HICON hIcon);
如果函数操作成功,返回先前与按钮联系的图标句柄。
以链表的方式实现了主界面所有
Button
的初始化
//
设置按钮风格
//
将其单独定义而不是在
ClassWizard
中定义,参看
InitBuffonStyle();
private:
CButtonStyle m_Setting, m_ListItem, m_Addition, m_Remove,
m_Modify,
m_Search, m_About, m_Exit,
m_Previous,
m_Next, m_End, m_Home,
m_Goto,
m_Jump;
void
CMagicWordDlg::InitButtonStyle()
{
CList<
CButtonStyle*, CButtonStyle* > ButtonList;
//ButtonList.AddTail( &m_Setting );
ButtonList.AddTail( &m_ListItem );
ButtonList.AddTail( &m_Addition );
ButtonList.AddTail( &m_Remove );
ButtonList.AddTail( &m_Modify );
ButtonList.AddTail( &m_Search );
ButtonList.AddTail( &m_About );
ButtonList.AddTail( &m_Exit );
ButtonList.AddTail( &m_Previous );
ButtonList.AddTail( &m_Next );
ButtonList.AddTail( &m_End );
ButtonList.AddTail( &m_Home );
ButtonList.AddTail( &m_Goto );
ButtonList.AddTail( &m_Jump );
//
用循环实现必须手动改动
Resource.h
中的定义
for ( int
nIco = IDI_JUMP, nBtn = IDC_JUMP; nBtn >= IDC_LISTITEM; nIco--, nBtn-- )
{
CButtonStyle *Button = ButtonList.RemoveTail();
Button->SubclassDlgItem( nBtn, this );
Button->SetIcon( nIco );
Button->SetInactiveBgColor();