
typedef struct _PROPSHEETPAGE {
DWORD dwSize;
DWORD dwFlags;
HINSTANCE hInstance;
union {
LPCSTR pszTemplate;
LPCDLGTEMPLATE pResource;
};
union {
HICON hIcon;
LPCSTR pszIcon;
};
LPCSTR pszTitle;
DLGPROC pfnDlgProc;
LPARAM lParam;
LPFNPSPCALLBACK pfnCallback;
UINT FAR * pcRefParent;
#if (_WIN32_IE >= 0x0400)
LPCTSTR pszHeaderTitle;
LPCTSTR pszHeaderSubTitle;
#endif
} PROPSHEETPAGE, FAR *LPPROPSHEETPAGE;
dwSize には、この構造体のサイズを指定します| 定数 | 解説 |
|---|---|
| PSP_DEFAULT | 構造体の全てのメンバに対し、デフォルト値を使用する |
| PSP_DLGINDIRECT | プロパティシートの点プレーどがすでにメモリ内にあり pResource メンバはそのメモリ位置を指している この場合 pszTemplate メンバは無視される |
| PSP_HASHELP | このページがアクティブになったら、「ヘルプ」ボタンを使用可能にする |
| PSP_RTLREADING | テキストを右から左に向かって描画する ヘブライ語、またはアラビア語で有効 |
| PSP_USECALLBACK | この構造体によって定義されたプロパティシートページが 作成、または削除される時 pfnCallback で指定された関数を呼び出す |
| PSP_USEHICON | ページタブの小さなアイコンとして hIcon (ハンドル)を使用する |
| PSP_USEICONID | ページタブの小さなアイコンとして pszIcon (リソース)を使用する |
| PSP_USEREFPARENT | この構造体によって作成されるプロパティシートページのライフタイムの間 pcRefParent によって指定された参照カウントを管理する |
| PSP_USETITLE | ダイアログのタイトルに pszTitle を使用する デフォルトでは、ダイアログボックステンプレートのタイトルが使用される |
UINT CALLBACK PropSheetPageProc(
HWND hwnd , UINT uMsg ,
LPPROPSHEETPAGE ppsp
);
hwnd は予約されている引数です| 定数 | 解説 |
|---|---|
| PSPCB_CREATE | ページが作成されようとしている ページを作成する場合は 0 以外、作成を拒否する場合は 0 を返す |
| PSPCB_RELEASE | ページが破棄されようとしている 戻り値は無視される |
| 定数 | 解説 |
|---|---|
| ID_PSREBOOTSYSTEM | ページが PSM_REBOOTSYSTEM メッセージをプロパティシートに送信した ユーザーが行った変更を有効にするには コンピュータを再起動しなければならない |
| ID_PSRESTARTWINDOWS | ページが PSM_RESTARTWINDOWS メッセージをプロパティシートに送信した ユーザーが行った変更を有効にするには コンピュータを再起動しなければならない |
typedef struct _PROPSHEETHEADER {
DWORD dwSize;
DWORD dwFlags;
HWND hwndParent;
HINSTANCE hInstance;
union {
HICON hIcon;
LPCTSTR pszIcon;
};
LPCSTR pszCaption;
UINT nPages;
union {
UINT nStartPage;
LPCTSTR pStartPage;
};
union {
LPCPROPSHEETPAGE ppsp;
HPROPSHEETPAGE FAR *phpage;
};
PFNPROPSHEETCALLBACK pfnCallback;
} PROPSHEETHEADER, FAR *LPPROPSHEETHEADER;
dwSize は、この構造体のサイズを指定します| 定数 | 解説 |
|---|---|
| PSH_DEFAULT | 全てのメンバに対してデフォルトの意味を使用する |
| PSH_HASHHELP | プロパティシートの「ヘルプ」ボタンを表示する |
| PSH_MODELESS | モードレスダイアログボックスのプロパティシートを作成する |
| PSH_MULTILINETABS | 複数行表示のタブを使用する |
| PSH_MOAPPLYNOW | 「更新」ボタンを削除する |
| PSH_PROPSHEETPAGE | ページを作成する時 ppsp を使用する このとき phppageは無視される |
| PSH_PROPTITLE | pszCaption で指定された文字列を プロパティシートのタイトルとして使用する |
| PSH_RTLREADING | テキストを右から左方向に描画する ヘブライ語、またはアラビア語に有効 |
| PSH_USECALLBACK | プロパティシートを初期化する時 pfnCallback で指定した関数を呼び出す |
| PSH_USEHICON | プロパティシートダイアログボックスのアイコンとして hIcon (ハンドル)を用いる |
| PSH_USEICONID | プロパティシートダイアログボックスのアイコンとして pszIcon (リソース)を用いる |
| PSH_USEPSTARTPAGE | プロパティシートの初期ページに pStartPage を用いる このとき nStartPage は無視される |
| PSH_WIZARD | ウィザードプロパティシートを作成する |
int CALLBACK PropSheetProc(
HWND hwndDlg , UINT uMsg ,
LPARAM lParam
);
hwndDlg には、プロパティシートダイアログボックスのハンドルが/*リソーススクリプト*/
PAGEICON ICON "test.ico"
KITTY DIALOG 0 , 0 , 150 , 70
FONT 16 , "MS Sans Serif"
CAPTION "Kitty's Page" {
LTEXT "Kitty on your lap" , -1 , 2 , 0 , 70 , 10
}
TARUTO DIALOG 0 , 0 , 150 , 70
FONT 16 , "MS Sans Serif"
CAPTION "TARUTO's Page" {
LTEXT "Magical nyan nyan TARUTO" , -1 , 2 , 0 , 100 , 10
}
#include <windows.h>
#include <commctrl.h>
#define TITLE TEXT("Kitty on your lap")
BOOL CALLBACK PageProc1(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) {
return FALSE;
}
BOOL CALLBACK PageProc2(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) {
return FALSE;
}
LRESULT CALLBACK WndProc(HWND hWnd , UINT msg , WPARAM wp , LPARAM lp) {
PROPSHEETPAGE psp;
PROPSHEETHEADER psh;
HPROPSHEETPAGE hPsp[2];
switch (msg) {
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_CREATE:
InitCommonControls();
return 0;
case WM_RBUTTONUP:
psp.dwSize = sizeof (PROPSHEETPAGE);
psp.dwFlags = PSP_DEFAULT | PSP_USEICONID;
psp.pszIcon = TEXT("PAGEICON");
psp.hInstance = (HINSTANCE)GetWindowLong(hWnd , GWL_HINSTANCE);
psp.pszTemplate = TEXT("KITTY");
psp.pfnDlgProc = (DLGPROC)PageProc1;
hPsp[0] = CreatePropertySheetPage(&psp);
psp.pszTemplate = TEXT("TARUTO");
psp.pfnDlgProc = (DLGPROC)PageProc2;
hPsp[1] = CreatePropertySheetPage(&psp);
psh.dwSize = sizeof (PROPSHEETHEADER);
psh.dwFlags = PSH_DEFAULT | PSH_USEHICON;
psh.hwndParent = hWnd;
psh.hIcon = LoadIcon(NULL , IDI_ASTERISK);
psh.pszCaption = TITLE;
psh.nPages = 2;
psh.phpage = hPsp;
PropertySheet(&psh);
return 0;
}
return DefWindowProc(hWnd , msg , wp , lp);
}
int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance ,
PSTR lpCmdLine , int nCmdShow ) {
HWND hWnd;
MSG msg;
WNDCLASS winc;
winc.style = CS_HREDRAW | CS_VREDRAW;
winc.lpfnWndProc = WndProc;
winc.cbClsExtra = winc.cbWndExtra = 0;
winc.hInstance = hInstance;
winc.hIcon = LoadIcon(NULL , IDI_APPLICATION);
winc.hCursor = LoadCursor(NULL , IDC_ARROW);
winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
winc.lpszMenuName = NULL;
winc.lpszClassName = TEXT("KITTY");
if (!RegisterClass(&winc)) return -1;
hWnd = CreateWindow(
TEXT("KITTY") , TITLE ,
WS_OVERLAPPEDWINDOW | WS_VISIBLE ,
CW_USEDEFAULT , CW_USEDEFAULT ,
CW_USEDEFAULT , CW_USEDEFAULT ,
NULL , NULL , hInstance , NULL
);
if (hWnd == NULL) return -1;
while(GetMessage(&msg , NULL , 0 , 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}

/*リソーススクリプト*/
PAGEICON ICON "test.ico"
KITTY DIALOG 0 , 0 , 150 , 70
FONT 12 , "MS Sans Serif"
CAPTION "Kitty's Page" {
RADIOBUTTON "RENA" , 1 , 10 , 0 , 100 , 10
RADIOBUTTON "YUKI" , 2 , 10 , 10 , 100 , 10
RADIOBUTTON "MIMI" , 3 , 10 , 20 , 100 , 10
}
#include <windows.h>
#include <commctrl.h>
#define TITLE TEXT("Kitty on your lap")
BOOL CALLBACK PageProc1(HWND hWnd , UINT msg , WPARAM wp , LPARAM lp) {
switch (msg) {
case WM_COMMAND:
CheckRadioButton(hWnd , 1 , 3 , LOWORD(wp));
PropSheet_Changed(GetParent(hWnd) , hWnd);
return TRUE;
case WM_NOTIFY:
if (((NMHDR *)lp)->code == PSN_APPLY)
MessageBox(hWnd ,
TEXT("OK または更新ボタンを押しました") , TEXT("設定") , 0);
return TRUE;
}
return FALSE;
}
LRESULT CALLBACK WndProc(HWND hWnd , UINT msg , WPARAM wp , LPARAM lp) {
PROPSHEETPAGE psp;
PROPSHEETHEADER psh;
switch (msg) {
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_CREATE:
InitCommonControls();
return 0;
case WM_RBUTTONUP:
psp.dwSize = sizeof (PROPSHEETPAGE);
psp.dwFlags = PSP_DEFAULT | PSP_USEICONID;
psp.pszIcon = TEXT("PAGEICON");
psp.hInstance = (HINSTANCE)GetWindowLong(hWnd , GWL_HINSTANCE);
psp.pszTemplate = TEXT("KITTY");
psp.pfnDlgProc = (DLGPROC)PageProc1;
psh.dwSize = sizeof (PROPSHEETHEADER);
psh.dwFlags = PSH_DEFAULT | PSH_USEHICON | PSH_PROPSHEETPAGE;
psh.hwndParent = hWnd;
psh.hIcon = LoadIcon(NULL , IDI_ASTERISK);
psh.pszCaption = TITLE;
psh.nPages = 1;
psh.ppsp = &psp;
PropertySheet(&psh);
return 0;
}
return DefWindowProc(hWnd , msg , wp , lp);
}
int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance ,
PSTR lpCmdLine , int nCmdShow ) {
HWND hWnd;
MSG msg;
WNDCLASS winc;
winc.style = CS_HREDRAW | CS_VREDRAW;
winc.lpfnWndProc = WndProc;
winc.cbClsExtra = winc.cbWndExtra = 0;
winc.hInstance = hInstance;
winc.hIcon = LoadIcon(NULL , IDI_APPLICATION);
winc.hCursor = LoadCursor(NULL , IDC_ARROW);
winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
winc.lpszMenuName = NULL;
winc.lpszClassName = TEXT("KITTY");
if (!RegisterClass(&winc)) return -1;
hWnd = CreateWindow(
TEXT("KITTY") , TITLE ,
WS_OVERLAPPEDWINDOW | WS_VISIBLE ,
CW_USEDEFAULT , CW_USEDEFAULT ,
CW_USEDEFAULT , CW_USEDEFAULT ,
NULL , NULL , hInstance , NULL
);
if (hWnd == NULL) return -1;
while(GetMessage(&msg , NULL , 0 , 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}

UINT CALLBACK PropSheetPageProc(
HWND hwnd , UINT uMsg ,
LPPROPSHEETPAGE ppsp
);
ページが作成、または破棄される時に呼び出される| 定数 | 解説 |
|---|---|
| PSPCB_CREATE | ページが作成されようとしている ページを作成する場合は 0 以外、作成を拒否する場合は 0 を返す |
| PSPCB_RELEASE | ページが破棄されようとしている 戻り値は無視される |
| 定数 | 解説 |
|---|---|
| ID_PSREBOOTSYSTEM | ページが PSM_REBOOTSYSTEM メッセージをプロパティシートに送信した ユーザーが行った変更を有効にするには コンピュータを再起動しなければならない |
| ID_PSRESTARTWINDOWS | ページが PSM_RESTARTWINDOWS メッセージをプロパティシートに送信した ユーザーが行った変更を有効にするには コンピュータを再起動しなければならない |
int CALLBACK PropSheetProc(
HWND hwndDlg , UINT uMsg ,
LPARAM lParam
);
プロパティシートの初期化時に呼び出される