ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

misc.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.