CPropertySheet
Třída
Představuje seznamy vlastností, označované také jako dialogová okna karet.
Syntaxe
class CPropertySheet : public CWnd
Členové
Veřejné konstruktory
Název | Popis |
---|---|
CPropertySheet::CPropertySheet |
CPropertySheet Vytvoří objekt. |
Veřejné metody
Název | Popis |
---|---|
CPropertySheet::AddPage |
Přidá stránku do seznamu vlastností. |
CPropertySheet::Construct |
CPropertySheet Vytvoří objekt. |
CPropertySheet::Create |
Zobrazí seznam bez moderování vlastností. |
CPropertySheet::DoModal |
Zobrazí seznam modálních vlastností. |
CPropertySheet::EnableStackedTabs |
Určuje, zda seznam vlastností používá skládané nebo posuvné karty. |
CPropertySheet::EndDialog |
Ukončí seznam vlastností. |
CPropertySheet::GetActiveIndex |
Načte index aktivní stránky seznamu vlastností. |
CPropertySheet::GetActivePage |
Vrátí aktivní objekt stránky. |
CPropertySheet::GetPage |
Načte ukazatel na zadanou stránku. |
CPropertySheet::GetPageCount |
Načte počet stránek v seznamu vlastností. |
CPropertySheet::GetPageIndex |
Načte index zadané stránky seznamu vlastností. |
CPropertySheet::GetTabControl |
Načte ukazatel na ovládací prvek tabulátoru. |
CPropertySheet::MapDialogRect |
Převede jednotky dialogového okna obdélníku na jednotky obrazovky. |
CPropertySheet::OnInitDialog |
Přepsání pro inicializaci seznamu vlastností |
CPropertySheet::PressButton |
Simuluje výběr zadaného tlačítka v seznamu vlastností. |
CPropertySheet::RemovePage |
Odebere stránku ze seznamu vlastností. |
CPropertySheet::SetActivePage |
Programově nastaví aktivní objekt stránky. |
CPropertySheet::SetFinishText |
Nastaví text tlačítka Dokončit. |
CPropertySheet::SetTitle |
Nastaví titulek seznamu vlastností. |
CPropertySheet::SetWizardButtons |
Povolí tlačítka průvodce. |
CPropertySheet::SetWizardMode |
Povolí režim průvodce. |
Veřejné datové členy
Název | Popis |
---|---|
CPropertySheet::m_psh |
Struktura Windows PROPSHEETHEADER . Poskytuje přístup k základním parametrům seznamu vlastností. |
Poznámky
Seznam vlastností se skládá z objektu CPropertySheet
a jednoho nebo více CPropertyPage
objektů. Tato architektura zobrazí seznam vlastností jako okno se sadou indexů tabulátoru a oblastí, která obsahuje aktuálně vybranou stránku. Uživatel přejde na konkrétní stránku pomocí příslušné karty.
CPropertySheet
poskytuje podporu rozšířené PROPSHEETHEADER
struktury zavedené v systémech Windows 98 a systém Windows NT 2000. Struktura obsahuje další příznaky a členy, které podporují použití rastrového obrázku na pozadí "vodoznaku".
Chcete-li tyto nové obrázky automaticky zobrazit v objektu seznamu vlastností, předejte platné hodnoty pro rastrové obrázky a obrázky palety ve volání nebo CPropertySheet::Construct
CPropertySheet::CPropertySheet
.
I když CPropertySheet
se neodvozuje z CDialog
objektu , správa objektu CPropertySheet
se podobá správě objektu CDialog
. Například vytvoření seznamu vlastností vyžaduje dvoudílnou konstrukci: volání konstruktoru a následné volání DoModal
modálního seznamu vlastností nebo Create
seznamu bez moderovaných vlastností. CPropertySheet
má dva typy konstruktorů: CPropertySheet::Construct
a CPropertySheet::CPropertySheet
.
Při vytváření objektu CPropertySheet
mohou některé styly oken způsobit první náhodnou výjimku. Výsledkem je, že se systém snaží změnit styl seznamu vlastností před vytvořením listu. Pokud se chcete této výjimce vyhnout, ujistěte se, že při vytváření CPropertySheet
aplikace nastavíte následující styly:
DS_3DLOOK
DS_CONTROL
WS_CHILD
WS_TABSTOP
Následující styly jsou volitelné a nezpůsobí první náhodnou výjimku:
DS_SHELLFONT
DS_LOCALEDIT
WS_CLIPCHILDREN
Všechny ostatní Window Styles
jsou zakázané a neměli byste je povolit.
Výměna dat mezi objektem CPropertySheet
a externím objektem se podobá výměně dat s objektem CDialog
. Důležitým rozdílem je, že nastavení seznamu vlastností jsou obvykle členské proměnné CPropertyPage
objektů, nikoli samotného objektu CPropertySheet
.
Můžete vytvořit typ dialogového okna s názvem průvodce, který se skládá z seznamu vlastností s posloupností stránek vlastností, které uživatele provedou jednotlivými kroky operace, například nastavením zařízení nebo vytvořením bulletinu. V dialogovém okně karty typu průvodce stránky vlastností nemají karty a najednou se zobrazí jenom jedna stránka vlastností. Místo tlačítek OK a Použít nyní obsahuje dialogové okno karta Typ průvodce tlačítko Zpět, tlačítko Další nebo Dokončit, tlačítko Zrušit a tlačítko Nápověda.
Chcete-li vytvořit dialogové okno typu průvodce, postupujte podle stejných kroků jako při vytvoření standardního seznamu vlastností, ale volání SetWizardMode
před voláním DoModal
. Pokud chcete povolit tlačítka průvodce, zavolejte SetWizardButtons
pomocí příznaků přizpůsobit jejich funkci a vzhled. Tlačítko Dokončit povolíte tak, že zavoláteSetFinishText
, až uživatel provede akci na poslední stránce průvodce.
Další informace o tom, jak používat CPropertySheet
objekty, naleznete v článku Seznamy vlastností a stránky vlastností.
Hierarchie dědičnosti
CPropertySheet
Požadavky
Záhlaví: afxdlgs.h
CPropertySheet::AddPage
Přidá zadanou stránku se ouško nejvíce vpravo v seznamu vlastností.
void AddPage(CPropertyPage* pPage);
Parametry
pPage
Odkazuje na stránku, která se má přidat do seznamu vlastností. Nemůže být NULL
.
Poznámky
Přidejte stránky do seznamu vlastností v pořadí zleva doprava, které chcete, aby se zobrazily.
AddPage
CPropertyPage
přidá objekt do CPropertySheet
seznamu stránek objektu, ale ve skutečnosti nevytvoří okno pro stránku. Architektura odloží vytvoření okna pro stránku, dokud uživatel tuto stránku nevybere.
Když přidáte stránku vlastností pomocí AddPage
, CPropertySheet
je nadřazený objekt CPropertyPage
. Chcete-li získat přístup k seznamu vlastností ze stránky vlastností, zavolejte CWnd::GetParent
.
Není nutné čekat na vytvoření okna seznamu vlastností volat AddPage
. Obvykle budete volat AddPage
před voláním DoModal
nebo Create
.
Pokud zavoláte AddPage
po zobrazení stránky vlastností, řádek karty bude odrážet nově přidanou stránku.
Příklad
// Add three pages to a CPropertySheet object, then show the
// CPropertySheet object as a modal dialog. CStylePage, CShapePage,
// and CColorPage are CPropertyPage-derived classes created
// by the Add Class wizard.
CPropertySheet dlgPropertySheet(_T("Simple PropertySheet"));
CStylePage stylePage;
CColorPage colorPage;
CShapePage shapePage;
dlgPropertySheet.AddPage(&stylePage);
dlgPropertySheet.AddPage(&colorPage);
dlgPropertySheet.AddPage(&shapePage);
dlgPropertySheet.DoModal();
CPropertySheet::Construct
CPropertySheet
Vytvoří objekt.
void Construct(
UINT nIDCaption,
CWnd* pParentWnd = NULL,
UINT iSelectPage = 0);
void Construct(
LPCTSTR pszCaption,
CWnd* pParentWnd = NULL,
UINT iSelectPage = 0);
void Construct(
UINT nIDCaption,
CWnd* pParentWnd,
UINT iSelectPage,
HBITMAP hbmWatermark,
HPALETTE hpalWatermark = NULL,
HBITMAP hbmHeader = NULL);
void Construct(
LPCTSTR pszCaption,
CWnd* pParentWnd,
UINT iSelectPage,
HBITMAP hbmWatermark,
HPALETTE hpalWatermark = NULL,
HBITMAP hbmHeader = NULL);
Parametry
nIDCaption
ID titulku, který se má použít pro seznam vlastností.
pParentWnd
Ukazatel na nadřazené okno seznamu vlastností Pokud NULL
, nadřazené okno bude hlavním oknem aplikace.
iSelectPage
Index stránky, která bude zpočátku nahoře. Výchozí hodnota je první stránka přidaná na list.
pszCaption
Ukazatel na řetězec obsahující titulek, který se má použít pro seznam vlastností. Nemůže být NULL
.
hbmWatermark
Úchyt pro rastrový obrázek vodoznaku stránky vlastností
hpalWatermark
Úchyt pro paletu rastrového obrázku vodoznaku nebo rastrového obrázku záhlaví
hbmHeader
Popisovač rastrového obrázku záhlaví stránky vlastností
Poznámky
Volání této členské funkce, pokud jeden z konstruktorů třídy ještě nebyl volána. Volání například při Construct
deklaraci nebo přidělení polí CPropertySheet
objektů. V případě polí je nutné volat Construct
pro každého člena v matici.
Zobrazení seznamu vlastností, volání DoModal
nebo Create
. Řetězec obsažený v prvním parametru se umístí do řádku titulků pro seznam vlastností.
Obrázky vodoznaku nebo záhlaví můžete zobrazit automaticky, pokud použijete třetí nebo čtvrtý prototyp výše uvedených prototypů Construct
a předáte platné hodnoty pro hbmWatermark
parametry , hpalWatermark
a/nebo parametry hbmHeader
.
Příklad
Následující příklad ukazuje, za jakých okolností byste volali Construct
.
const int c_cSheets = 3;
CPropertySheet grpropsheet[c_cSheets];
// no need to call Construct for this next one
CPropertySheet someSheet(_T("Some sheet"));
LPTSTR rgszSheets[c_cSheets] = {
_T("Sheet 1"),
_T("Sheet 2"),
_T("Sheet 3")
};
for (int i = 0; i < c_cSheets; i++)
grpropsheet[i].Construct(rgszSheets[i]);
CPropertySheet::CPropertySheet
CPropertySheet
Vytvoří objekt.
CPropertySheet();
explicit CPropertySheet(
UINT nIDCaption,
CWnd* pParentWnd = NULL,
UINT iSelectPage = 0);
explicit CPropertySheet(
LPCTSTR pszCaption,
CWnd* pParentWnd = NULL,
UINT iSelectPage = 0);
CPropertySheet(
UINT nIDCaption,
CWnd* pParentWnd,
UINT iSelectPage,
HBITMAP hbmWatermark,
HPALETTE hpalWatermark = NULL,
HBITMAP hbmHeader = NULL);
CPropertySheet(
LPCTSTR pszCaption,
CWnd* pParentWnd,
UINT iSelectPage,
HBITMAP hbmWatermark,
HPALETTE hpalWatermark = NULL,
HBITMAP hbmHeader = NULL);
Parametry
nIDCaption
ID titulku, který se má použít pro seznam vlastností.
pParentWnd
Odkazuje na nadřazené okno seznamu vlastností. Pokud NULL
, nadřazené okno bude hlavním oknem aplikace.
iSelectPage
Index stránky, která bude zpočátku nahoře. Výchozí hodnota je první stránka přidaná na list.
pszCaption
Odkazuje na řetězec obsahující titulek, který se má použít pro seznam vlastností. Nemůže být NULL
.
hbmWatermark
Úchyt na rastrový obrázek pozadí listu vlastností.
hpalWatermark
Úchyt pro paletu rastrového obrázku vodoznaku nebo rastrového obrázku záhlaví.
hbmHeader
Popisovač rastrového obrázku záhlaví stránky vlastností.
Poznámky
Zobrazení seznamu vlastností, volání DoModal
nebo Create
. Řetězec obsažený v prvním parametru se umístí do řádku titulků pro seznam vlastností.
Pokud máte více parametrů (například pokud používáte pole), použijte Construct
místo CPropertySheet
.
Vodoznak a/nebo obrázky záhlaví můžete automaticky zobrazit, pokud použijete třetí nebo čtvrtý prototyp CPropertySheet
výše a předáte platné hodnoty pro hbmWatermark
parametry , hpalWatermark
a/nebo hbmHeader
parametry.
Příklad
// Declare a CPropertySheet object titled "Simple PropertySheet".
CPropertySheet dlgPropertySheet1(_T("Simple PropertySheet"));
// Declare a CPropertySheet object whose title is specified in the
// IDS_PROPERTYSHEET_TITLE string resource, and the second page is
// initially on top.
CPropertySheet dlgPropertySheet2(IDS_PROPERTYSHEET_TITLE, this, 1);
CPropertySheet::Create
Zobrazí seznam bez moderování vlastností.
virtual BOOL Create(CWnd* pParentWnd = NULL,
DWORD dwStyle = (DWORD)-1,
DWORD dwExStyle = 0);
Parametry
pParentWnd
Odkazuje na nadřazené okno. Pokud NULL
je nadřazený počítač.
dwStyle
Styly oken pro seznam vlastností Úplný seznam dostupných stylů najdete v tématu Styly oken.
dwExStyle
Rozšířené styly oken pro seznam vlastností Úplný seznam dostupných stylů najdete v tématu Rozšířené styly oken.
Návratová hodnota
Nenulové, pokud je seznam vlastností úspěšně vytvořen; jinak 0.
Poznámky
Volání Create
může být uvnitř konstruktoru nebo ho můžete volat po vyvolání konstruktoru.
Výchozí styl vyjádřený předáním -1 jako dwStyle
, je ve skutečnosti WS_SYSMENU|WS_POPUP|WS_CAPTION|DS_MODALFRAME|DS_CONTEXTHELP|WS_VISIBLE
. Výchozí rozšířený styl okna vyjádřený předáním hodnoty 0 jako dwExStyle
, je ve skutečnosti WS_EX_DLGMODALFRAME
.
Členová Create
funkce se vrátí okamžitě po vytvoření seznamu vlastností. Chcete-li zničit seznam vlastností, zavolejte CWnd::DestroyWindow
.
Seznamy vlastností bez režimu zobrazené s voláním Create
nemají tlačítka OK, Zrušit, Použít nyní a Nápověda jako modální seznamy vlastností. Požadovaná tlačítka musí vytvořit uživatel.
Chcete-li zobrazit modální seznam vlastností, místo toho zavolejte DoModal
.
Příklad
// This code fragment shows how to create a modeless property sheet
// dialog in a command message handler (OnModelessPropertySheet())
// of a CView-derived class.
void CPSheetView::OnModelessPropertySheet()
{
// Declare a CPropertySheet object. m_pdlgPropertySheet is a data
// member of type CPropertySheet in CView-derived class.
m_pdlgPropertySheet = new CPropertySheet(_T("Simple PropertySheet"));
ASSERT(m_pdlgPropertySheet);
// Add three pages to the CPropertySheet object. Both m_pstylePage,
// m_pcolorPage, and m_pshapePage are data members of type
// CPropertyPage-derived classes in CView-derived class.
m_pstylePage = new CStylePage;
m_pcolorPage = new CColorPage;
m_pshapePage = new CShapePage;
m_pdlgPropertySheet->AddPage(m_pstylePage);
m_pdlgPropertySheet->AddPage(m_pcolorPage);
m_pdlgPropertySheet->AddPage(m_pshapePage);
// Create a modeless CPropertySheet dialog.
m_pdlgPropertySheet->Create();
}
// The code fragment below shows how to destroy the C++ objects for
// propertysheet and propertypage in the destructor of CView-derived
// class.
// NOTE: DestroyWindow() is called in CPropertySheet::OnClose() so
// you do not need to call it here. Property pages are children
// of the CPropertySheet, they will be destroyed by their parents.
CPSheetView::~CPSheetView()
{
delete m_pshapePage;
delete m_pstylePage;
delete m_pcolorPage;
delete m_pdlgPropertySheet;
}
CPropertySheet::DoModal
Zobrazí seznam modálních vlastností.
virtual INT_PTR DoModal();
Návratová hodnota
IDOK
nebo IDCANCEL
pokud byla funkce úspěšná; jinak 0 nebo -1. Pokud byl seznam vlastností vytvořen jako průvodce (viz SetWizardMode
), DoModal
vrátí buď ID_WIZFINISH
nebo IDCANCEL
.
Poznámky
Vrácená hodnota odpovídá ID ovládacího prvku, který zavřel seznam vlastností. Po vrácení této funkce budou okna odpovídající seznamu vlastností a všechny stránky zničeny. Samotné objekty budou stále existovat. Obvykle načtete data z CPropertyPage
objektů po DoModal
vrácení IDOK.
Pokud chcete zobrazit seznam vlastností bez režimu, zavolejte Create
místo toho.
Při vytvoření stránky vlastností z odpovídajícího prostředku dialogového okna může dojít k první náhodné výjimce. Výsledkem je změna stylu prostředku dialogového okna na požadovaný styl před vytvořením stránky. Vzhledem k tomu, že prostředky jsou obecně jen pro čtení, způsobí to výjimku. Systém zpracuje výjimku a vytvoří kopii upraveného prostředku. První náhodná výjimka je proto možné ignorovat.
Poznámka:
Tato výjimka musí být zpracována operačním systémem, pokud kompilujete s asynchronním modelem zpracování výjimek. Další informace o modelech zpracování výjimek najdete v tématu /EH
(Model zpracování výjimek). V tomto případě nezalamujte volání CPropertySheet::DoModal
s blokem try-catch jazyka C++, ve kterém catch zpracovává všechny výjimky, catch (...)
například . Tento blok zpracuje výjimku určenou pro operační systém a způsobí nepředvídatelné chování. Můžete však bezpečně použít zpracování výjimek C++ s konkrétními typy výjimek nebo strukturovaným zpracováním výjimek, kde je výjimka porušení přístupu předána operačnímu systému.
Chcete-li se vyhnout generování této první náhody výjimky, můžete ručně zaručit, že seznam vlastností má správné styly oken. Pro seznam vlastností musíte nastavit následující styly:
DS_3DLOOK
DS_CONTROL
WS_CHILD
WS_TABSTOP
Můžete použít následující volitelné styly, aniž by to způsobilo výjimku první šance:
DS_SHELLFONT
DS_LOCALEDIT
WS_CLIPCHILDREN
Zakažte všechny ostatní styly Windows, protože nejsou kompatibilní s seznamy vlastností. Tato rada se nevztahuje na rozšířené styly. Nastavení těchto standardních stylů odpovídajícím způsobem zaručuje, že seznam vlastností nemusí být změněn a nebude se generovat první náhodná výjimka.
Příklad
Podívejte se na příklad pro CPropertySheet::AddPage
.
CPropertySheet::EnableStackedTabs
Určuje, zda se mají naskládat řádky oušek v seznamu vlastností.
void EnableStackedTabs(BOOL bStacked);
Parametry
bStacked
Určuje, jestli jsou v seznamu vlastností povolené skládané ouška. Zakažte skládané řádky značek nastavením bStacked
na FALSE
.
Poznámky
Pokud má seznam vlastností ve výchozím nastavení více oušek, než se vejde do jednoho řádku v šířce seznamu vlastností, ouška se naskládají do více řádků. Chcete-li místo skládaných karet použít posuvníky, zavolejte EnableStackedTabs
před voláním DoModal
bStacked
FALSE
nebo .Create
Při vytváření modálního nebo bezmodálního seznamu vlastností je nutné volat EnableStackedTabs
. Chcete-li tento styl začlenit do -odvozené CPropertySheet
třídy, napište obslužnou rutinu zprávy pro WM_CREATE
. V přepsáné verzi CWnd::OnCreate
volání , EnableStackedTabs( FALSE )
před voláním implementace základní třídy.
Příklad
int CMyPropertySheet::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
// Set for Scrolling Tabs style
EnableStackedTabs(FALSE);
// Call the base class
if (CPropertySheet::OnCreate(lpCreateStruct) == -1)
return -1;
return 0;
}
CPropertySheet::EndDialog
Ukončí seznam vlastností.
void EndDialog(int nEndID);
Parametry
nEndID
Identifikátor, který se má použít jako návratová hodnota seznamu vlastností.
Poznámky
Tato členová funkce je volána rozhraním, když je stisknuto tlačítko OK, Zrušit nebo Zavřít. Volání této členské funkce, pokud dojde k události, která by měla zavřít seznam vlastností.
Tato členová funkce se používá pouze s modálním dialogovým oknem.
Příklad
Podívejte se na příklad pro CPropertySheet::PressButton
.
CPropertySheet::GetActiveIndex
Získá číslo indexu aktivní stránky okna seznamu vlastností a pak použije vrácené číslo indexu jako parametr pro GetPage
.
int GetActiveIndex() const;
Návratová hodnota
Číslo indexu aktivní stránky.
Příklad
Podívejte se na příklad pro CPropertySheet::GetActivePage
.
CPropertySheet::GetActivePage
Načte aktivní stránku okna seznamu vlastností.
CPropertyPage* GetActivePage() const;
Návratová hodnota
Ukazatel na aktivní stránku.
Poznámky
Pomocí této členské funkce můžete provést nějakou akci na aktivní stránce.
Příklad
// The code fragment below sets the last active page (i.e. the
// active page when the propertysheet was closed) to be the first
// visible page when the propertysheet is shown. The last active
// page was saved in m_LastActivePage, (a member variable of
// CDocument-derived class) when OK was selected from the
// propertysheet. CMyPropertySheet is a CPropertySheet-derived class.
BOOL CMyPropertySheet::OnInitDialog()
{
BOOL bResult = CPropertySheet::OnInitDialog();
CMDIFrameWnd* pframe = (CMDIFrameWnd*)AfxGetMainWnd();
CMDIChildWnd* pchild = pframe->MDIGetActive();
CPSheetDoc* doc = (CPSheetDoc*)pchild->GetActiveDocument();
SetActivePage(doc->m_LastActivePage);
return bResult;
}
BOOL CMyPropertySheet::OnCommand(WPARAM wParam, LPARAM lParam)
{
if (LOWORD(wParam) == IDOK)
{
CMDIFrameWnd* pframe = (CMDIFrameWnd*)AfxGetMainWnd();
CMDIChildWnd* pchild = pframe->MDIGetActive();
CPSheetDoc* doc = (CPSheetDoc*)pchild->GetActiveDocument();
doc->m_LastActivePage = GetPageIndex(GetActivePage()); // or GetActiveIndex()
}
return CPropertySheet::OnCommand(wParam, lParam);
}
CPropertySheet::GetPage
Vrátí ukazatel na zadanou stránku v tomto seznamu vlastností.
CPropertyPage* GetPage(int nPage) const;
Parametry
nPage
Index požadované stránky počínaje číslem 0 Musí být v rozsahu od 0 do jedné menší než počet stránek v seznamu vlastností (včetně).
Návratová hodnota
Ukazatel na stránku odpovídající parametru nPage
.
Příklad
Podívejte se na příklad pro CPropertyPage::OnWizardFinish
.
CPropertySheet::GetPageCount
Určuje počet stránek aktuálně v seznamu vlastností.
int GetPageCount() const;
Návratová hodnota
Počet stránek v seznamu vlastností
Příklad
Podívejte se na příklad pro CPropertyPage::OnWizardFinish
.
CPropertySheet::GetPageIndex
Načte číslo indexu zadané stránky v seznamu vlastností.
int GetPageIndex(CPropertyPage* pPage);
Parametry
pPage
Odkazuje na stránku s indexem, který se má najít. Nemůže být NULL
.
Návratová hodnota
Číslo indexu stránky.
Poznámky
Například byste použili GetPageIndex
k získání indexu stránky, aby bylo možné použít SetActivePage
nebo GetPage
.
Příklad
Podívejte se na příklad pro CPropertySheet::GetActivePage
.
CPropertySheet::GetTabControl
Načte ukazatel na ovládací prvek tab, který provede něco specifického pro ovládací prvek tab (to znamená pro použití některého z rozhraní API).CTabCtrl
CTabCtrl* GetTabControl() const;
Návratová hodnota
Ukazatel na ovládací prvek tabulátoru.
Poznámky
Tuto členovou funkci můžete například volat, pokud chcete při inicializaci přidat rastrové obrázky na každou z karet.
Příklad
// Create and associate a tooltip control to the tab control of
// CMyTTPropertySheet. CMyTTPropertySheet is a CPropertySheet-derived
// class.
BOOL CMyTTPropertySheet::OnInitDialog()
{
BOOL bResult = CPropertySheet::OnInitDialog();
// Create a tooltip control. m_pToolTipCtrl is a member variable
// of type CToolTipCtrl* in CMyTTPropertySheet class. It is
// initialized to NULL in the constructor, and destroyed in the
// destructor of CMyTTPropertySheet class.
m_pToolTipCtrl = new CToolTipCtrl;
if (!m_pToolTipCtrl->Create(this))
{
TRACE(_T("Unable To create ToolTip\n"));
return bResult;
}
// Associate the tooltip control to the tab control
// of CMyPropertySheet.
CTabCtrl* ptab = GetTabControl();
ptab->SetToolTips(m_pToolTipCtrl);
// Get the bounding rectangle of each tab in the tab control of the
// property sheet. Use this rectangle when registering a tool with
// the tool tip control. IDS_FIRST_TOOLTIP is the first ID string
// resource that contains the text for the tool.
int count = ptab->GetItemCount();
int id = IDS_FIRST_TOOLTIP;
for (int i = 0; i < count; i++)
{
CRect r;
ptab->GetItemRect(i, &r);
VERIFY(m_pToolTipCtrl->AddTool(ptab, id, &r, id));
id++;
}
// Activate the tooltip control.
m_pToolTipCtrl->Activate(TRUE);
return bResult;
}
// Override PreTranslateMessage() so RelayEvent() can be
// called to pass a mouse message to CMyTTPropertySheet's
// tooltip control for processing.
BOOL CMyTTPropertySheet::PreTranslateMessage(MSG* pMsg)
{
if (NULL != m_pToolTipCtrl)
m_pToolTipCtrl->RelayEvent(pMsg);
return CPropertySheet::PreTranslateMessage(pMsg);
}
CPropertySheet::m_psh
Struktura, jejíž členy ukládají vlastnosti PROPSHEETHEADER
.
Poznámky
Tato struktura slouží k inicializaci vzhledu seznamu vlastností po jeho vytvoření, ale před zobrazením pomocí DoModal
členské funkce. Můžete například nastavit dwSize
člena m_psh
na velikost, kterou má mít seznam vlastností.
Další informace o této struktuře, včetně výpisu jejích členů, najdete PROPSHEETHEADER
v sadě Windows SDK.
Příklad
// This code fragment shows how to change CPropertySheet's settings
// before it is shown. After the changes, CPropertySheet has the
// caption "Simple Properties", no "Apply" button, and the
// second page (CColorPage) initially on top.
CPropertySheet dlgPropertySheet(_T("Simple PropertySheet"));
CStylePage stylePage;
CColorPage colorPage;
CShapePage shapePage;
dlgPropertySheet.AddPage(&stylePage);
dlgPropertySheet.AddPage(&colorPage);
dlgPropertySheet.AddPage(&shapePage);
dlgPropertySheet.m_psh.dwFlags |= PSH_NOAPPLYNOW | PSH_PROPTITLE;
dlgPropertySheet.m_psh.pszCaption = _T("Simple");
dlgPropertySheet.m_psh.nStartPage = 1;
dlgPropertySheet.DoModal();
CPropertySheet::MapDialogRect
Převede jednotky dialogového okna obdélníku na jednotky obrazovky.
void MapDialogRect(LPRECT lpRect) const;
Parametry
lpRect
Odkazuje na RECT
strukturu nebo CRect
objekt, který obsahuje souřadnice dialogového okna, které se mají převést.
Poznámky
Jednotky dialogového okna jsou uvedeny z aktuální základní jednotky dialogového okna odvozené z průměrné šířky a výšky znaků v písmu použitém pro text dialogového okna. Jedna vodorovná jednotka je jedna čtvrtá jednotka základní šířky dialogového okna a jedna svislá jednotka je jedna osmá z jednotky základní výšky dialogového okna.
GetDialogBaseUnits
Funkce Windows vrátí informace o velikosti pro systémové písmo, ale pro každý seznam vlastností můžete zadat jiné písmo, pokud v souboru definice prostředku použijete styl DS_SETFONT. Funkce MapDialogRect
Windows popsaná v sadě Windows SDK používá příslušné písmo pro toto dialogové okno.
Členová MapDialogRect
funkce nahrazuje jednotky dialogového okna jednotkami lpRect
obrazovky (pixely), aby bylo možné obdélník použít k vytvoření dialogového okna nebo umístění ovládacího prvku do pole.
CPropertySheet::OnInitDialog
Přepíše inicializaci seznamu vlastností.
virtual BOOL OnInitDialog();
Návratová hodnota
Určuje, zda aplikace nastavila vstupní fokus na jeden z ovládacích prvků v seznamu vlastností. Pokud OnInitDialog
vrátí nenulové hodnoty, systém Windows nastaví vstupní fokus na první ovládací prvek v seznamu vlastností. Aplikace může vrátit hodnotu 0 pouze v případě, že explicitně nastavila vstupní fokus na jeden z ovládacích prvků v seznamu vlastností.
Poznámky
Tato členová funkce se volá v reakci na WM_INITDIALOG
zprávu. Tato zpráva se odešle do seznamu vlastností během Create
volání nebo DoModal
volání, ke kterým dojde bezprostředně před zobrazením seznamu vlastností.
Tuto členovu funkci přepište, pokud potřebujete provést speciální zpracování při inicializaci seznamu vlastností. V přepsáné verzi nejprve zavolejte základní třídu OnInitDialog
, ale ignorujte její návratovou hodnotu. Obvykle se vrátíte TRUE
ze své přepsané členské funkce.
Pro tuto členovou funkci nepotřebujete položku mapy zpráv.
CPropertySheet::PressButton
Simuluje výběr zadaného tlačítka v seznamu vlastností.
void PressButton(int nButton);
Parametry
nButton
nButton
: Identifikuje tlačítko, které se má stisknout. Tento parametr může být jedna z následujících hodnot:
PSBTN_BACK
Vybere tlačítko Zpět.PSBTN_NEXT
Vybere tlačítko Další.PSBTN_FINISH
Vybere tlačítko Dokončit.PSBTN_OK
Vybere tlačítko OK.PSBTN_APPLYNOW
Vybere tlačítko Použít hned.PSBTN_CANCEL
Vybere tlačítko Storno.PSBTN_HELP
Vybere tlačítko Nápověda.
Poznámky
Další PSM_PRESSBUTTON
informace o zprávě Windows SDK Pressbutton.
Volání PressButton
neodesílá PSN_APPLY
oznámení ze stránky vlastností do architektury. Chcete-li odeslat toto oznámení, zavolejte CPropertyPage::OnOK
.
Příklad
// Simulate the selection of OK and Cancel buttons when Alt+K and
// Alt+C are pressed. CMyPropertySheet is a CPropertySheet-derived
// class.
BOOL CMyPropertySheet::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message >= WM_KEYFIRST && pMsg->message <= WM_KEYLAST)
{
BOOL altkey = GetKeyState(VK_MENU) < 0;
if (altkey)
{
BOOL handled = TRUE;
switch (toupper((int)pMsg->wParam))
{
case 'C': // for Alt+C - Cancel button
PressButton(PSBTN_CANCEL); // or EndDialog(IDCANCEL);
break;
case 'K': // for Alt+K - OK button
PressButton(PSBTN_OK); // or EndDialog(IDOK);
break;
default:
handled = FALSE;
}
if (handled)
return TRUE;
}
}
return CPropertySheet::PreTranslateMessage(pMsg);
}
CPropertySheet::RemovePage
Odebere stránku z seznamu vlastností a zničí přidružené okno.
void RemovePage(CPropertyPage* pPage);
void RemovePage(int nPage);
Parametry
pPage
Odkazuje na stránku, která se má odebrat z seznamu vlastností. Nemůže být NULL
.
nPage
Index stránky, která se má odebrat. Musí být v rozsahu od 0 do jedné menší než počet stránek v seznamu vlastností (včetně).
Poznámky
Samotný CPropertyPage
objekt není zničen, dokud se vlastník CPropertySheet
okna nezavře.
CPropertySheet::SetActivePage
Změní aktivní stránku.
BOOL SetActivePage(int nPage);
BOOL SetActivePage(CPropertyPage* pPage);
Parametry
nPage
Index stránky, která se má nastavit Musí být v rozsahu od 0 do jedné menší než počet stránek v seznamu vlastností (včetně).
pPage
Odkazuje na stránku, která se nastaví v seznamu vlastností. Nemůže to být NULL
.
Návratová hodnota
Nenulové, pokud je seznam vlastností úspěšně aktivován; jinak 0.
Poznámky
Můžete například použít SetActivePage
, pokud akce uživatele na jedné stránce by měla způsobit, že se jiná stránka stane aktivní stránkou.
Příklad
Podívejte se na příklad pro CPropertySheet::GetActivePage
.
CPropertySheet::SetFinishText
Nastaví text na příkazovém tlačítku Dokončit.
void SetFinishText(LPCTSTR lpszText);
Parametry
lpszText
Odkazuje na text, který se má zobrazit na příkazovém tlačítku Dokončit.
Poznámky
Volání SetFinishText
pro zobrazení textu na příkazovém tlačítku Dokončit a skrytí tlačítek Další a Zpět po dokončení akce uživatele na poslední stránce průvodce.
Příklad
// CShapePage is the last wizard property page. Enable the Back
// button and change the Next button to Finish. The "Finish" button
// will have "Done" as its caption.
BOOL CShapePage::OnSetActive()
{
CPropertySheet* psheet = (CPropertySheet*)GetParent();
psheet->SetWizardButtons(PSWIZB_BACK | PSWIZB_FINISH);
psheet->SetFinishText(_T("Done"));
return CPropertyPage::OnSetActive();
}
CPropertySheet::SetTitle
Určuje titulek seznamu vlastností (text zobrazený v záhlaví okna rámečku).
void SetTitle(
LPCTSTR lpszText,
UINT nStyle = 0);
Parametry
nStyle
Určuje styl názvu seznamu vlastností. Styl musí být zadán na 0 nebo jako PSH_PROPTITLE
. Pokud je styl nastaven jako PSH_PROPTITLE
, slovo "Vlastnosti" se zobrazí za textem zadaným jako titulek. Například volání SetTitle
("Simple", PSH_PROPTITLE
) způsobí titulek seznamu vlastností "Jednoduché vlastnosti".
lpszText
Odkazuje na text, který se má použít jako titulek v záhlaví seznamu vlastností.
Poznámky
Ve výchozím nastavení používá seznam vlastností parametr titulek v konstruktoru seznamu vlastností.
Příklad
// Declare a CPropertySheet object with a caption "Simple PropertySheet".
CPropertySheet dlgPropertySheet(_T("Simple PropertySheet"));
// Add three pages to the CPropertySheet object. CStylePage, CColorPage,
// and CShapePage are CPropertyPage-derived classes created
// by the Add Class wizard.
CStylePage stylePage;
CColorPage colorPage;
CShapePage shapePage;
dlgPropertySheet.AddPage(&stylePage);
dlgPropertySheet.AddPage(&colorPage);
dlgPropertySheet.AddPage(&shapePage);
// Change the caption of the CPropertySheet object
// from "Simple PropertySheet" to "Simple Properties".
dlgPropertySheet.SetTitle(_T("Simple"), PSH_PROPTITLE);
// Show the CPropertySheet object as MODAL.
dlgPropertySheet.DoModal();
CPropertySheet::SetWizardButtons
Povolí nebo zakáže tlačítko Zpět, Další nebo Dokončit v seznamu vlastností průvodce.
void SetWizardButtons(DWORD dwFlags);
Parametry
dwFlags
Sada příznaků, které přizpůsobují funkci a vzhled tlačítek průvodce. Tento parametr může být kombinací následujících hodnot:
PSWIZB_BACK
Tlačítko ZpětPSWIZB_NEXT
Tlačítko DalšíPSWIZB_FINISH
Tlačítko DokončitPSWIZB_DISABLEDFINISH
Zakázané tlačítko Dokončit
Poznámky
Hovor SetWizardButtons
je otevřen až po otevření dialogového okna, nemůžete volat SetWizardButtons
před voláním DoModal
. Obvykle byste měli volat SetWizardButtons
z CPropertyPage::OnSetActive
.
Pokud chcete změnit text na tlačítku Dokončit nebo skrýt tlačítka Další a Zpět, jakmile uživatel dokončí průvodce, zavolejte SetFinishText
. Všimněte si, že stejné tlačítko se sdílí pro dokončení a další. Tlačítko Dokončit nebo Další můžete zobrazit najednou, ale ne obojí.
Příklad
A CPropertySheet
má tři stránky vlastností průvodce: CStylePage
, CColorPage
a CShapePage
. Fragment kódu níže ukazuje, jak povolit a zakázat tlačítka Zpět a Další na stránce vlastností průvodce.
// CStylePage is the first wizard property page. Disable the Back
// button but enable the Next button.
BOOL CStylePage::OnSetActive()
{
CPropertySheet* psheet = (CPropertySheet*) GetParent();
psheet->SetWizardButtons(PSWIZB_NEXT);
return CPropertyPage::OnSetActive();
}
// CColorPage is the second wizard property page. Enable both the
// Back button and the Next button.
BOOL CColorPage::OnSetActive()
{
CPropertySheet* psheet = (CPropertySheet*)GetParent();
psheet->SetWizardButtons(PSWIZB_BACK | PSWIZB_NEXT);
return CPropertyPage::OnSetActive();
}
// CShapePage is the last wizard property page. Enable the Back
// button and change the Next button to Finish. The "Finish" button
// will have "Done" as its caption.
BOOL CShapePage::OnSetActive()
{
CPropertySheet* psheet = (CPropertySheet*)GetParent();
psheet->SetWizardButtons(PSWIZB_BACK | PSWIZB_FINISH);
psheet->SetFinishText(_T("Done"));
return CPropertyPage::OnSetActive();
}
CPropertySheet::SetWizardMode
Vytvoří stránku vlastností jako průvodce.
void SetWizardMode();
Poznámky
Klíčovou charakteristikou stránky vlastností průvodce je, že uživatel přejde pomocí tlačítek Další nebo Dokončit, Zpět a Zrušit místo karet.
Zavolejte SetWizardMode
před voláním DoModal
. Po volání SetWizardMode
DoModal
se vrátí buď ID_WIZFINISH
(pokud se uživatel zavře pomocí tlačítka Dokončit) nebo IDCANCEL
.
SetWizardMode
PSH_WIZARD
nastaví příznak.
Příklad
CPropertySheet sheet(_T("Simple PropertySheet"));
CStylePage pageStyle;
CColorPage pageColor;
CShapePage pageShape;
sheet.AddPage(&pageStyle);
sheet.AddPage(&pageColor);
sheet.AddPage(&pageShape);
sheet.SetWizardMode();
sheet.DoModal();
Viz také
Mfc – ukázka CMNCTRL1
Mfc – ukázka CMNCTRL2
Mfc – ukázka PROPDLG
Mfc – ukázka SNAPVW
CWnd
Třída
Graf hierarchie