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 構造体。 基本的なプロパティ シート パラメーターへのアクセスを提供します。

解説

プロパティ シートは、 CPropertySheet オブジェクトと 1 つ以上の CPropertyPage オブジェクトで構成されます。 フレームワークは、一連のタブ インデックスと、現在選択されているページを含む領域を含むウィンドウとしてプロパティ シートを表示します。 ユーザーは、適切なタブを使用して特定のページに移動します。

CPropertySheet は、Windows 98 および Windows NT 2000 で導入された拡張 PROPSHEETHEADER 構造のサポートを提供します。 構造体には、"透かし" 背景ビットマップの使用をサポートする追加のフラグとメンバーが含まれています。

これらの新しいイメージをプロパティ シート オブジェクトに自動的に表示するには、 CPropertySheet::Construct または CPropertySheet::CPropertySheetの呼び出しでビットマップイメージとパレットイメージの有効な値を渡します。

CPropertySheetCDialogから派生したものではありませんが、CPropertySheet オブジェクトの管理は、CDialog オブジェクトの管理に似ています。 たとえば、プロパティ シートを作成するには、コンストラクターを呼び出し、モーダル プロパティ シートの DoModal を呼び出すか、モードレス プロパティ シートの Create を呼び出すという 2 部構成が必要です。 CPropertySheet には、 CPropertySheet::ConstructCPropertySheet::CPropertySheet の 2 種類のコンストラクターがあります。

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

  • DS_3DLOOK

  • DS_CONTROL

  • WS_CHILD

  • WS_TABSTOP

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

  • DS_SHELLFONT

  • DS_LOCALEDIT

  • WS_CLIPCHILDREN

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

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

ウィザードと呼ばれるタブ ダイアログ ボックスの種類を作成できます。このダイアログ ボックスは、デバイスの設定やニュースレターの作成など、操作の手順をユーザーに案内する一連のプロパティ ページを含むプロパティ シートで構成されます。 ウィザードの種類のタブ ダイアログ ボックスでは、プロパティ ページにタブは表示されず、一度に表示されるプロパティ ページは 1 つだけです。 また、 OKApply Now ボタンの代わりに、ウィザードの種類のタブ ダイアログ ボックスには、 Back ボタン、 Next または Finish ボタン、 Cancel ボタン、および Help ボタンがあります。

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

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

継承階層

CObject

CCmdTarget

CWnd

CPropertySheet

要件

ヘッダー: afxdlgs.h

CPropertySheet::AddPage

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

void AddPage(CPropertyPage* pPage);

パラメーター

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

解説

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

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

AddPageを使用してプロパティ ページを追加する場合、CPropertySheetCPropertyPageの親になります。 プロパティ ページからプロパティ シートにアクセスするには、 CWnd::GetParentを呼び出します。

プロパティ シート ウィンドウを作成して AddPageを呼び出すまで待つ必要はありません。 通常、DoModalまたはCreateを呼び出す前に、AddPageを呼び出します。

プロパティ ページを表示した後 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を呼び出します。 最初のパラメーターに含まれる文字列は、プロパティ シートのキャプション バーに配置されます。

上記の Constructの 3 番目または 4 番目のプロトタイプを使用し、 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を使用します。

上記の CPropertySheetの 3 番目または 4 番目のプロトタイプを使用し、 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
プロパティ シートのウィンドウ スタイル。 使用可能なスタイルの完全な一覧については、「 Window スタイル」を参照してください。

dwExStyle
プロパティ シートの拡張ウィンドウ スタイル。 使用可能なスタイルの完全な一覧については、「 目的のウィンドウ スタイル」を参照してください。

戻り値

プロパティ シートが正常に作成された場合は 0 以外。それ以外の場合は 0。

解説

Createの呼び出しは、コンストラクター内に配置することも、コンストラクターの呼び出し後に呼び出すこともできます。

dwStyleとして -1 を渡すことによって表される既定のスタイルは、実際にはWS_SYSMENU|WS_POPUP|WS_CAPTION|DS_MODALFRAME|DS_CONTEXTHELP|WS_VISIBLEdwExStyleとして 0 を渡すことによって表される既定の拡張ウィンドウ スタイルは、実際にはWS_EX_DLGMODALFRAME

Createメンバー関数は、プロパティ シートを作成した直後に返されます。 プロパティ シートを破棄するには、 CWnd::DestroyWindowを呼び出します。

モードレス プロパティ シートが表示され、モーダル プロパティ シートと同様に、 Create の呼び出しに [OK]、[キャンセル]、[今すぐ適用]、および [ヘルプ] ボタンがありません。 必要なボタンは、ユーザーが作成する必要があります。

モーダル プロパティ シートを表示するには、代わりに 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を参照)、 DoModalID_WIZFINISH または IDCANCELを返します。

解説

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

モードレス プロパティ シートを表示するには、代わりに Create を呼び出します。

対応するダイアログ リソースからプロパティ ページが作成されると、初回例外が発生する可能性があります。 これは、プロパティ ページがダイアログ リソースのスタイルを、ページが作成される前に必要なスタイルに変更した結果です。 通常、リソースは読み取り専用であるため、例外が発生します。 システムは例外を処理し、変更されたリソースのコピーを作成します。 したがって、初回例外は無視できます。

Note

非同期例外処理モデルを使用してコンパイルする場合は、この例外をオペレーティング システムで処理する必要があります。 例外処理モデルの詳細については、「 /EH (例外処理モデル)」を参照してください。 この場合、 CPropertySheet::DoModal への呼び出しを、catch がすべての例外 ( catch (...) など) を処理する C++ try-catch ブロックでラップしないでください。 このブロックは、オペレーティング システムを対象とした例外を処理し、予期しない動作を引き起こします。 ただし、アクセス違反例外がオペレーティング システムに渡される特定の例外の種類または構造化例外処理では、C++ 例外処理を安全に使用できます。

この初回例外が生成されないようにするには、プロパティ シートに正しい Window スタイルがあることを手動で保証します。 プロパティ シートには、次のスタイルを設定する必要があります。

  • DS_3DLOOK

  • DS_CONTROL

  • WS_CHILD

  • WS_TABSTOP

初回例外を発生させずに、次の省略可能なスタイルを使用できます。

  • DS_SHELLFONT

  • DS_LOCALEDIT

  • WS_CLIPCHILDREN

プロパティ シートと互換性がないため、他のすべての Windows スタイルを無効にします。 このアドバイスは、拡張スタイルには適用されません。 これらの標準スタイルを適切に設定すると、プロパティ シートを変更する必要がないようにし、初回例外の生成を回避できます。

CPropertySheet::AddPage の例を参照してください。

CPropertySheet::EnableStackedTabs

プロパティ シート内のタブの行をスタックするかどうかを示します。

void EnableStackedTabs(BOOL bStacked);

パラメーター

bStacked
プロパティ シートで積み上げタブが有効かどうかを示します。 bStackedFALSE に設定して、タグの積み重ね行を無効にします。

解説

既定では、プロパティ シートにプロパティ シートの幅の 1 行に収まるタブよりも多くのタブがある場合、タブは複数の行に積み重ねられます。 タブを積み重ねる代わりにスクロール タブを使用するには、DoModalまたはCreateを呼び出す前に、bStackedFALSE に設定してEnableStackedTabsを呼び出します。

モーダル プロパティ シートまたはモードレス プロパティ シートを作成するときは、 EnableStackedTabs を呼び出す必要があります。 このスタイルを 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 にすることはできません。

戻り値

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

解説

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

CPropertySheet::GetActivePage の例を参照してください。

CPropertySheet::GetTabControl

タブ コントロールに固有の操作 (つまり、 CTabCtrlの API のいずれかを使用する) を行うタブ コントロールへのポインターを取得します。

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 メンバー関数で表示される前にプロパティ シートの外観を初期化します。 たとえば、m_pshdwSize メンバーを、プロパティ シートのサイズに設定します。

メンバーの一覧など、この構造の詳細については、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 です。

GetDialogBaseUnits Windows 関数はシステム フォントのサイズ情報を返しますが、リソース定義ファイルで DS_SETFONT スタイルを使用する場合は、プロパティ シートごとに異なるフォントを指定できます。 Windows SDK で説明されている MapDialogRect Windows 関数は、このダイアログ ボックスに適したフォントを使用します。

MapDialogRectメンバー関数は、lpRectのダイアログ ボックスの単位を画面単位 (ピクセル) に置き換え、四角形を使用してダイアログ ボックスを作成したり、ボックス内にコントロールを配置したりできるようにします。

CPropertySheet::OnInitDialog

プロパティ シートの初期化を拡張するためにオーバーライドします。

virtual BOOL OnInitDialog();

戻り値

アプリケーションがプロパティ シートのコントロールのいずれかに入力フォーカスを設定するかどうかを指定します。 OnInitDialog 0 以外の値が返された場合、Windows は入力フォーカスをプロパティ シートの最初のコントロールに設定します。 アプリケーションは、プロパティ シートのコントロールのいずれかに入力フォーカスを明示的に設定した場合にのみ、0 を返すことができます。

解説

このメンバー関数は、 WM_INITDIALOG メッセージに応答して呼び出されます。 このメッセージは、プロパティ シートが表示される直前に発生する、 Create または DoModal の呼び出し中にプロパティ シートに送信されます。

プロパティ シートの初期化時に特別な処理を実行する必要がある場合は、このメンバー関数をオーバーライドします。 オーバーライドされたバージョンでは、最初に基底クラス 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" という単語が表示されます。 たとえば、 SetTitle("Simple", PSH_PROPTITLE) を呼び出すと、プロパティ シートのキャプションが "Simple Properties" になります。

lpszText
プロパティ シートのタイトル バーのキャプションとして使用するテキストをポイントします。

解説

既定では、プロパティ シートはプロパティ シートコンストラクターの caption パラメーターを使用します。

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

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

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

// 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();

解説

ウィザードのプロパティ ページの主な特徴は、ユーザーがタブではなく[次へ]、[完了]、[戻る]、および [キャンセル] ボタンを使用して移動することです。

DoModalを呼び出す前にSetWizardModeを呼び出します。 SetWizardModeを呼び出すと、DoModalID_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 クラス
階層図