现在的位置: 首页 > 综合 > 正文

2703

2013年09月08日 ⁄ 综合 ⁄ 共 12050字 ⁄ 字号 评论关闭

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();

【上篇】
【下篇】

抱歉!评论已关闭.