Link to home
Start Free TrialLog in
Avatar of cyourch
cyourch

asked on

CPropertySheet in a CFormView

I have run into a problem embedding a CPropertySheet into a CFormView as a child window. What I am doing is implementing a "find" view window, kind of like the find dialog in Windows 95.

I basically create the CPropertySheet as a child window of my view and then add my property pages. In addition, I have a few controls that are part of the underlying CFormView too. Things work fine when I compile for Win 3.x but I get an exception under Win32. The exception cannot be ignored, my application basically crashes.

I am using MSVC 4.2b and I get the exception in CPropertySheet::Create() on the following line:

HWND hWnd = (HWND)PropertySheet(&m_psh);

Any ideas?
ASKER CERTIFIED SOLUTION
Avatar of mbhakta
mbhakta

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of cyourch
cyourch

ASKER

There is a CPropertySheet as a member of my derived CFormView class.

CPropertySheetView::CPropertySheetView(UINT nIDTemplate) :
      CFormView(nIDTemplate)
{
  m_PropSheet = new CPropertySheetEx(AFX_IDS_APP_TITLE, this, 0);
}

int CPropertySheetView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
  if (CFormView::OnCreate(lpCreateStruct) == -1)
    return -1;

#ifdef WIN32
  DWORD dwSheetStyle = DS_MODALFRAME | DS_SETFONT | WS_CHILD | WS_VISIBLE | WS_TABSTOP | DS_3DLOOK | DS_CONTEXTHELP;
#else
 // The WS_SYSMENU style is needed because the 16-bit MFC
 // property sheet
 // class looks for a system menu.
  DWORD dwSheetStyle = DS_MODALFRAME|DS_SETFONT|WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_SYSMENU;
#endif

 // This causes the following error under win32.
 // "First-chance exception in Nman32.exe: 0xC0000005: Access Violation."
 if (!m_PropSheet->Create(this, dwSheetStyle))
    return -1;

 // Assign an id to the property sheet window.
  ::SetDlgCtrlID(m_PropSheet->m_hWnd, IDC_PROPERTYSHEET);

  return 0;
}

Using a standard CPropertySheet as a child control can cause
problems (as admitted by Microsoft).  Try subclassing from
CPropertySheet and set its style to WS_EX_CONTROLPARENT.  This
fixes a focus bug in property sheets.

See "www.microsoft.com/kb/articles/q149/5/01.htm" for specific
instructions.

Create your CPropertySheet based window without a parent. Once, it is created successfully use SetParent() , to make the property sheet of the FormView.
Avatar of cyourch

ASKER

Neither of the above ideas worked! I have decided to scrap the idea of making a property sheet a child of my view. Instead, I think the better approach for me is to embed a CTabCtrl and do my own property pages. This will work better because I still had tabbing problems with the proeprty sheet approach.
Ok , then please get in touch with the webmaster and cancel this question. This will save all experts from entering this expired question.