Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenmisc.c
Go to the documentation of this file.
00001 /* 00002 * PROJECT: ReactOS Services 00003 * LICENSE: GPL - See COPYING in the top level directory 00004 * FILE: base/system/servman/misc.c 00005 * PURPOSE: miscallanous functions 00006 * COPYRIGHT: Copyright 2005 Thomas Weidenmueller <w3seek@reactos.org> 00007 * Copyright 2006 Ged Murphy <gedmurphy@gmail.com> 00008 * 00009 */ 00010 00011 #include "precomp.h" 00012 00013 static INT 00014 LengthOfStrResource(IN HINSTANCE hInst, 00015 IN UINT uID) 00016 { 00017 HRSRC hrSrc; 00018 HGLOBAL hRes; 00019 LPWSTR lpName, lpStr; 00020 00021 if (hInst == NULL) 00022 { 00023 return -1; 00024 } 00025 00026 /* There are always blocks of 16 strings */ 00027 lpName = (LPWSTR)MAKEINTRESOURCE((uID >> 4) + 1); 00028 00029 /* Find the string table block */ 00030 if ((hrSrc = FindResourceW(hInst, lpName, (LPWSTR)RT_STRING)) && 00031 (hRes = LoadResource(hInst, hrSrc)) && 00032 (lpStr = (WCHAR*) LockResource(hRes))) 00033 { 00034 UINT x; 00035 00036 /* Find the string we're looking for */ 00037 uID &= 0xF; /* position in the block, same as % 16 */ 00038 for (x = 0; x < uID; x++) 00039 { 00040 lpStr += (*lpStr) + 1; 00041 } 00042 00043 /* Found the string */ 00044 return (int)(*lpStr); 00045 } 00046 return -1; 00047 } 00048 00049 INT 00050 AllocAndLoadString(OUT LPTSTR *lpTarget, 00051 IN HINSTANCE hInst, 00052 IN UINT uID) 00053 { 00054 INT ln; 00055 00056 ln = LengthOfStrResource(hInst, 00057 uID); 00058 if (ln++ > 0) 00059 { 00060 (*lpTarget) = (LPTSTR)LocalAlloc(LMEM_FIXED, 00061 ln * sizeof(TCHAR)); 00062 if ((*lpTarget) != NULL) 00063 { 00064 INT Ret; 00065 if (!(Ret = LoadString(hInst, uID, *lpTarget, ln))) 00066 { 00067 LocalFree((HLOCAL)(*lpTarget)); 00068 } 00069 return Ret; 00070 } 00071 } 00072 return 0; 00073 } 00074 00075 DWORD 00076 LoadAndFormatString(IN HINSTANCE hInstance, 00077 IN UINT uID, 00078 OUT LPTSTR *lpTarget, 00079 ...) 00080 { 00081 DWORD Ret = 0; 00082 LPTSTR lpFormat; 00083 va_list lArgs; 00084 00085 if (AllocAndLoadString(&lpFormat, 00086 hInstance, 00087 uID) > 0) 00088 { 00089 va_start(lArgs, lpTarget); 00090 /* let's use Format to format it because it has the ability to allocate 00091 memory automatically */ 00092 Ret = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_STRING, 00093 lpFormat, 00094 0, 00095 0, 00096 (LPTSTR)lpTarget, 00097 0, 00098 &lArgs); 00099 va_end(lArgs); 00100 00101 LocalFree((HLOCAL)lpFormat); 00102 } 00103 00104 return Ret; 00105 } 00106 00107 BOOL 00108 StatusBarLoadAndFormatString(IN HWND hStatusBar, 00109 IN INT PartId, 00110 IN HINSTANCE hInstance, 00111 IN UINT uID, 00112 ...) 00113 { 00114 BOOL Ret = FALSE; 00115 LPTSTR lpFormat, lpStr; 00116 va_list lArgs; 00117 00118 if (AllocAndLoadString(&lpFormat, 00119 hInstance, 00120 uID) > 0) 00121 { 00122 va_start(lArgs, uID); 00123 /* let's use FormatMessage to format it because it has the ability to allocate 00124 memory automatically */ 00125 Ret = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_STRING, 00126 lpFormat, 00127 0, 00128 0, 00129 (VOID*)&lpStr, 00130 0, 00131 &lArgs); 00132 va_end(lArgs); 00133 00134 if (lpStr != NULL) 00135 { 00136 Ret = (BOOL)SendMessage(hStatusBar, 00137 SB_SETTEXT, 00138 (WPARAM)PartId, 00139 (LPARAM)lpStr); 00140 LocalFree((HLOCAL)lpStr); 00141 } 00142 00143 LocalFree((HLOCAL)lpFormat); 00144 } 00145 00146 return Ret; 00147 } 00148 00149 BOOL 00150 StatusBarLoadString(IN HWND hStatusBar, 00151 IN INT PartId, 00152 IN HINSTANCE hInstance, 00153 IN UINT uID) 00154 { 00155 BOOL Ret = FALSE; 00156 LPTSTR lpStr; 00157 00158 if (AllocAndLoadString(&lpStr, 00159 hInstance, 00160 uID) > 0) 00161 { 00162 Ret = (BOOL)SendMessage(hStatusBar, 00163 SB_SETTEXT, 00164 (WPARAM)PartId, 00165 (LPARAM)lpStr); 00166 LocalFree((HLOCAL)lpStr); 00167 } 00168 00169 return Ret; 00170 } 00171 00172 00173 INT 00174 GetTextFromEdit(OUT LPTSTR lpString, 00175 IN HWND hDlg, 00176 IN UINT Res) 00177 { 00178 INT len = GetWindowTextLength(GetDlgItem(hDlg, Res)); 00179 if(len > 0) 00180 { 00181 GetDlgItemText(hDlg, 00182 Res, 00183 lpString, 00184 len + 1); 00185 } 00186 else 00187 lpString = NULL; 00188 00189 return len; 00190 } 00191 00192 VOID GetError(VOID) 00193 { 00194 LPTSTR lpMsgBuf = NULL; 00195 00196 FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | 00197 FORMAT_MESSAGE_FROM_SYSTEM | 00198 FORMAT_MESSAGE_IGNORE_INSERTS, 00199 NULL, 00200 GetLastError(), 00201 MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), 00202 (VOID*)&lpMsgBuf, 00203 0, 00204 NULL ); 00205 00206 MessageBox(NULL, lpMsgBuf, _T("Error!"), MB_OK | MB_ICONERROR); 00207 00208 LocalFree(lpMsgBuf); 00209 } 00210 00211 VOID DisplayString(PTCHAR Msg) 00212 { 00213 MessageBox(NULL, Msg, _T("Note!"), MB_ICONEXCLAMATION|MB_OK); 00214 } 00215 00216 00217 00218 HIMAGELIST 00219 InitImageList(UINT StartResource, 00220 UINT EndResource, 00221 UINT Width, 00222 UINT Height, 00223 ULONG type) 00224 { 00225 HANDLE hImage; 00226 HIMAGELIST himl; 00227 UINT i; 00228 INT ret; 00229 00230 /* Create the toolbar icon image list */ 00231 himl = ImageList_Create(Width, 00232 Height, 00233 ILC_MASK | ILC_COLOR32, 00234 EndResource - StartResource, 00235 0); 00236 if (himl == NULL) 00237 return NULL; 00238 00239 ret = 0; 00240 for (i = StartResource; i <= EndResource && ret != -1; i++) 00241 { 00242 hImage = LoadImage(hInstance, 00243 MAKEINTRESOURCE(i), 00244 type, 00245 Width, 00246 Height, 00247 LR_LOADTRANSPARENT); 00248 if (hImage == NULL) 00249 { 00250 ImageList_Destroy(himl); 00251 himl = NULL; 00252 break; 00253 } 00254 00255 if (type == IMAGE_BITMAP) 00256 { 00257 ret = ImageList_AddMasked(himl, 00258 hImage, 00259 RGB(255, 0, 128)); 00260 } 00261 else if (type == IMAGE_ICON) 00262 { 00263 ret = ImageList_AddIcon(himl, 00264 hImage); 00265 } 00266 00267 DeleteObject(hImage); 00268 } 00269 00270 if (ret == -1) 00271 { 00272 ImageList_Destroy(himl); 00273 himl = NULL; 00274 } 00275 00276 return himl; 00277 } Generated on Sat May 26 2012 04:15:46 for ReactOS by
1.7.6.1
|