一个关于vc++中的list view的问题? vc++6.0中的win32 app编程中可以通过resource编辑器创建list view控件。但是,这个控件和vb中的list view控件相比好像太简单了。请问大家:怎么才能在vc++win32 app中的适用一个像vb中那样的list view控件呢?? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 是吗?那真是不好意思。我却是不太了解vc++里面的这个控件。确定是list control吗?能在给出一点详细介绍吗?或者提供一些这方面的资料???谢谢! 接上面,我想在list control的每行加以个check box(就像vb中那样)。有什么方法吗? 转自VCK在ListControl中使用检查框闻怡洋翻译 http://vchelp.yeah.net -------------------------------------------------------------------------------- This article was contributed by Eran Yariv. List Control/View给了界面设计者更多的选择,开发者可以方便的显示列表。下面我们介绍一中带有检查框的ListCtrl,其中你可以得到用户的点击情况以改变选择状态。我们将利用一个CListCtrl的派生类CCheckListBox来实现。你可以使用OWNER_DRAW风格来自己绘制检查框(我以前翻译过一篇文章是利用改变状态来显示不同IMG,有兴趣可以查查 译者),还有一种简单的方法是利用IE3中带有的新风格。 本文介绍一些新的风格,这些可以在VC5或更高版本上使用。首先我们需要更改CONTROL的风格。ListView_SetExtendedListViewStyle (m_lvTestList.m_hWnd, LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT);下面介绍一些新的风格: LVS_EX_CHECKBOXES 使用检查框 LVS_EX_FULLROWSELECT 选择整行 LVS_EX_GRIDLINES 在REPORT中画出分隔线 LVS_EX_HEADERDRAGDROP LVS_REPORT时可以利用drag-and-drop重新排序 LVS_EX_SUBITEMIMAGES 允许在子项中显示image LVS_EX_TRACKSELECT 当鼠标指到某一项时便自动选择该项 映射下面的消息:ON_NOTIFY(LVN_ITEMCHANGED, IDC_MYLIST, OnItemchangedLinksList)得到检查状态void DemoDlg::OnItemchangedLinksList(NMHDR* pNMHDR, LRESULT* pResult) { NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; *pResult = 0; if (pNMListView->uOldState == 0 && pNMListView->uNewState == 0) return; // No change BOOL bPrevState = (BOOL)(((pNMListView->uOldState & LVIS_STATEIMAGEMASK)>>12)-1); // Old check box state if (bPrevState < 0) // On startup there's no previous state bPrevState = 0; // so assign as false (unchecked) // New check box state BOOL bChecked=(BOOL)(((pNMListView->uNewState & LVIS_STATEIMAGEMASK)>>12)-1); if (bChecked < 0) // On non-checkbox notifications assume false bChecked = 0; if (bPrevState == bChecked) // No change in check box return; // Now bChecked holds the new check box state // ....}设置检查框状态void SetLVCheck (WPARAM ItemIndex, BOOL bCheck){ ListView_SetItemState (m_lvTestList.m_hWnd, ItemIndex, UINT((int(bCheck) + 1) << 12), LVIS_STATEIMAGEMASK);}得到检查框状态使用在commctl.h中定义的宏 ListView_GetCheckState(hwndLV,i);hwndLV为CONTROL的句柄,i为位置索引。 多谢rushinger,这篇文章太好了。根据它,我已经能在mfc里得到有checkbox的list control了。但是,如果我要使用Win32 Application直接开发而没用mfc库时怎么办呢?我查了(vc++)win32 api里没有ListView_SetExtendedListViewStyle这些函数和LVS_EX_CHECKBOXES等这些风格。这样还能实现有checkbox的list control吗?最后,如果Win32 Application直接不行,那么,我能不能在Win32 Application里直接使用访问mfc的类库呢? 服务器端调用Recv的问题 如何抓自己发给自己的包???? 请问,如何知道自己是不是在RING0?另外,在RING0时,我们能否往代码段里写数据吗? WebBrowse用来分析html的com是什么? ftp 连接短开后,连接为什么不马上短开呢。我要想重新连接必须等一段时间 关于GetClassName函数一问 200分!求FTP客户端源程序(VC)! 有两个关于数据源的问题!!!!!!!!牛人进来阿!!! 如何让程序一运行就自动打开上次的文档? 窗口问题,请指教? 菜鸟请教sql server如何存储数组? 如何用VC同时产生ACCESS97和ACCESS2000两种格式的数据库?
我想在list control的每行加以个check box(就像vb中那样)。有什么方法吗?
在ListControl中使用检查框闻怡洋翻译 http://vchelp.yeah.net --------------------------------------------------------------------------------
This article was contributed by Eran Yariv.
List Control/View给了界面设计者更多的选择,开发者可以方便的显示列表。下面我们介绍一中带有检查框的ListCtrl,其中你可以得到用户的点击情况以改变选择状态。我们将利用一个CListCtrl的派生类CCheckListBox来实现。你可以使用OWNER_DRAW风格来自己绘制检查框(我以前翻译过一篇文章是利用改变状态来显示不同IMG,有兴趣可以查查 译者),还有一种简单的方法是利用IE3中带有的新风格。 本文介绍一些新的风格,这些可以在VC5或更高版本上使用。首先我们需要更改CONTROL的风格。ListView_SetExtendedListViewStyle (m_lvTestList.m_hWnd, LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT);
下面介绍一些新的风格: LVS_EX_CHECKBOXES 使用检查框
LVS_EX_FULLROWSELECT 选择整行
LVS_EX_GRIDLINES 在REPORT中画出分隔线
LVS_EX_HEADERDRAGDROP LVS_REPORT时可以利用drag-and-drop重新排序
LVS_EX_SUBITEMIMAGES 允许在子项中显示image
LVS_EX_TRACKSELECT 当鼠标指到某一项时便自动选择该项
映射下面的消息:ON_NOTIFY(LVN_ITEMCHANGED, IDC_MYLIST, OnItemchangedLinksList)
得到检查状态void DemoDlg::OnItemchangedLinksList(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
*pResult = 0;
if (pNMListView->uOldState == 0 && pNMListView->uNewState == 0)
return; // No change
BOOL bPrevState = (BOOL)(((pNMListView->uOldState & LVIS_STATEIMAGEMASK)>>12)-1); // Old check box state
if (bPrevState < 0) // On startup there's no previous state
bPrevState = 0; // so assign as false (unchecked) // New check box state
BOOL bChecked=(BOOL)(((pNMListView->uNewState & LVIS_STATEIMAGEMASK)>>12)-1);
if (bChecked < 0) // On non-checkbox notifications assume false
bChecked = 0;
if (bPrevState == bChecked) // No change in check box
return; // Now bChecked holds the new check box state
// ....
}
设置检查框状态
void SetLVCheck (WPARAM ItemIndex, BOOL bCheck)
{
ListView_SetItemState (m_lvTestList.m_hWnd, ItemIndex,
UINT((int(bCheck) + 1) << 12), LVIS_STATEIMAGEMASK);
}
得到检查框状态
使用在commctl.h中定义的宏 ListView_GetCheckState(hwndLV,i);hwndLV为CONTROL的句柄,i为位置索引。