CScrollView within a CDialog
I've written a small test app that places a CScrollView-derived class
into a CDialog. It's a simple app and it appears do to everything I
expect, until I select OK or CANCEL to terminate the dialog. At that
point the program aborts with a message of:
Warning: Creating a pane with no CDocument
HEAP[ScrollTest.exe]: Invalid Address specified to
RtlValidateHeap( 00350000, 0035AD1C )
The (I believe) pertinent lines of the stack trace are:
msvcr80d.dll!_CrtIsValidHeapPointer(const void *
pUserData=0x0035ad3c) Line 1963 C++
msvcr80d.dll!_free_dbg_nolock(void * pUserData=0x0035ad3c, int
nBlockUse=12582916) Line 1252 + 0x9 bytes C++
msvcr80d.dll!_free_dbg(void * pUserData=0x0035ad3c, int
nBlockUse=12582916) Line 1194 + 0xd bytes C++
mfc80ud.dll!CObject::operator delete(void * p=0x0035ad3c) Line 42 +
0xf bytes C++
ScrollTest.exe!CScrollWnd::`scalar deleting destructor'() + 0x3c
bytes C++
....
I'm new to MFC so there's a lot of fundamental things I haven't really
had a chance to learn yet. I wonder though, if this has to do with how
I am attaching my CScrollView-derived object onto the CDialog class:
BOOL CScrollDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// IDC_STATIC_AREA is a CStatic object
CWnd* pWnd = GetDlgItem(IDC_STATIC_AREA);
CRect rect;
pWnd->GetWindowRect(rect);
ScreenToClient(rect);
// m_scrollingView is an object of a class derived from
CScrollView
m_scrollingView.Attach(this, rect);
return TRUE;
}
and subsequently creating it:
void CScrollingView::Attach(CWnd* pWnd, CRect& rect, UINT id)
{
CScrollView::Create(_T("TestWnd"), _T(""), WS_CHILD|WS_VISIBLE, rect,
pWnd, id);
...
}
Since the problem seems to manifest in the deletion of the
CScrollingView object, I expect that I'm not creating it properly. I
would appreciate any help.