救急:自画的CListCtrl中横向滚动时出现的问题?

Eagle_999 2000-09-22 02:31:00
自画的CListCtrl在横向滚动后,刷新后仍为未滚动前的画面(及仍为第0列开始的)。
请问该如何解决????
我旧只这点分了!!!希望各位指点一条明路!我不胜感激!!
...全文
218 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eagle_118 2000-09-25
  • 打赏
  • 举报
回复
关注
Eagle_999 2000-09-25
  • 打赏
  • 举报
回复
求求大家;我急需,请各位高手帮我看看,到底是怎么一回事?
自画的CListCtrl横向滚动时,刷新后,仍为刷新滚动前的数据;
滚动前: 滚动后: 刷新后:
-------------------- -------------------------- ----------------------------
¦head1 ¦head2 ¦ ¦ head n ¦ head n+1 ¦ ¦ head n ¦ head n+1¦
-------------------- -------------------------- -----------------------------
¦ item 1¦item 2 ¦ ¦ item n ¦ item n+1 ¦ ¦item 1 ¦ item 2 ¦

自画代码见上面的代码;
谢谢!!!!!
Eagle_999 2000-09-25
  • 打赏
  • 举报
回复
求求大家;我急需,请各位高手帮我看看,到底是怎么一回事?
自画的CListCtrl横向滚动时,刷新后,仍为刷新滚动前的数据;
滚动前: 滚动后: 刷新后:
-------------------- —————————————— ———————————————
|head1 |head2 | | head n | head n+1 | | head n | head n+1|
-------------------- —————————————— ———————————————
| item 1|item 2 | | item n | item n+1 | |item 1 | item 2 |

自画代码见上面的代码;
谢谢!!!!!
wsoft 2000-09-25
  • 打赏
  • 举报
回复
试一试,我没试过!!!
for(int i=0;i<m_iColumns;i++) //不要这样建立循环 ,删除
{
CString str=GetItemText(iLine,i);
CSize size=pDC->GetTextExtent(str);

rect.left=rect.right;
rect.right=rect.left+GetColumnWidth(i);
if(rect.left!=0)
rect.left--;
.
.
.
}

//
CBrush brush;
CPen pen;
if(lpDrawItemStruct->itemState&ODS_SELECTED)
{
brush.CreateSolidBrush(m_crSelBk);
pen.CreatePen(PS_SOLID,2,RGB(255,255,255));
pDC->SetTextColor(m_crSelText);
}
else if(lpDrawItemStruct->itemState&ODS_FOCUS)
{
brush.CreateSolidBrush(m_crActiveBk);
pen.CreatePen(PS_SOLID,1,RGB(0,0,0));
pDC->SetTextColor(m_crActiveText);
}
else
{
if(lpDrawItemStruct->itemID%2)
{
brush.CreateSolidBrush(RGB(255,245,245));
}
else
{
brush.CreateSolidBrush(RGB(245,245,255));
}
pen.CreatePen(PS_SOLID,1,RGB(128,128,128));
pDC->SetTextColor(m_crText);
}
pDC->SelectObject(&brush);
pDC->SelectObject(&pen);

//rect.left+=4;
for(int i=0;i<m_iColumns;i++)
{
CString str=GetItemText(iLine,i);
GetSubItemRect(iLine,i,LVIR_BOUNDS,rect);
pDC->Rectangle(&rect);
pDC->DrawText(str,str.GetLength(),&rect,DT_LEFT);
}
}
haitian99 2000-09-25
  • 打赏
  • 举报
回复
在你程序的开始处,
rect=lpDrawItemStruct->rcItem;
rect.left=rect.right=0; 这一行是干什么的?
你清0了,所以无论你如何滚动,总是要从isubitem=0 画起。
把这一行注释掉,试验一下吧。
Eagle_118 2000-09-23
  • 打赏
  • 举报
回复
下面是重载的DrawItem():
void CReport::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
int iLine=lpDrawItemStruct->itemID;
CRect rect;

CDC * pDC=CDC::FromHandle(lpDrawItemStruct->hDC);
pDC->SetBkMode(TRANSPARENT);
rect=lpDrawItemStruct->rcItem;
rect.left=rect.right=0;
rect.bottom++;
CPen * pOldpen=pDC->GetCurrentPen();
CBrush * pOldbrush=pDC->GetCurrentBrush();
COLORREF crText=pDC->GetTextColor();

if(!m_edit)
{
int n=m_edit.Create(WS_CHILD|ES_LEFT|WS_BORDER|WS_VISIBLE|ES_MULTILINE,m_rCur,this,1600);
CFont * font=pDC->GetCurrentFont();
m_edit.SetFont(font);
}

for(int i=0;i<m_iColumns;i++)
{
CString str=GetItemText(iLine,i);
CSize size=pDC->GetTextExtent(str);

rect.left=rect.right;
rect.right=rect.left+GetColumnWidth(i);
if(rect.left!=0)
rect.left--;
CBrush brush;
CPen pen;
if(lpDrawItemStruct->itemState&ODS_SELECTED)
{
brush.CreateSolidBrush(m_crSelBk);
pen.CreatePen(PS_SOLID,2,RGB(255,255,255));
pDC->SetTextColor(m_crSelText);
}
else if(lpDrawItemStruct->itemState&ODS_FOCUS)
{
brush.CreateSolidBrush(m_crActiveBk);
pen.CreatePen(PS_SOLID,1,RGB(0,0,0));
pDC->SetTextColor(m_crActiveText);
}
else
{
if(lpDrawItemStruct->itemID%2)
{
brush.CreateSolidBrush(RGB(255,245,245));
}
else
{
brush.CreateSolidBrush(RGB(245,245,255));
}
pen.CreatePen(PS_SOLID,1,RGB(128,128,128));
pDC->SetTextColor(m_crText);
}
pDC->SelectObject(&brush);
pDC->SelectObject(&pen);

pDC->Rectangle(&rect);
rect.left+=4;
pDC->DrawText(str,str.GetLength(),&rect,DT_LEFT);
}

pDC->SelectObject(pOldpen);
pDC->SelectObject(pOldbrush);
pDC->SetTextColor(crText);
}
Eagle_999 2000-09-23
  • 打赏
  • 举报
回复
关注
wsoft 2000-09-22
  • 打赏
  • 举报
回复
SetRedraw(TRUE)
Invalidate();
breath 2000-09-22
  • 打赏
  • 举报
回复
没有源代码怎么看
Eagle_118 2000-09-22
  • 打赏
  • 举报
回复
关注
Eagle_999 2000-09-22
  • 打赏
  • 举报
回复
关注

16,471

社区成员

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

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

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