运用CListView编程时碰到的几个问题,请进!

syberprince 2002-08-22 03:09:41
愚兄正在运用CListView编程,可是碰到了几个奇怪的问题:
1、如果显示的条目超出了列表视图的高度,也就是出现了垂直滚动条,当我用键盘的上下键控制选中的条目时,虽然选中的条目到了目前看不见的条目上,但是视图却不相应的滚动,需要用鼠标拖动滚动条,难道要编程实现这个功能?

2、在某个条目上单击右键,出现的弹出式菜单有些该变灰的却能用,需要用的却变灰了,而同样是在主菜单上操作,却没有出现这样的现象

3、当子项目不能完全显示里面的内容时,鼠标放在上面没有出现一个显示全部内容的黄色的窗口

请各位帮忙解决一个。多谢!
...全文
37 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
syberprince 2002-08-24
  • 打赏
  • 举报
回复
下面这段效果一样:


void CWGView::OnRightClick(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
DWORD dwPos = ::GetMessagePos();
CPoint point((int) LOWORD (dwPos), (int) HIWORD(dwPos));
CPoint pt = point;
GetListCtrl().ScreenToClient(&point);

int nIndex;
if((nIndex = GetListCtrl().HitTest(point)) != -1)
{
GetListCtrl().SetItemState(nIndex, LVIS_SELECTED, LVIS_SELECTED);
CString strTemp = GetListCtrl().GetItemText(nIndex, 0);
if(strTemp == _T("FILE"))
{
CMenu *pMenu = new CMenu;
pMenu->LoadMenu(IDR_MAINFRAME);
pMenu = pMenu->GetSubMenu(2);

pMenu->TrackPopupMenu(0, pt.x, pt.y, this, 0);

// No need to delete pMenu because it is an MFC
// temporary object.
}

}
*pResult = 0;
}
syberprince 2002-08-24
  • 打赏
  • 举报
回复
void CWGView::OnRightClick(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
DWORD dwPos = ::GetMessagePos();
CPoint point((int) LOWORD (dwPos), (int) HIWORD(dwPos));
CPoint pt = point;
GetListCtrl().ScreenToClient(&point);

int nIndex;
if((nIndex = GetListCtrl().HitTest(point)) != -1)
{
GetListCtrl().SetItemState(nIndex, LVIS_SELECTED, LVIS_SELECTED);
CString strTemp = GetListCtrl().GetItemText(nIndex, 0);
if(strTemp == _T("FILE"))
{
CMenu *pMenu = new CMenu;
pMenu->LoadMenu(IDR_POPUPMENU);
pMenu = pMenu->GetSubMenu(0);

pMenu->TrackPopupMenu(0, pt.x, pt.y, this, 0);

// No need to delete pMenu because it is an MFC
// temporary object.
}

}
*pResult = 0;
}
sans 2002-08-24
  • 打赏
  • 举报
回复
问题2,要看看你的代码;
问题3,CListView没有CTreeView中类似的功能,你必须自己去实现,可以借鉴一下tooltip。
syberprince 2002-08-22
  • 打赏
  • 举报
回复
sans(sans)的方法能够解决第一个问题,请其他的人帮忙看看第二个问题
多谢 sans(sans)!
siphonelee 2002-08-22
  • 打赏
  • 举报
回复
up
sans 2002-08-22
  • 打赏
  • 举报
回复
1、使用如下代码:
int nSelected=m_listCtrl.GetNextItem(-1,LVNI_ALL|LVNI_FOCUSED|LVNI_SELECTED);
m_listCtrl.SetItemState(nSelected,LVNI_FOCUSED|LVNI_SELECTED,LVNI_FOCUSED|LVNI_SELECTED);
m_listCtrl.EnsureVisible( nSelected, TRUE );

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧