MFC列表控件中的复选框响应问题
我在对话框程序里做了个列表控件,列表里包含了很多行,并在列表的类型里设置了复选框格式。代码如下:m_CalList.InsertColumn(0,"",LVCFMT_LE...
我在对话框程序里做了个列表控件,列表里包含了很多行,并在列表的类型里设置了复选框格式。代码如下:
m_CalList.InsertColumn(0,"",LVCFMT_LEFT,20);
m_CalList.InsertColumn(1,"变量名称",LVCFMT_LEFT,70);
m_CalList.InsertColumn(2,"描述",LVCFMT_LEFT,120);
m_CalList.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_CHECKBOXES);
由于我的复选框是单独的一列,不是那种直接在第一列前加个复选框的格式。现在我想实现对复选框的选择,就可以选中整行数据。
对于列表控件中 的复选框功能,有个CListCtrl::SetCheck和CListCtrl::GetCheck函数设置和获得复选框的状态,我不知该怎么用,求指教!!!
回复一楼,我的意思是我把复选框作为了单独的一列,也就是第一列。 展开
m_CalList.InsertColumn(0,"",LVCFMT_LEFT,20);
m_CalList.InsertColumn(1,"变量名称",LVCFMT_LEFT,70);
m_CalList.InsertColumn(2,"描述",LVCFMT_LEFT,120);
m_CalList.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_CHECKBOXES);
由于我的复选框是单独的一列,不是那种直接在第一列前加个复选框的格式。现在我想实现对复选框的选择,就可以选中整行数据。
对于列表控件中 的复选框功能,有个CListCtrl::SetCheck和CListCtrl::GetCheck函数设置和获得复选框的状态,我不知该怎么用,求指教!!!
回复一楼,我的意思是我把复选框作为了单独的一列,也就是第一列。 展开
3个回答
展开全部
实现这些功能你需要派生CListCtrl类,新类名可定为CMyListCtrl;
然后派生他的NM_CLICK消息
afx_msg void OnClickMyList(NMHDR *pNMHDR, LRESULT *pResult);
ON_NOTIFY(NM_CLICK, IDC_MYLIST, &CDlgUPText::OnClickMyList)
在
void CDld::OnClickMyList(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
// TODO: Add your control notification handler code here
int nItem = pNMItemActivate->iItem;
if ( nItem > -1 )
{
UINT Flag = 0;
m_ListCtrl.HitTest( pNMItemActivate->ptAction, &Flag );
if ( Flag == LVHT_ONITEMSTATEICON )
{
bool bChecked = ListView_GetCheckState( m_ListCtrl.m_hWnd,nItem );
if(!bChecked)
{// 勾选,设置整行选中状态
SetItemState( nItem , LVIS_SELECTED , LVIS_SELECTED );
}
else
{// 消除整行选中状态
SetItemState( nItem , 0, LVIS_SELECTED );
}
}
}
然后派生他的NM_CLICK消息
afx_msg void OnClickMyList(NMHDR *pNMHDR, LRESULT *pResult);
ON_NOTIFY(NM_CLICK, IDC_MYLIST, &CDlgUPText::OnClickMyList)
在
void CDld::OnClickMyList(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
// TODO: Add your control notification handler code here
int nItem = pNMItemActivate->iItem;
if ( nItem > -1 )
{
UINT Flag = 0;
m_ListCtrl.HitTest( pNMItemActivate->ptAction, &Flag );
if ( Flag == LVHT_ONITEMSTATEICON )
{
bool bChecked = ListView_GetCheckState( m_ListCtrl.m_hWnd,nItem );
if(!bChecked)
{// 勾选,设置整行选中状态
SetItemState( nItem , LVIS_SELECTED , LVIS_SELECTED );
}
else
{// 消除整行选中状态
SetItemState( nItem , 0, LVIS_SELECTED );
}
}
}
更多追问追答
追问
IDC_MYLIST这个IDC是子窗口中列表控件的ID么?&CDlgUPText::OnClickMyList是什么意思?
m_ListCtrl是什么啊?新建的变量么?
疑问?
追答
就是你的m_CalList,IDC_MYLIST这个IDC是子窗口中列表控件的ID,CDlgUPText::OnClickMyList是你的消息响应函数,你看看ON_NOTIFY的定义
展开全部
说实话,还没看懂你说的什么意思。
什么单独的一列,单独在哪?除了第一列还能在其它列有复选框?
什么单独的一列,单独在哪?除了第一列还能在其它列有复选框?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
遍历列表,如果这一行选中了就执行你的处理
for (int i=0; i<m_CalList.GetItemCount(); i++)
{
if (m_CalList.GetCheck(i))
{
//你的处理
}
}
for (int i=0; i<m_CalList.GetItemCount(); i++)
{
if (m_CalList.GetCheck(i))
{
//你的处理
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询