在文档/视图结构中的滚动条的设置

lhzsu 2009-08-25 08:17:54
我把窗体分割成两个窗口,在左边的窗体中我利用UpdateAllViews(this,0,0)向右边的窗体发消息,在右边的窗体中的OnUpdate()函数中利用一个全局变量,使得每收到一个消息就生成一个矩形,每一个程序大约都要生成20多个矩形,所以我安装上滚动条,但就是控制不了,现象是:画出的矩形只在一屏上显示(因为矩形比较大,只能显示2.5个左右),当用滚动条移动时,移出屏幕后再移回来就会消失.

下面是两个函数中的代码: 其中m_iStepCount , m_iChess[9]是左边窗体传过来的全局变量.
void CMMMMViewRight::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();


SIZE size={3000,1500};
SetScrollSizes(MM_TEXT,size);

// TODO: Add your specialized code here and/or call the base class

}

void CMMMMViewRight::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
{
// TODO: Add your specialized code here and/or call the base class

RECT rect;
CClientDC dc(this);
CString ch[2];
int tcount=0;


for (int i = 0 ; i < 3 ; i ++)
{
for (int j = 0 ; j < 3 ; j ++)
{
SetRect(&rect , 115, 10+ m_iStepCount*160, 155 , 50+ m_iStepCount*160);
OffsetRect(&rect , i * 40 , j * 40 );
dc.Rectangle(rect.left , rect.top , rect.right , rect.bottom);
}
}


for (int m = 0 ; m< 3 ; m ++)
{
for ( int n = 0 ; n < 3 ; n ++)
{
//int t = m_iChess[9];
int t = m_iChess[tcount++];
rect.left = n * 40;
rect.top = m * 40;
rect.right = rect.left + 15;
rect.bottom = rect.top + 15;
OffsetRect(&rect , 12+115 , 12+10+ m_iStepCount*160 );
if (t != 0 )
{
//因为t是整数,现在加上一个字符,则整体为一个字符即ch[0]=t,ch[1]=0;
ch[0]=t+'0';
dc.DrawText(ch[0],&rect,DT_CENTER);
//不能写成这个样子:这是SDK写的,DrawText("AA", &rect3,DT_CENTER);
}
else
{
ch[0] = ch[1] = ' ';
dc.DrawText(ch[0],&rect,DT_CENTER);
}
}
}


}
...全文
88 点赞 收藏 2
写回复
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
lhzsu 2009-08-25
OnPaint可以接收UpdateAllViews(this,0,0)的消息吗
回复
dayong576 2009-08-25
在OnPaint里面画
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告
暂无公告