Mfc-property-sheets
提供:Dev Guides
MFC-プロパティシート
- プロパティシート*はタブダイアログボックスとも呼ばれ、プロパティページを含むダイアログボックスです。 各プロパティページはダイアログテンプレートリソースに基づいており、コントロールが含まれています。 上部にタブがあるページに囲まれています。 タブはページに名前を付け、その目的を示します。 ユーザーはプロパティシートのタブをクリックして、コントロールのセットを選択します。
プロパティページを作成するには、ダイアログベースのMFCプロジェクトを作成して、簡単な例を見てみましょう。
プロジェクトが作成されたら、プロパティページを追加する必要があります。
Visual Studioでは、[リソースの追加]ダイアログボックスを表示し、[ダイアログ]ノードを展開してIDD_PROPPAGE_Xアイテムの1つを選択することにより、プロパティページのリソースを簡単に作成できます。
- ステップ1 *-ソリューションエクスプローラーでプロジェクトを右クリックし、[追加]→[リソース]を選択します。
- ステップ2 *-IDD_PROPPAGE_LARGEを選択し、[新規]をクリックします。
ステップ3 *-上記のように、このプロパティページのIDとキャプションをそれぞれ *IDD_PROPPAGE_1 と*プロパティページ1 *に変更します。
- ステップ4 *-デザイナーウィンドウのプロパティページを右クリックします。
- ステップ5 *-[クラスの追加]オプションを選択します。
- ステップ6 *-クラス名を入力し、基本クラスのドロップダウンリストからCPropertyPageを選択します。
- ステップ7 *-[完了]をクリックして続行します。
- ステップ8 *-上記の手順に従って、IDD_PROPPAGE_2およびCaption Property Page 2のプロパティページをもう1つ追加します。
- ステップ9 *-2つのプロパティページが作成されました。 その機能を実装するには、プロパティシートが必要です。
プロパティシートは、プロパティページをグループ化し、エンティティとして保持します。
プロパティシートを作成するには、以下の手順に従ってください-
- ステップ1 *-プロジェクトを右クリックして、[追加]> [クラス]メニューオプションを選択します。
- ステップ2 *-左ペインからVisual C ++→MFCを選択し、テンプレートペインでMFCクラスを選択して、[追加]をクリックします。
- ステップ3 *-クラス名を入力し、基本クラスのドロップダウンリストからCPropertySheetを選択します。
- ステップ4 *-[完了]をクリックして続行します。
- ステップ5 *-このプロパティシートを起動するには、メインプロジェクトクラスで以下の変更が必要です。
- ステップ6 *-CMFCPropSheetDemo.cppファイルに次の参照を追加します。
#include "MySheet.h"
#include "PropPage1.h"
#include "PropPage2.h"
- *ステップ7 *-CMFCPropSheetDemoApp
- InitInstance()メソッドを次のコードに示すように変更します。
CMySheet mySheet(L"Property Sheet Demo");
CPropPage1 page1;
CPropPage2 page2;
mySheet.AddPage(&page1);
mySheet.AddPage(&page2);
m_pMainWnd = &mySheet;
INT_PTR nResponse = mySheet.DoModal();
- ステップ8 *-CMFCPropSheetDemo.cppファイルの完全な実装を次に示します。
//MFCPropSheetDemo.cpp : Defines the class behaviors for the application.
//
#include "stdafx.h"
#include "MFCPropSheetDemo.h"
#include "MFCPropSheetDemoDlg.h"
#include "MySheet.h"
#include "PropPage1.h"
#include "PropPage2.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
//CMFCPropSheetDemoApp
BEGIN_MESSAGE_MAP(CMFCPropSheetDemoApp, CWinApp)
ON_COMMAND(ID_HELP, &CWinApp::OnHelp)
END_MESSAGE_MAP()
//CMFCPropSheetDemoApp construction
CMFCPropSheetDemoApp::CMFCPropSheetDemoApp() {
//support Restart Manager
m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART;
//TODO: add construction code here,
//Place all significant initialization in InitInstance
}
//The one and only CMFCPropSheetDemoApp object
CMFCPropSheetDemoApp theApp;
//CMFCPropSheetDemoApp initialization
BOOL CMFCPropSheetDemoApp::InitInstance() {
//InitCommonControlsEx() is required on Windows XP if an application
//manifest specifies use of ComCtl32.dll version 6 or later to enable
//visual styles. Otherwise, any window creation will fail.
INITCOMMONCONTROLSEX InitCtrls;
InitCtrls.dwSize = sizeof(InitCtrls);
//Set this to include all the common control classes you want to use
//in your application.
InitCtrls.dwICC = ICC_WIN95_CLASSES;
InitCommonControlsEx(&InitCtrls);
CWinApp::InitInstance();
AfxEnableControlContainer();
//Create the shell manager, in case the dialog contains
//any shell tree view or shell list view controls.
CShellManager *pShellManager = new CShellManager;
//Activate "Windows Native" visual manager for enabling themes in MFC controls
CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));
//Standard initialization
//If you are not using these features and wish to reduce the size
//of your final executable, you should remove from the following
//the specific initialization routines you do not need
//Change the registry key under which our settings are stored
//TODO: You should modify this string to be something appropriate
//such as the name of your company or organization
SetRegistryKey(_T("Local AppWizard-Generated Applications"));
CMySheet mySheet(L"Property Sheet Demo");
CPropPage1 page1;
CPropPage2 page2;
mySheet.AddPage(&page1);
mySheet.AddPage(&page2);
m_pMainWnd = &mySheet;
INT_PTR nResponse = mySheet.DoModal();
if (nResponse == IDOK) {
//TODO: Place code here to handle when the dialog is
//dismissed with OK
}else if (nResponse == IDCANCEL) {
//TODO: Place code here to handle when the dialog is
//dismissed with Cancel
}else if (nResponse == -1) {
TRACE(traceAppMsg, 0, "Warning: dialog creation failed,
so application is terminating unexpectedly.\n");
TRACE(traceAppMsg, 0, "Warning: if you are using MFC controls on the dialog,
you cannot #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS.\n");
}
//Delete the shell manager created above.
if (pShellManager != NULL) {
delete pShellManager;
}
//Since the dialog has been closed, return FALSE so that we exit the
//application, rather than start the application's message pump.
return FALSE;
}
- ステップ9 *-上記のコードをコンパイルして実行すると、次のダイアログボックスが表示されます。 このダイアログボックスには、2つのプロパティページが含まれています。