ReactOS  0.4.12-dev-75-g00dd17e
propsheet.c
Go to the documentation of this file.
1 /*
2  * PROJECT: ReactOS Services
3  * LICENSE: GPL - See COPYING in the top level directory
4  * FILE: base/applications/mscutils/servman/propsheet.c
5  * PURPOSE: Property dialog box message handler
6  * COPYRIGHT: Copyright 2006-2017 Ged Murphy <gedmurphy@reactos.org>
7  *
8  */
9 
10 #include "precomp.h"
11 
12 unsigned int __stdcall PropSheetThread(void* Param);
13 
14 static VOID
16  PSERVICEPROPSHEET dlgInfo,
17  WORD idDlg,
19 {
20  ZeroMemory(psp, sizeof(PROPSHEETPAGE));
21  psp->dwSize = sizeof(PROPSHEETPAGE);
22  psp->dwFlags = PSP_DEFAULT;
23  psp->hInstance = hInstance;
24  psp->pszTemplate = MAKEINTRESOURCE(idDlg);
25  psp->pfnDlgProc = DlgProc;
26  psp->lParam = (LPARAM)dlgInfo;
27 }
28 
29 VOID
31 {
32  PSERVICEPROPSHEET pServicePropSheet;
34 
35  pServicePropSheet = HeapAlloc(ProcessHeap,
36  0,
37  sizeof(*pServicePropSheet));
38  if (!pServicePropSheet) return;
39 
40  /* Set the current service in this calling thread to avoid
41  * it being updated before the thread is up */
42  pServicePropSheet->pService = Info->pCurrentService;
43  pServicePropSheet->Info = Info;
44 
45  hThread = (HANDLE)_beginthreadex(NULL, 0, &PropSheetThread, pServicePropSheet, 0, NULL);
46  if (hThread)
47  {
48  CloseHandle(hThread);
49  }
50 }
51 
52 
53 unsigned int __stdcall PropSheetThread(void* Param)
54 {
55  PSERVICEPROPSHEET pServicePropSheet;
56  PROPSHEETHEADER psh;
57  PROPSHEETPAGE psp[4];
58  HWND hDlg = NULL;
59  MSG Msg;
60 
61  pServicePropSheet = (PSERVICEPROPSHEET)Param;
62 
63  ZeroMemory(&psh, sizeof(PROPSHEETHEADER));
64  psh.dwSize = sizeof(PROPSHEETHEADER);
66  psh.hwndParent = pServicePropSheet->Info->hMainWnd;
67  psh.hInstance = hInstance;
69  psh.pszCaption = pServicePropSheet->Info->pCurrentService->lpDisplayName;
70  psh.nPages = sizeof(psp) / sizeof(PROPSHEETPAGE);
71  psh.nStartPage = 0;
72  psh.ppsp = psp;
73 
74  /* Initialize the tabs */
75  InitPropSheetPage(&psp[0], pServicePropSheet, IDD_DLG_GENERAL, GeneralPageProc);
76  InitPropSheetPage(&psp[1], pServicePropSheet, IDD_LOGON, LogonPageProc);
77  InitPropSheetPage(&psp[2], pServicePropSheet, IDD_RECOVERY, RecoveryPageProc);
78  InitPropSheetPage(&psp[3], pServicePropSheet, IDD_DLG_DEPEND, DependenciesPageProc);
79 
80  hDlg = (HWND)PropertySheetW(&psh);
81  if (hDlg)
82  {
83  /* Pump the message queue */
84  while (GetMessageW(&Msg, NULL, 0, 0))
85  {
87  {
88  /* The user hit the ok / cancel button, pull it down */
89  EnableWindow(pServicePropSheet->Info->hMainWnd, TRUE);
90  DestroyWindow(hDlg);
91  }
92 
93  if (!PropSheet_IsDialogMessage(hDlg, &Msg))
94  {
95  TranslateMessage(&Msg);
96  DispatchMessageW(&Msg);
97  }
98  }
99  }
100 
101  HeapFree(GetProcessHeap(), 0, pServicePropSheet);
102 
103  return (hDlg != NULL);
104 }
105 
WORD idDlg
Definition: desk.c:109
#define MAKEINTRESOURCE
Definition: winuser.h:591
BOOL WINAPI TranslateMessage(_In_ const MSG *)
#define TRUE
Definition: types.h:120
#define CloseHandle
Definition: compat.h:398
#define PropSheet_IsDialogMessage(d, m)
Definition: prsht.h:329
#define PropSheet_GetCurrentPageHwnd(d)
Definition: prsht.h:327
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1827
HANDLE HWND
Definition: compat.h:13
#define ZeroMemory
Definition: winbase.h:1635
#define PSH_MODELESS
Definition: prsht.h:50
_CRTIMP uintptr_t __cdecl _beginthreadex(_In_opt_ void *_Security, _In_ unsigned _StackSize, _In_ unsigned(__stdcall *_StartAddress)(void *), _In_opt_ void *_ArgList, _In_ unsigned _InitFlag, _Out_opt_ unsigned *_ThrdAddr)
BOOL WINAPI DestroyWindow(_In_ HWND)
struct TraceInfo Info
struct @1571 Msg[]
HINSTANCE hInstance
Definition: charmap.c:20
INT_PTR CALLBACK GeneralPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
LRESULT WINAPI DispatchMessageW(_In_ const MSG *)
smooth NULL
Definition: ftsmooth.c:416
#define PROPSHEETHEADER
Definition: prsht.h:374
INT_PTR WINAPI PropertySheetW(LPCPROPSHEETHEADERW lppsh)
Definition: propsheet.c:2896
#define IDD_LOGON
Definition: resource.h:143
#define IDD_RECOVERY
Definition: resource.h:158
#define PSP_DEFAULT
Definition: prsht.h:22
#define GetProcessHeap()
Definition: compat.h:395
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
unsigned int __stdcall PropSheetThread(void *Param)
Definition: propsheet.c:53
#define PSH_PROPTITLE
Definition: prsht.h:40
unsigned short WORD
Definition: ntddk_ex.h:93
PVOID HANDLE
Definition: typedefs.h:71
#define __stdcall
Definition: typedefs.h:25
static VOID InitPropSheetPage(PROPSHEETPAGE *psp, PSERVICEPROPSHEET dlgInfo, WORD idDlg, DLGPROC DlgProc)
Definition: propsheet.c:15
VOID OpenPropSheet(PMAIN_WND_INFO Info)
Definition: propsheet.c:30
INT_PTR CALLBACK LogonPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
#define IDD_DLG_DEPEND
Definition: resource.h:176
HANDLE ProcessHeap
Definition: servman.c:15
INT_PTR(CALLBACK * DLGPROC)(HWND, UINT, WPARAM, LPARAM)
Definition: winuser.h:2849
BOOL WINAPI EnableWindow(_In_ HWND, _In_ BOOL)
INT_PTR CALLBACK RecoveryPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
ENUM_SERVICE_STATUS_PROCESS * pService
Definition: precomp.h:130
ENUM_SERVICE_STATUS_PROCESS * pCurrentService
Definition: precomp.h:57
#define PSH_PROPSHEETPAGE
Definition: prsht.h:43
#define IDD_DLG_GENERAL
Definition: resource.h:128
HWND hMainWnd
Definition: precomp.h:48
BOOL WINAPI GetMessageW(_Out_ LPMSG, _In_opt_ HWND, _In_ UINT, _In_ UINT)
HANDLE hThread
Definition: wizard.c:27
#define IDI_SM_ICON
Definition: resource.h:66
INT_PTR CALLBACK DependenciesPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
#define LoadIcon
Definition: winuser.h:5679
struct _SERVICEPROPSHEET * PSERVICEPROPSHEET
DLGPROC DlgProc
Definition: desk.c:110
PMAIN_WND_INFO Info
Definition: precomp.h:129
#define HeapFree(x, y, z)
Definition: compat.h:394
#define PROPSHEETPAGE
Definition: prsht.h:371
#define LPARAM
Definition: msvc.h:38