由于之前建的项目的View类是继承CView基类的,所以如大多数文章描述的,把所有的CView替换成CScrollView,但是替换之后出现错误:viewscrl.cpp line:396 Debug Assertion Failed错误。经过调试定位后发现需要对滚动条初始化。在项目View类中添加的OnInitialUpdate函数和构造函数中添加初始化代码:
void CCADProjectView::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
//初始化滚动条
CSize sizeTotal;
// TODO: 计算此视图的合计大小
sizeTotal.cx = sizeTotal.cy = 10000;
SetScrollSizes(MM_TEXT, sizeTotal);
//设置初始位置
CRect re;
GetClientRect(&re);
this->SetScrollPos(SB_HORZ, 5000 - re.Width() / 2);
this->SetScrollPos(SB_VERT, 5000 - re.Height() / 2);
}
CCADProjectView::CCADProjectView()
{
<span style="white-space:pre"> </span>……
//初始化滚动条
CSize sizeTotal;
// TODO: 计算此视图的合计大小
sizeTotal.cx = sizeTotal.cy = 10000;
SetScrollSizes(MM_TEXT, sizeTotal);
}

在MFC单文档应用中,将CView替换为CScrollView后,需注意滚动条初始化,否则可能出现Debug Assertion Failed错误。问题源于逻辑坐标与设备坐标不一致导致的绘图错位。通过在OnInitialUpdate和构造函数中添加滚动条初始化代码可解决。在绘图时,务必在GetScrollPosition前调用OnPrepareDC以调整视图,确保鼠标消息下的正确绘图。鼠标指针设置使用SetCursor,避免闪烁可通过重载PreCreateWindow函数实现。
719

被折叠的 条评论
为什么被折叠?



