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 );プロパティシートの初期化時に呼び出される