clistctrl如何复选?不需要按住ctrl键?? CListCtrl::SetItemState(nIndex, LVIS_SELECTED, LVIS_SELECTED); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 void newctrl::OnNMClick(NMHDR *pNMHDR, LRESULT *pResult){// LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<NMITEMACTIVATE>(pNMHDR); NMLISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; if(pNMListView->iItem > 0) { if( GetItemState(pNMListView->iItem, LVIS_SELECTED) == LVIS_SELECTED ) SetItemState(pNMListView->iItem, ~LVIS_SELECTED, ~LVIS_SELECTED); else SetItemState(pNMListView->iItem, LVIS_SELECTED, LVIS_SELECTED); }*pResult = 0; 老大,按照你的做法,没有成功啊 选择SetItemState(pos, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED);去掉选择SetItemState(pos, 0, LVIS_SELECTED); 用选择框比较好!!m_List.ModifyStyle(LVS_TYPEMASK, LVS_REPORT | LVS_SHOWSELALWAYS | LVS_SINGLESEL);m_List.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_CHECKBOXES);m_List.InsertColumn(0, _T("第一列"), LVCFMT_LEFT, 100);m_List.InsertColumn(1, _T("第二列"), LVCFMT_LEFT, 100);m_List.InsertItem(m_List.GetItemCount(),_T("1"));m_List.SetItemText(m_List.GetItemCount()-1,1,_T("数据1"));m_List.SetItemText(m_List.GetItemCount()-1,2,_T("数据2")); BOOL CXXDlg::PreTranslateMessage(MSG* pMsg) { // TODO: Add your specialized code here and/or call the base class if((WM_LBUTTONDOWN == pMsg->message) && (m_list.GetSafeHwnd() == pMsg->hwnd)) { CPoint pt; GetCursorPos(&pt); m_list.ScreenToClient(&pt); LVHITTESTINFO info = {0}; info.pt = pt; info.flags = LVHT_ONITEMLABEL; if(-1 != m_list.SubItemHitTest(&info)) { CString str; str.Format(_T("%d, %d"), info.iItem, info.iSubItem); SetWindowText(str); m_list.SetItemState(info.iItem, (LVIS_SELECTED == m_list.GetItemState(info.iItem, LVIS_SELECTED) ? 0 : LVIS_SELECTED), LVIS_SELECTED); return TRUE; } } return CDialog::PreTranslateMessage(pMsg);}至于需要高亮蓝色,你可能需要自绘,处理DrawItem虚函数 想这样的需求如果你不需要自绘,直接用更改State的做法,那么你在以后将很难进行控制.最好的方法是自绘. 谢谢各位,特别是部长。通过部长的代码和在自绘里面解决了。 POSITION pos = GetFirstSelectedItemPosition(); while(pos) { int index = GetNextSelectedItem(pos); if (lpDrawItemStruct->itemID == index) { //SetItemState(index, 0,LVIS_SELECTED); //SetItemState(index, LVIS_SELECTED, 0); pDC->FillSolidRect(&lpDrawItemStruct->rcItem, GetSysColor(COLOR_HIGHLIGHT)) ; pDC->SetTextColor(GetSysColor(COLOR_HIGHLIGHTTEXT)) ; } } 高亮蓝色,无需重绘,SetFocus() 就可以了。 adobe reader的浮动工具栏是怎么实现的 用了双缓冲屏幕还是闪!!! 如何实现窗体闪烁的效果? Vs2005+Access,AddNew 出现记录集只读??VC6下没有问 CreateInstance创建完对象不用了是不是要删除,怎么样删除? 移植Dialog vc中如何使用ado,在线等待 寻找高手,那里有类似outlook express软件的vc原码呀?给我一点概念吧 怎么才能正确显示XML文档 我是一个新手 请问一个问题~希望告诉我错在那了 谢谢 怎么才能把波形图画得更好看?请看下这幅图。 CHtmlView控件 如何获取页面文本
void newctrl::OnNMClick(NMHDR *pNMHDR, LRESULT *pResult)
{
// LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<NMITEMACTIVATE>(pNMHDR);
NMLISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; if(pNMListView->iItem > 0)
{
if( GetItemState(pNMListView->iItem, LVIS_SELECTED) == LVIS_SELECTED )
SetItemState(pNMListView->iItem, ~LVIS_SELECTED, ~LVIS_SELECTED);
else
SetItemState(pNMListView->iItem, LVIS_SELECTED, LVIS_SELECTED); }*pResult = 0;
老大,按照你的做法,没有成功啊
去掉选择SetItemState(pos, 0, LVIS_SELECTED);
m_List.ModifyStyle(LVS_TYPEMASK, LVS_REPORT | LVS_SHOWSELALWAYS | LVS_SINGLESEL);
m_List.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_CHECKBOXES);
m_List.InsertColumn(0, _T("第一列"), LVCFMT_LEFT, 100);
m_List.InsertColumn(1, _T("第二列"), LVCFMT_LEFT, 100);
m_List.InsertItem(m_List.GetItemCount(),_T("1"));
m_List.SetItemText(m_List.GetItemCount()-1,1,_T("数据1"));
m_List.SetItemText(m_List.GetItemCount()-1,2,_T("数据2"));
BOOL CXXDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if((WM_LBUTTONDOWN == pMsg->message) && (m_list.GetSafeHwnd() == pMsg->hwnd))
{
CPoint pt;
GetCursorPos(&pt);
m_list.ScreenToClient(&pt);
LVHITTESTINFO info = {0};
info.pt = pt;
info.flags = LVHT_ONITEMLABEL;
if(-1 != m_list.SubItemHitTest(&info))
{
CString str;
str.Format(_T("%d, %d"), info.iItem, info.iSubItem);
SetWindowText(str);
m_list.SetItemState(info.iItem, (LVIS_SELECTED == m_list.GetItemState(info.iItem, LVIS_SELECTED) ? 0 : LVIS_SELECTED), LVIS_SELECTED);
return TRUE;
}
}
return CDialog::PreTranslateMessage(pMsg);
}至于需要高亮蓝色,你可能需要自绘,处理DrawItem虚函数
想这样的需求如果你不需要自绘,直接用更改State的做法,那么你在以后将很难进行控制.
最好的方法是自绘.
通过部长的代码和在自绘里面解决了。
POSITION pos = GetFirstSelectedItemPosition();
while(pos)
{
int index = GetNextSelectedItem(pos);
if (lpDrawItemStruct->itemID == index)
{
//SetItemState(index, 0,LVIS_SELECTED);
//SetItemState(index, LVIS_SELECTED, 0);
pDC->FillSolidRect(&lpDrawItemStruct->rcItem, GetSysColor(COLOR_HIGHLIGHT)) ;
pDC->SetTextColor(GetSysColor(COLOR_HIGHLIGHTTEXT)) ;
}
}