1 /* 2 * PROJECT: ReactOS Applications 3 * LICENSE: LGPL - See COPYING in the top level directory 4 * FILE: base/applications/msconfig/systempage.c 5 * PURPOSE: System page message handler 6 * COPYRIGHT: Copyright 2005-2006 Christoph von Wittich <Christoph@ApiViewer.de> 7 * 2011 Gregor Schneider <Gregor.Schneider@reactos.org> 8 */ 9 10 #include "precomp.h" 11 12 HWND hSystemPage; 13 HWND hSystemDialog; 14 15 #define BUFFER_SIZE 512 16 17 static BOOL 18 LoadSystemIni(WCHAR * szPath, HWND hDlg) 19 { 20 WCHAR szBuffer[BUFFER_SIZE]; 21 HWND hDlgCtrl; 22 HTREEITEM parent = NULL; 23 FILE* file; 24 UINT length; 25 TVINSERTSTRUCT insert; 26 HRESULT hr; 27 28 hr = StringCbCopyW(szBuffer, sizeof(szBuffer), szPath); 29 if (FAILED(hr)) 30 return FALSE; 31 32 hr = StringCbCatW(szBuffer, sizeof(szBuffer), L"\\system.ini"); 33 if (FAILED(hr)) 34 return FALSE; 35 36 file = _wfopen(szBuffer, L"rt"); 37 if (!file) 38 return FALSE; 39 40 hDlgCtrl = GetDlgItem(hDlg, IDC_SYSTEM_TREE); 41 42 while(!feof(file)) 43 { 44 if (fgetws(szBuffer, BUFFER_SIZE, file)) 45 { 46 length = wcslen(szBuffer); 47 if (length > 1) 48 { 49 szBuffer[length] = L'\0'; 50 szBuffer[length - 1] = L'\0'; 51 insert.hInsertAfter = TVI_LAST; 52 insert.item.mask = TVIF_TEXT; 53 insert.item.pszText = szBuffer; 54 55 if (szBuffer[0] == L';' || szBuffer[0] == L'[') 56 { 57 /* Parent */ 58 insert.hParent = NULL; 59 parent = TreeView_InsertItem(hDlgCtrl, &insert); 60 } 61 else 62 { 63 /* Child */ 64 insert.hParent = parent; 65 TreeView_InsertItem(hDlgCtrl, &insert); 66 } 67 } 68 } 69 } 70 71 fclose(file); 72 73 return TRUE; 74 } 75 76 static BOOL 77 InitializeSystemDialog(HWND hDlg) 78 { 79 WCHAR winDir[PATH_MAX]; 80 81 GetWindowsDirectoryW(winDir, PATH_MAX); 82 return LoadSystemIni(winDir, hDlg); 83 } 84 85 86 INT_PTR CALLBACK 87 SystemPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) 88 { 89 UNREFERENCED_PARAMETER(lParam); 90 UNREFERENCED_PARAMETER(wParam); 91 switch (message) { 92 case WM_INITDIALOG: 93 { 94 hSystemDialog = hDlg; 95 SetWindowPos(hDlg, NULL, 10, 32, 0, 0, SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOSIZE | SWP_NOZORDER); 96 InitializeSystemDialog(hDlg); 97 return TRUE; 98 } 99 } 100 101 return 0; 102 } 103