Header文件
class CDetailView : public CScrollView
{
DECLARE_DYNCREATE(CDetailView)
protected:
CDetailView(){}
virtual ~CDetailView(){}
public:
virtual void OnDraw(CDC* pDC);
virtual void OnInitialUpdate();
virtual void OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint);
virtual void OnSize(UINT nType, int cx, int cy);
virtual BOOL OnEraseBkgnd(CDC* pDC);
....
}
CPP文件
void CDetailView :: OnDraw(CDC* pDC)
{
/*draw something*/
/*这里没有调用SetScrollSizes*/
}
void CDetailView : :OnInitialUpdate()
{
/*draw something*/
OnUpdate(NULL, 0, NULL);
}
void CDetailView : :OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
{
CDC* pDC =GetDC();
CFont* pOldFont = nullptr;
pOldFont = pDC->SelectObject(&m_font);
CRgn rgnVoid;
rgnVoid.CreateRectRgn(-1,-1,-1,-1);
pDC->SelectClipRgn(&rgnVoid);
SIZE szTextSize = pDC->GetTextExtent(L"Not Seletect");
SetScrollSizes(MM_TEXT, szTextSize);
pDC->SelectObject(pOldFont);
ReleaseDC(pDC);
Invalidate();
}
void CDetailView : :OnSize(UINT nType, int cx, int cy)
{
/*draw something*/
OnUpdate(NULL, 0, NULL);
}
基本的Code逻辑如上,上面页面Run->Stop循环W次以上,会出现crash,
位置在OnUpdate里的SetScrollSizes函数内部,最后Windows ExceptionCode==0xe06d7363.
想问问大神,这种情况是因为构造函数里没有初始化SetScrollSizes导致的吗?因为看msdn要求,CScrollView函数的构造函数里,必须调用SetScrollSizes。
另外OnDraw里是不是也需要调用SetScrollSizes?