Share via


CPropertySheet クラス

タブ ダイアログ ボックスとしても知られるプロパティ シートを表します。

構文

class CPropertySheet : public CWnd

メンバー

パブリック コンストラクター

名前 説明
CPropertySheet::CPropertySheet CPropertySheet オブジェクトを構築します。

パブリック メソッド

名前 説明
CPropertySheet::AddPage プロパティ シートにページを追加します。
CPropertySheet::Construct CPropertySheet オブジェクトを構築します。
CPropertySheet::Create モードレス プロパティ シートを表示します。
CPropertySheet::DoModal モーダル プロパティ シートを表示します。
CPropertySheet::EnableStackedTabs プロパティ シートで積み上げタブとスクロール タブのどちらを使用するかを示します。
CPropertySheet::EndDialog プロパティ シートを終了します。
CPropertySheet::GetActiveIndex プロパティ シートのアクティブなページのインデックスを取得します。
CPropertySheet::GetActivePage アクティブなページ オブジェクトを返します。
CPropertySheet::GetPage 指定したページへのポインターを取得します。
CPropertySheet::GetPageCount プロパティ シート内のページ数を取得します。
CPropertySheet::GetPageIndex プロパティ シートの指定したページのインデックスを取得します。
CPropertySheet::GetTabControl タブ コントロールへのポインターを取得します。
CPropertySheet::MapDialogRect 四角形のダイアログ ボックスの単位を画面の単位に変換します。
CPropertySheet::OnInitDialog プロパティ シートの初期化を拡張するためにオーバーライドします。
CPropertySheet::PressButton プロパティ シート内の指定したボタンの選択をシミュレートします。
CPropertySheet::RemovePage プロパティ シートからページを削除します。
CPropertySheet::SetActivePage アクティブなページ オブジェクトをプログラムで設定します。
CPropertySheet::SetFinishText [完了] ボタンのテキストを設定します。
CPropertySheet::SetTitle プロパティ シートのキャプションを設定します。
CPropertySheet::SetWizardButtons ウィザード ボタンを有効にします。
CPropertySheet::SetWizardMode ウィザード モードを有効にします。

パブリック データ メンバー

名前 説明
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::ConstructCPropertySheet::CPropertySheet

オブジェクトを CPropertySheet 作成すると、一部 のウィンドウ スタイル によって初回例外が発生する可能性があります。 これは、システムがシートを作成する前にプロパティ シートのスタイルを変更しようとした結果です。 この例外を回避するには、次のスタイルを作成するときに必ず設定してください CPropertySheet

  • DS_3DLOOK

  • DS_CONTROL

  • WS_CHILD

  • WS_TABSTOP

次のスタイルは省略可能であり、初回例外は発生しません。

  • DS_SHELLFONT

  • DS_LOCALEDIT

  • WS_CLIPCHILDREN

その他 Window Styles は禁止されており、有効にしないでください。

オブジェクトと外部オブジェクトの間で CPropertySheet データを交換することは、オブジェクトとのデータ交換に CDialog 似ています。 重要な違いは、プロパティ シートの設定は通常、オブジェクト自体ではなく、オブジェクトのCPropertyPageCPropertySheetメンバー変数であるという点です。

ウィザードと呼ばれるタブ ダイアログ ボックスの種類を作成できます。このダイアログ ボックスは、デバイスの設定やニュースレターの作成など、操作の手順をユーザーに案内する一連のプロパティ ページを含むプロパティ シートで構成されます。 ウィザードの種類のタブ ダイアログ ボックスでは、プロパティ ページにタブは表示されず、一度に表示されるプロパティ ページは 1 つだけです。 また、[OK] ボタンと [今すぐ適用] ボタンを使用する代わりに、[戻る] ボタン、[次へ] または [完了] ボタン、[キャンセル] ボタン、および [ヘルプ] ボタンがあります。

ウィザードの種類のダイアログ ボックスを作成するには、標準のプロパティ シートを作成する場合と同じ手順に従いますが、呼び出す前に呼び出 SetWizardMode します DoModal。 ウィザード ボタンを有効にするには、フラグを使用して関数と外観をカスタマイズする呼び出 SetWizardButtonsしを行います。 [完了] ボタンを有効にするには、ユーザーがウィザードの最後のページでアクションを実行した後に呼び出SetFinishTextします。

オブジェクトの使用方法 CPropertySheet の詳細については、「プロパティ シートとプロパティ ページ」を 参照してください

継承階層

CObject

CCmdTarget

CWnd

CPropertySheet

必要条件

ヘッダー:afxdlgs.h

CPropertySheet::AddPage

指定したページをプロパティ シートの右端のタブに追加します。

void AddPage(CPropertyPage* pPage);

パラメーター

pPage
プロパティ シートに追加するページをポイントします。 NULL にすることはできません。

解説

ページを表示する左から右の順序でプロパティ シートにページを追加します。

AddPageはオブジェクトをCPropertyPageCPropertySheetページのリストに追加しますが、実際にはページのウィンドウは作成しません。 フレームワークは、ユーザーがそのページを選択するまで、ページのウィンドウの作成を延期します。

を使用してAddPageCPropertySheetプロパティ ページを追加する場合、その親CPropertyPageは . プロパティ ページからプロパティ シートにアクセスするには、次を呼び出します CWnd::GetParent

呼び出す AddPageプロパティ シート ウィンドウの作成まで待機する必要はありません。 通常、呼び出す前に呼び出AddPageしますDoModalCreate

プロパティ ページを表示した後で呼び出 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プロトタイプを使用し、パラメーターに有効な値hbmWatermarkhpalWatermarkを渡すと、透かしや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プロトタイプを使用し、パラメーターに有効な値hbmWatermarkhpalWatermarkを渡すと、透かしや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。 プロパティ シートがウィザード (参照) SetWizardModeDoModal として確立されている場合は、いずれかID_WIZFINISHを返しますIDCANCEL

解説

戻り値は、プロパティ シートを閉じたコントロールの ID に対応します。 この関数が戻ると、プロパティ シートとすべてのページに対応するウィンドウが破棄されます。 オブジェクト自体は引き続き存在します。 通常、IDOK を返した後DoModalCPropertyPageオブジェクトからデータを取得します。

モードレス プロパティ シートを表示するには、代わりに呼び出 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 行に収まるタブよりも多くのタブがある場合、タブは複数の行に積み重ねられます。 タブを積み重ねる代わりにスクロール タブを使用するには、呼び出しEnableStackedTabsbStackedFALSEDoModalまたは .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 にすることはできません。

戻り値

ページのインデックス番号。

解説

たとえば、使用するためにページ インデックスを取得するために使用 GetPageIndexSetActivePageGetPageします。

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", ) を呼び出すとSetTitlePSH_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す前に呼び出SetWizardButtonsDoModalすことはできません。 通常、次からCPropertyPage::OnSetActive呼び出すSetWizardButtons必要があります。

ユーザーがウィザードを完了したら、[完了] ボタンのテキストを変更するか、[次へ] ボタンと [戻る] ボタンを非表示にする場合は、 を呼び出 SetFinishTextします。 [完了] と [次へ] で同じボタンが共有されることに注意してください。 [完了] または [次へ] ボタンは一度に表示できますが、両方を表示することはできません。

A CPropertySheet には、次の 3 つのウィザード プロパティ ページがあります。 CStylePageCColorPageCShapePage 次のコード フラグメントは、ウィザードのプロパティ ページで [戻る] ボタンと [次へ] ボタンを有効または無効にする方法を示しています。

// 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 クラス
階層図