CPropertySheet
クラス
タブ ダイアログ ボックスとしても知られるプロパティ シートを表します。
構文
class CPropertySheet : public CWnd
メンバー
パブリック コンストラクター
名前 | 説明 |
---|---|
CPropertySheet::CPropertySheet |
CPropertySheet オブジェクトを構築します。 |
パブリック メソッド
パブリック データ メンバー
名前 | 説明 |
---|---|
CPropertySheet::m_psh |
Windows PROPSHEETHEADER 構造体。 基本的なプロパティ シート パラメーターへのアクセスを提供します。 |
解説
プロパティ シートは、1 つのオブジェクトと 1 つ以上の CPropertySheet
オブジェクトで CPropertyPage
構成されます。 フレームワークは、一連のタブ インデックスと、現在選択されているページを含む領域を含むウィンドウとしてプロパティ シートを表示します。 ユーザーは、適切なタブを使用して特定のページに移動します。
CPropertySheet
は、Windows 98 および Windows NT 2000 で導入された PROPSHEETHEADER
拡張構造のサポートを提供します。 構造体には、"透かし" 背景ビットマップの使用をサポートする追加のフラグとメンバーが含まれています。
これらの新しいイメージをプロパティ シート オブジェクトに自動的に表示するには、呼び出しでビットマップイメージとパレットイメージの有効な値を CPropertySheet::Construct
渡します CPropertySheet::CPropertySheet
。
CPropertySheet
由来CDialog
ではありませんが、オブジェクトのCPropertySheet
管理はオブジェクトの管理にCDialog
似ています。 たとえば、プロパティ シートを作成するには、コンストラクターを呼び出し、モーダル プロパティ シートまたはCreate
モードレス プロパティ シートを呼び出すDoModal
という 2 部構成が必要です。 CPropertySheet
には、次の 2 種類のコンストラクターがあります CPropertySheet::Construct
CPropertySheet::CPropertySheet
。
オブジェクトを CPropertySheet
作成すると、一部 のウィンドウ スタイル によって初回例外が発生する可能性があります。 これは、システムがシートを作成する前にプロパティ シートのスタイルを変更しようとした結果です。 この例外を回避するには、次のスタイルを作成するときに必ず設定してください CPropertySheet
。
DS_3DLOOK
DS_CONTROL
WS_CHILD
WS_TABSTOP
次のスタイルは省略可能であり、初回例外は発生しません。
DS_SHELLFONT
DS_LOCALEDIT
WS_CLIPCHILDREN
その他 Window Styles
は禁止されており、有効にしないでください。
オブジェクトと外部オブジェクトの間で CPropertySheet
データを交換することは、オブジェクトとのデータ交換に CDialog
似ています。 重要な違いは、プロパティ シートの設定は通常、オブジェクト自体ではなく、オブジェクトのCPropertyPage
CPropertySheet
メンバー変数であるという点です。
ウィザードと呼ばれるタブ ダイアログ ボックスの種類を作成できます。このダイアログ ボックスは、デバイスの設定やニュースレターの作成など、操作の手順をユーザーに案内する一連のプロパティ ページを含むプロパティ シートで構成されます。 ウィザードの種類のタブ ダイアログ ボックスでは、プロパティ ページにタブは表示されず、一度に表示されるプロパティ ページは 1 つだけです。 また、[OK] ボタンと [今すぐ適用] ボタンを使用する代わりに、[戻る] ボタン、[次へ] または [完了] ボタン、[キャンセル] ボタン、および [ヘルプ] ボタンがあります。
ウィザードの種類のダイアログ ボックスを作成するには、標準のプロパティ シートを作成する場合と同じ手順に従いますが、呼び出す前に呼び出 SetWizardMode
します DoModal
。 ウィザード ボタンを有効にするには、フラグを使用して関数と外観をカスタマイズする呼び出 SetWizardButtons
しを行います。 [完了] ボタンを有効にするには、ユーザーがウィザードの最後のページでアクションを実行した後に呼び出SetFinishText
します。
オブジェクトの使用方法 CPropertySheet
の詳細については、「プロパティ シートとプロパティ ページ」を 参照してください。
継承階層
CPropertySheet
必要条件
ヘッダー:afxdlgs.h
CPropertySheet::AddPage
指定したページをプロパティ シートの右端のタブに追加します。
void AddPage(CPropertyPage* pPage);
パラメーター
pPage
プロパティ シートに追加するページをポイントします。 NULL
にすることはできません。
解説
ページを表示する左から右の順序でプロパティ シートにページを追加します。
AddPage
はオブジェクトをCPropertyPage
CPropertySheet
ページのリストに追加しますが、実際にはページのウィンドウは作成しません。 フレームワークは、ユーザーがそのページを選択するまで、ページのウィンドウの作成を延期します。
を使用してAddPage
CPropertySheet
プロパティ ページを追加する場合、その親CPropertyPage
は . プロパティ ページからプロパティ シートにアクセスするには、次を呼び出します CWnd::GetParent
。
呼び出す AddPage
プロパティ シート ウィンドウの作成まで待機する必要はありません。 通常、呼び出す前に呼び出AddPage
しますDoModal
。Create
プロパティ ページを表示した後で呼び出 AddPage
すと、タブ行に新しく追加されたページが反映されます。
例
// 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
オブジェクトを構築します。
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);
パラメーター
nIDCaption
プロパティ シートに使用するキャプションの ID。
pParentWnd
プロパティ シートの親ウィンドウへのポインター。 の場合NULL
、親ウィンドウはアプリケーションのメイン ウィンドウになります。
iSelectPage
最初に上部に表示されるページのインデックス。 既定値は、シートに追加された最初のページです。
pszCaption
プロパティ シートに使用するキャプションを含む文字列へのポインター。 NULL
にすることはできません。
hbmWatermark
プロパティ ページの透かしビットマップを処理します。
hpalWatermark
透かしビットマップやヘッダー ビットマップのパレットを処理します。
hbmHeader
プロパティ ページのヘッダー ビットマップへのハンドル。
解説
クラス コンストラクターの 1 つがまだ呼び出されていない場合は、このメンバー関数を呼び出します。 たとえば、オブジェクトの配列CPropertySheet
を宣言または割り当てるときに呼び出Construct
します。 配列の場合は、配列内の各メンバーを呼び出す Construct
必要があります。
プロパティ シートを表示するには、呼び出し DoModal
または Create
. 最初のパラメーターに含まれる文字列は、プロパティ シートのキャプション バーに配置されます。
上記の 3 番目または 4 番目のConstruct
プロトタイプを使用し、パラメーターに有効な値hbmWatermark
hpalWatermark
を渡すと、透かしやhbmHeader
ヘッダー画像を自動的に表示できます。
例
次の例は、どのような状況で呼び出 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
オブジェクトを構築します。
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);
パラメーター
nIDCaption
プロパティ シートに使用するキャプションの ID。
pParentWnd
プロパティ シートの親ウィンドウをポイントします。 の場合NULL
、親ウィンドウはアプリケーションのメイン ウィンドウになります。
iSelectPage
最初に上部に表示されるページのインデックス。 既定値は、シートに追加された最初のページです。
pszCaption
プロパティ シートに使用するキャプションを含む文字列を指します。 NULL
にすることはできません。
hbmWatermark
プロパティ シートの背景ビットマップへのハンドル。
hpalWatermark
透かしビットマップまたはヘッダー ビットマップのパレットへのハンドル。
hbmHeader
プロパティ ページのヘッダー ビットマップへのハンドル。
解説
プロパティ シートを表示するには、呼び出し DoModal
または Create
. 最初のパラメーターに含まれる文字列は、プロパティ シートのキャプション バーに配置されます。
複数のパラメーターがある場合 (たとえば、配列を使用している場合)、代わりに CPropertySheet
.Construct
上記の 3 番目または 4 番目のCPropertySheet
プロトタイプを使用し、パラメーターに有効な値hbmWatermark
hpalWatermark
を渡すと、透かしやhbmHeader
ヘッダー画像を自動的に表示できます。
例
// 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
モードレス プロパティ シートを表示します。
virtual BOOL Create(CWnd* pParentWnd = NULL,
DWORD dwStyle = (DWORD)-1,
DWORD dwExStyle = 0);
パラメーター
pParentWnd
親ウィンドウをポイントします。 の場合 NULL
は、親がデスクトップです。
dwStyle
プロパティ シートのウィンドウ スタイル。 使用可能なスタイルの完全な一覧については、「ウィンドウ スタイル」を参照してください。
dwExStyle
プロパティ シートの拡張ウィンドウ スタイル。 使用可能なスタイルの完全な一覧については、「拡張ウィンドウ スタイル」を参照してください 。
戻り値
プロパティ シートが正常に作成された場合は 0 以外。それ以外の場合は 0。
解説
呼び出しの Create
呼び出しは、コンストラクター内に配置することも、コンストラクターの呼び出し後に呼び出すこともできます。
-1 dwStyle
を渡して表される既定のスタイルは、実際には WS_SYSMENU|WS_POPUP|WS_CAPTION|DS_MODALFRAME|DS_CONTEXTHELP|WS_VISIBLE
. 0 dwExStyle
を渡すことによって表される既定の拡張ウィンドウ スタイルは、実際には WS_EX_DLGMODALFRAME
.
メンバー関数は Create
、プロパティ シートを作成した直後に返されます。 プロパティ シートを破棄するには、次を呼び出します CWnd::DestroyWindow
。
モーダル プロパティ シートのように、[OK]、[キャンセル]、[今すぐ適用]、および [ヘルプ] ボタンを持たない呼び出 Create
しと共に表示されるモードレス プロパティ シート。 必要なボタンは、ユーザーが作成する必要があります。
モーダル プロパティ シートを表示するには、代わりに呼び出 DoModal
します。
例
// 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
モーダル プロパティ シートを表示します。
virtual INT_PTR DoModal();
戻り値
IDOK
または IDCANCEL
関数が成功した場合は 0、それ以外の場合は -1。 プロパティ シートがウィザード (参照) SetWizardMode
DoModal
として確立されている場合は、いずれかID_WIZFINISH
を返しますIDCANCEL
。
解説
戻り値は、プロパティ シートを閉じたコントロールの ID に対応します。 この関数が戻ると、プロパティ シートとすべてのページに対応するウィンドウが破棄されます。 オブジェクト自体は引き続き存在します。 通常、IDOK を返した後DoModal
、CPropertyPage
オブジェクトからデータを取得します。
モードレス プロパティ シートを表示するには、代わりに呼び出 Create
します。
対応するダイアログ リソースからプロパティ ページが作成されると、初回例外が発生する可能性があります。 これは、プロパティ ページがダイアログ リソースのスタイルを、ページが作成される前に必要なスタイルに変更した結果です。 通常、リソースは読み取り専用であるため、例外が発生します。 システムは例外を処理し、変更されたリソースのコピーを作成します。 したがって、初回例外は無視できます。
Note
非同期例外処理モデルを使用してコンパイルする場合は、この例外をオペレーティング システムで処理する必要があります。 例外処理モデルの詳細については、「(例外処理モデル)」を参照してください。/EH
この場合、catch がすべての例外を処理する CPropertySheet::DoModal
C++ try-catch ブロックで呼び出しをラップしないでください。たとえば、 catch (...)
このブロックは、オペレーティング システムを対象とした例外を処理し、予期しない動作を引き起こします。 ただし、アクセス違反例外がオペレーティング システムに渡される特定の例外の種類または構造化例外処理では、C++ 例外処理を安全に使用できます。
この初回例外の生成を回避するために、プロパティ シートに正しい ウィンドウ スタイルがあることを手動で保証できます。 プロパティ シートには、次のスタイルを設定する必要があります。
DS_3DLOOK
DS_CONTROL
WS_CHILD
WS_TABSTOP
初回例外を発生させずに、次の省略可能なスタイルを使用できます。
DS_SHELLFONT
DS_LOCALEDIT
WS_CLIPCHILDREN
プロパティ シートと互換性がないため、他のすべての Windows スタイルを無効にします。 このアドバイスは、拡張スタイルには適用されません。 これらの標準スタイルを適切に設定すると、プロパティ シートを変更する必要がないようにし、初回例外の生成を回避できます。
例
CPropertySheet::AddPage
の例を参照してください。
CPropertySheet::EnableStackedTabs
プロパティ シート内のタブの行をスタックするかどうかを示します。
void EnableStackedTabs(BOOL bStacked);
パラメーター
bStacked
プロパティ シートで積み上げタブが有効かどうかを示します。 に設定 bStacked
して、タグの積み上げ行を FALSE
無効にします。
解説
既定では、プロパティ シートにプロパティ シートの幅の 1 行に収まるタブよりも多くのタブがある場合、タブは複数の行に積み重ねられます。 タブを積み重ねる代わりにスクロール タブを使用するには、呼び出しEnableStackedTabs
bStacked
FALSE
前DoModal
または .Create
モーダル プロパティ シートまたはモードレス プロパティ シートを作成するときに呼び出す EnableStackedTabs
必要があります。 このスタイルを -derived クラスに CPropertySheet
組み込むには、次のメッセージ ハンドラーを記述します WM_CREATE
。 オーバーライドされたバージョンでは、基底クラスの CWnd::OnCreate
実装を呼び出す前に呼び出 EnableStackedTabs( FALSE )
します。
例
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
プロパティ シートを終了します。
void EndDialog(int nEndID);
パラメーター
nEndID
プロパティ シートの戻り値として使用する識別子。
解説
このメンバー関数は、[OK]、[キャンセル]、または [閉じる] ボタンが押されたときにフレームワークによって呼び出されます。 プロパティ シートを閉じるイベントが発生した場合は、このメンバー関数を呼び出します。
このメンバー関数は、モーダル ダイアログ ボックスでのみ使用されます。
例
CPropertySheet::PressButton
の例を参照してください。
CPropertySheet::GetActiveIndex
プロパティ シート ウィンドウのアクティブなページのインデックス番号を取得し、返されたインデックス番号をパラメーター GetPage
として使用します。
int GetActiveIndex() const;
戻り値
アクティブなページのインデックス番号。
例
CPropertySheet::GetActivePage
の例を参照してください。
CPropertySheet::GetActivePage
プロパティ シート ウィンドウのアクティブなページを取得します。
CPropertyPage* GetActivePage() const;
戻り値
アクティブなページへのポインター。
解説
このメンバー関数を使用して、アクティブなページで何らかのアクションを実行します。
例
// 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
このプロパティ シート内の指定したページへのポインターを返します。
CPropertyPage* GetPage(int nPage) const;
パラメーター
nPage
0 から始まる目的のページのインデックス。 プロパティ シート内のページ数より 0 から 1 未満である必要があります (含む)。
戻り値
パラメーターに対応するページへの nPage
ポインター。
例
CPropertyPage::OnWizardFinish
の例を参照してください。
CPropertySheet::GetPageCount
プロパティ シート内の現在のページ数を決定します。
int GetPageCount() const;
戻り値
プロパティ シート内のページ数。
例
CPropertyPage::OnWizardFinish
の例を参照してください。
CPropertySheet::GetPageIndex
プロパティ シート内の指定したページのインデックス番号を取得します。
int GetPageIndex(CPropertyPage* pPage);
パラメーター
pPage
インデックスが見つかったページをポイントします。 NULL
にすることはできません。
戻り値
ページのインデックス番号。
解説
たとえば、使用するためにページ インデックスを取得するために使用 GetPageIndex
SetActivePage
GetPage
します。
例
CPropertySheet::GetActivePage
の例を参照してください。
CPropertySheet::GetTabControl
タブ コントロールに固有の操作を行う (つまり、いずれかの API を CTabCtrl
使用する) タブ コントロールへのポインターを取得します。
CTabCtrl* GetTabControl() const;
戻り値
タブ コントロールへのポインター。
解説
たとえば、初期化中に各タブにビットマップを追加する場合は、このメンバー関数を呼び出します。
例
// 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
の特性 PROPSHEETHEADER
を格納するメンバーを持つ構造体。
解説
この構造体を使用して、プロパティ シートが構築された後、メンバー関数で表示される前にプロパティ シートの外観を DoModal
初期化します。 たとえば、プロパティ シートの dwSize
サイズにメンバー m_psh
を設定します。
メンバーの一覧など、この構造の詳細については、Windows SDK を参照してください PROPSHEETHEADER
。
例
// 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
四角形のダイアログ ボックスの単位を画面の単位に変換します。
void MapDialogRect(LPRECT lpRect) const;
パラメーター
lpRect
変換する RECT
ダイアログ ボックス座標を含む構造体または CRect
オブジェクトを指します。
解説
ダイアログ ボックスの単位は、ダイアログ ボックス テキストに使用されるフォント内の文字の平均幅と高さから派生した現在のダイアログ ボックスの基本単位に関して記述されます。 1 つの水平単位はダイアログ ボックスの基本幅単位の 4 分の 1、垂直単位はダイアログ ボックスの基本高さの単位の 8 分の 1 です。
Windows 関数はGetDialogBaseUnits
システム フォントのサイズ情報を返しますが、リソース定義ファイルで DS_Standard Edition TFONT スタイルを使用する場合は、プロパティ シートごとに異なるフォントを指定できます。 Windows SDK で説明されている Windows 関数は MapDialogRect
、このダイアログ ボックスに適したフォントを使用します。
メンバー関数は MapDialogRect
、ダイアログ ボックスの単位を画面単位 (ピクセル) に lpRect
置き換えて、四角形を使用してダイアログ ボックスを作成したり、ボックス内にコントロールを配置したりできるようにします。
CPropertySheet::OnInitDialog
プロパティ シートの初期化を拡張するためにオーバーライドします。
virtual BOOL OnInitDialog();
戻り値
アプリケーションがプロパティ シートのコントロールのいずれかに入力フォーカスを設定するかどうかを指定します。 0 以外の値を返す場合 OnInitDialog
、Windows は入力フォーカスをプロパティ シートの最初のコントロールに設定します。 アプリケーションは、プロパティ シートのコントロールのいずれかに入力フォーカスを明示的に設定した場合にのみ、0 を返すことができます。
解説
このメンバー関数は、メッセージに応答して WM_INITDIALOG
呼び出されます。 このメッセージは、プロパティ シートが表示される直前に発生する、またはDoModal
呼び出し中Create
にプロパティ シートに送信されます。
プロパティ シートの初期化時に特別な処理を実行する必要がある場合は、このメンバー関数をオーバーライドします。 オーバーライドされたバージョンでは、最初に基底クラス OnInitDialog
を呼び出しますが、その戻り値は無視します。 通常は、オーバーライドされたメンバー関数から戻ります TRUE
。
このメンバー関数のメッセージ マップ エントリは必要ありません。
CPropertySheet::PressButton
プロパティ シート内の指定したボタンの選択をシミュレートします。
void PressButton(int nButton);
パラメーター
nButton
nButton
: 押すボタンを識別します。 このパラメーターには、次の 値のいずれかを指定できます。
PSBTN_BACK
[戻る] ボタンを選択します。PSBTN_NEXT
[次へ] ボタンを選択します。PSBTN_FINISH
[完了] ボタンを選択します。PSBTN_OK
[OK] ボタンを選択します。PSBTN_APPLYNOW
[今すぐ適用] ボタンを選択します。PSBTN_CANCEL
[キャンセル] ボタンを選択します。PSBTN_HELP
[ヘルプ] ボタンを選択します。
解説
Windows SDK の Pressbutton メッセージの詳細を参照してください PSM_PRESSBUTTON
。
呼び出し PressButton
は、プロパティ ページからフレームワークに通知を送信 PSN_APPLY
しません。 この通知を送信するには、次を呼び出します CPropertyPage::OnOK
。
例
// 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
プロパティ シートからページを削除し、関連付けられているウィンドウを破棄します。
void RemovePage(CPropertyPage* pPage);
void RemovePage(int nPage);
パラメーター
pPage
プロパティ シートから削除するページをポイントします。 NULL
にすることはできません。
nPage
削除するページのインデックス。 プロパティ シート内のページ数より 0 から 1 未満である必要があります (含む)。
解説
CPropertyPage
オブジェクト自体は、ウィンドウのCPropertySheet
所有者が閉じられるまで破棄されません。
CPropertySheet::SetActivePage
アクティブなページを変更します。
BOOL SetActivePage(int nPage);
BOOL SetActivePage(CPropertyPage* pPage);
パラメーター
nPage
設定するページのインデックス。 プロパティ シート内のページ数より 0 から 1 ページ未満である必要があります (両端を含む)。
pPage
プロパティ シートで設定するページをポイントします。 NULL
にすることはできません。
戻り値
プロパティ シートが正常にアクティブ化された場合は 0 以外。それ以外の場合は 0。
解説
たとえば、あるページでユーザーの操作によって別のページがアクティブページになる場合に使用 SetActivePage
します。
例
CPropertySheet::GetActivePage
の例を参照してください。
CPropertySheet::SetFinishText
[完了] コマンド ボタンのテキストを設定します。
void SetFinishText(LPCTSTR lpszText);
パラメーター
lpszText
[完了] コマンド ボタンに表示するテキストをポイントします。
解説
ユーザーがウィザードの最後のページでアクションを完了した後、[完了] コマンド ボタンにテキストを表示し、[次へ] ボタンと [戻る] ボタンを非表示にする呼び出 SetFinishText
し。
例
// 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
プロパティ シートのキャプション (フレーム ウィンドウのタイトル バーに表示されるテキスト) を指定します。
void SetTitle(
LPCTSTR lpszText,
UINT nStyle = 0);
パラメーター
nStyle
プロパティ シートのタイトルのスタイルを指定します。 スタイルは 0 または次のように PSH_PROPTITLE
指定する必要があります。 スタイルが設定PSH_PROPTITLE
されている場合は、キャプションとして指定されたテキストの後に "Properties" という単語が表示されます。 たとえば、("Simple", ) を呼び出すとSetTitle
、PSH_PROPTITLE
プロパティ シートが "Simple Properties" のキャプションになります。
lpszText
プロパティ シートのタイトル バーのキャプションとして使用するテキストをポイントします。
解説
既定では、プロパティ シートはプロパティ シート コンストラクターの キャプション パラメーターを使用します。
例
// 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
ウィザードのプロパティ シートの [戻る]、[次へ]、または [完了] ボタンを有効または無効にします。
void SetWizardButtons(DWORD dwFlags);
パラメーター
dwFlags
ウィザード ボタンの機能と外観をカスタマイズするフラグのセット。 このパラメーターは、次の値と組み合わせて指定できます。
PSWIZB_BACK
[戻る] ボタンPSWIZB_NEXT
[次へ] ボタンPSWIZB_FINISH
[完了] ボタンPSWIZB_DISABLEDFINISH
[完了を無効にする] ボタン
解説
ダイアログが開いた後にのみ呼び出します。呼び出SetWizardButtons
す前に呼び出SetWizardButtons
DoModal
すことはできません。 通常、次からCPropertyPage::OnSetActive
呼び出すSetWizardButtons
必要があります。
ユーザーがウィザードを完了したら、[完了] ボタンのテキストを変更するか、[次へ] ボタンと [戻る] ボタンを非表示にする場合は、 を呼び出 SetFinishText
します。 [完了] と [次へ] で同じボタンが共有されることに注意してください。 [完了] または [次へ] ボタンは一度に表示できますが、両方を表示することはできません。
例
A CPropertySheet
には、次の 3 つのウィザード プロパティ ページがあります。 CStylePage
CColorPage
CShapePage
次のコード フラグメントは、ウィザードのプロパティ ページで [戻る] ボタンと [次へ] ボタンを有効または無効にする方法を示しています。
// 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
ウィザードとしてプロパティ ページを確立します。
void SetWizardMode();
解説
ウィザードのプロパティ ページの主な特徴は、ユーザーがタブではなく[次へ]、[完了]、[戻る]、および [キャンセル] ボタンを使用して移動することです。
呼び出す前に呼び出 SetWizardMode
します DoModal
。 呼び出 SetWizardMode
した後、 DoModal
(ユーザーが ID_WIZFINISH
[完了] ボタンで閉じた場合) または IDCANCEL
.
SetWizardMode
フラグを設定します PSH_WIZARD
。
例
CPropertySheet sheet(_T("Simple PropertySheet"));
CStylePage pageStyle;
CColorPage pageColor;
CShapePage pageShape;
sheet.AddPage(&pageStyle);
sheet.AddPage(&pageColor);
sheet.AddPage(&pageShape);
sheet.SetWizardMode();
sheet.DoModal();
関連項目
MFC サンプル CMNCTRL1
MFC サンプル CMNCTRL2
MFC サンプル PROPDLG
MFC サンプル SNAPVW
CWnd
クラス
階層図
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示