示例#1
0
BOOL
CSecondPage::OnSetActive()
{
	CPrinterSetupWizardSheet	*	psheet;
	Printer						*	printer;
	Printers::iterator				it;
	OSStatus						err = kNoErr;
	BOOL							b;

	b = CPropertyPage::OnSetActive();

	psheet = reinterpret_cast<CPrinterSetupWizardSheet*>(GetParent());
	require_action( psheet, exit, err = kUnknownErr );

	// Stash the selected printer if any

	printer = psheet->GetSelectedPrinter();

	// initialize the browse list...this will remove everything currently
	// in it, and add the no printers item

	InitBrowseList();

	// Populate the list with any printers that we currently know about

	for ( it = psheet->m_printers.begin(); it != psheet->m_printers.end(); it++ )
	{
		OnAddPrinter( *it, false );
	}

	// And if we hit 'Back' from page 3, then re-select printer

	if ( ( psheet->GetLastPage() == psheet->GetPage( 2 ) ) && printer )
	{
		psheet->SetSelectedPrinter( printer );
		m_browseList.Select( printer->item, TVGN_FIRSTVISIBLE );
	}

exit:

	return b;
}
BOOL
CThirdPage::OnSetActive()
{
    CPrinterSetupWizardSheet	*	psheet;
    Printer						*	printer;
    Service						*	service;

    psheet = reinterpret_cast<CPrinterSetupWizardSheet*>(GetParent());
    require_quiet( psheet, exit );

    psheet->SetWizardButtons( PSWIZB_BACK );

    printer = psheet->GetSelectedPrinter();
    require_quiet( printer, exit );

    service = printer->services.front();
    require_quiet( service, exit );

    //
    // call OnInitPage once
    //
    if (!m_initialized)
    {
        OnInitPage();
        m_initialized = true;
    }

    //
    // <rdar://problem/4580061> mDNS: Printers added using Bonjour should be set as the default printer.
    //
    if ( DefaultPrinterExists() )
    {
        m_defaultPrinterCtrl.SetCheck( BST_UNCHECKED );
        printer->deflt = false;
    }
    else
    {
        m_defaultPrinterCtrl.SetCheck( BST_CHECKED );
        printer->deflt = true;
    }

    //
    // update the UI with the printer name
    //
    m_printerName.SetWindowText(printer->displayName);

    //
    // populate the list controls with the manufacturers and models
    // from ntprint.inf
    //
    PopulateUI( m_manufacturers );

    //
    // and try and match the printer
    //

    if ( psheet->GetLastPage() == psheet->GetPage(0) )
    {
        MatchPrinter( m_manufacturers, printer, service, true );

        if ( ( m_manufacturerSelected != NULL ) && ( m_modelSelected != NULL  ) )
        {
            GetParent()->PostMessage(PSM_SETCURSEL, 2 );
        }
    }
    else
    {
        SelectMatch(printer, service, m_manufacturerSelected, m_modelSelected);
    }

exit:

    return CPropertyPage::OnSetActive();
}