MFC单文档绘图(三)——滚动条、鼠标指针

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

由于之前建的项目的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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值