Re: Wizard in MFC !! (How do I design one?)
I've also done this with tabbed pp and ps on a dialog-based app. It works
very well.
Here's the OnInitDialog that does it:
BOOL CVMRDialog::OnInitDialog()
{
CDialog::OnInitDialog();
// load the menu
m_menu.LoadMenu(IDR_MAINFRAME);
SetMenu(&m_menu);
m_menu.EnableMenuItem(ID_CHANNEL_CLOSE, MF_GRAYED);
OnChannelNew(); // adds the initial prop -page-
// create the property -sheet-
m_propsheet.Create(this, WS_CHILD|WS_VISIBLE);
m_propsheet.ModifyStyleEx(0, WS_EX_CONTROLPARENT);
// tighten up the size of the main dialog box
// to fit neatly around the prop pages
CMainDlg* pp = (CMainDlg*)m_propsheet.GetActivePage();
RECT rect;
// no need to call ScreenToClient - we're only using
// values for relative sizing
pp->GetWindowRect(&rect);
// get the tab rect so the tab height can
// be accounted for
CTabCtrl* tcp = m_propsheet.GetTabControl();
RECT trect;
tcp->GetItemRect(0, &trect);
SetWindowPos(NULL,
0,0,rect.left+rect.right,rect.bottom+(trect.bottom-trect.top),
SWP_NOZORDER | SWP_NOMOVE | SWP_NOACTIVATE);
return TRUE;
}
And OnChannelNew (a menu selection):
void CVMRDialog::OnChannelNew()
{
CMainDlg *pnewChannel;
pnewChannel = new CMainDlg(this);
if (pnewChannel != NULL)
{
m_chList.insert(m_chList.end(), pnewChannel);
m_chIter = m_chList.end();
m_propsheet.AddPage(pnewChannel);
m_propsheet.SetActivePage(pnewChannel);
if (m_chList.size() > 1)
m_menu.EnableMenuItem(ID_CHANNEL_CLOSE, MF_ENABLED);
}
else //pnewChannel != NULL
{
AfxMessageBox("New Port Create Failed");
}
}
"Tom Serface" <tom.nospam@camaswood.com> wrote in message
news:6A68C4FB-1D85-4DBF-969E-8F02EF4FB4D6@microsoft.com...
This code uses propertypages as separate child dialogs, but it displays
them on a dialog with a tree control to move from page to page.
http://www.codeproject.com/KB/dialog/csettingsdlg.aspx
Tom
"David Wilkinson" <no-reply@effisols.com> wrote in message
news:ua%23rKVOOIHA.6060@TK2MSFTNGP05.phx.gbl...
David Ching wrote:
"Jessica" <Jessica@discussions.microsoft.com> wrote in message
news:7B981D9B-9D75-491F-9A5E-823B011A8538@microsoft.com...
Hello Tom,
Can I create a dialog, implement a left pane which displays the steps
of the
wizard with the currently active step highlighted, and then put the
ProperySheet in the main area of the dialog? Or can I only display the
Propertysheet standalone in a frame?
There isn't any way of putting a PropertySheet into another dialog,
unfortunately. If you want to keep using the PropertySheet (and it is
the easiest way of creating a wizard), then you could make each
"interior page" (all pages except the first and last ones) show an image
on the left side of the page. This is what the first and last pages
have by default. And the image you show on the interior pages would
have the list of steps, with the one for the current page highlighted.
But this is harder to localize, since all of the text in the steps is
put into a graphic.
David:
I've never done it, but I think you can put a modeless property sheet
inside a modal dialog (or anywhere).
--
David Wilkinson
Visual C++ MVP