Ignore:
Timestamp:
Nov 5, 1999, 1:54:11 PM (26 years ago)
Author:
sandervl
Message:

InsertMenu & msg translation fixes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/user32/loadres.cpp

    r1606 r1612  
    1 /* $Id: loadres.cpp,v 1.13 1999-11-05 09:16:21 sandervl Exp $ */
     1/* $Id: loadres.cpp,v 1.14 1999-11-05 12:54:10 sandervl Exp $ */
    22
    33/*
     
    66 * Copyright 1998 Sander van Leeuwen
    77 *
    8  * Parts based on Wine code (objects\bitmap.c):
     8 * Parts based on Wine code (objects\bitmap.c, loader\resource.c):
    99 *
    1010 * Copyright 1993 Alexandre Julliard
    1111 *           1998 Huw D M Davies
     12 *           1993 Robert J. Amstadt
    1213 *
    1314 * Project Odin Software License can be found in LICENSE.TXT
     
    2526//******************************************************************************
    2627//******************************************************************************
    27 int WIN32API LoadStringA(HINSTANCE hinst, UINT wID, LPSTR lpBuffer, int cchBuffer)
     28INT WIN32API LoadStringA(HINSTANCE instance, UINT resource_id,
     29                         LPSTR buffer, INT buflen )
     30{
     31  INT retval;
     32  LPWSTR buffer2 = NULL;
     33
     34    if (buffer && buflen)
     35        buffer2 = (LPWSTR)HeapAlloc( GetProcessHeap(), 0, buflen * 2 );
     36
     37    retval = LoadStringW(instance,resource_id,buffer2,buflen);
     38
     39    if (buffer2)
     40    {
     41        if (retval) {
     42            lstrcpynWtoA( buffer, buffer2, buflen );
     43            retval = lstrlenA( buffer );
     44        }
     45        else
     46            *buffer = 0;
     47        HeapFree( GetProcessHeap(), 0, buffer2 );
     48    }
     49    return retval;
     50}
     51//******************************************************************************
     52//******************************************************************************
     53int WIN32API LoadStringW(HINSTANCE hinst, UINT wID, LPWSTR lpBuffer, int cchBuffer)
    2854{
    2955 Win32Resource *winres;
    30  LPWSTR  resstring;
    31  int     resstrlen = 0;
    32 
    33     winres = (Win32Resource *)FindResourceA(hinst, (LPSTR)wID, RT_STRINGA);
    34     if(winres == NULL) {
    35         dprintf(("LoadStringA NOT FOUND from %X, id %d buffersize %d\n", hinst, wID, cchBuffer));
    36 //TODO: BAD HACK!
    37         if(cchBuffer > 3)
    38         {
    39           strcpy(lpBuffer, "XXX");
    40           return 3;
    41         }
    42 //TODO: BAD HACK!
    43         *lpBuffer = 0;
    44         return 0;
    45     }
    46 
    47     resstring = (LPWSTR)winres->lockResource();
    48     if(resstring) {
    49         resstrlen = min(lstrlenW(resstring)+1, cchBuffer);
    50         lstrcpynWtoA(lpBuffer, resstring, resstrlen);
    51         lpBuffer[resstrlen-1] = 0;
    52         resstrlen--;
    53         dprintf(("LoadStringA (%d) %s", resstrlen, lpBuffer));
    54     }
    55     delete winres;
    56 
    57     dprintf(("LoadStringA from %X, id %d buffersize %d\n", hinst, wID, cchBuffer));
    58     return(resstrlen);
    59 }
    60 //******************************************************************************
    61 //******************************************************************************
    62 int WIN32API LoadStringW(HINSTANCE hinst, UINT wID, LPWSTR lpBuffer, int cchBuffer)
    63 {
    64  Win32Resource *winres;
    65  LPWSTR resstring;
    66  int    resstrlen = 0;
    67 
    68     winres = (Win32Resource *)FindResourceW(hinst, (LPWSTR)wID, RT_STRINGW);
     56 WCHAR *p;
     57 int string_num;
     58 int i = 0;
     59
     60    /* Use bits 4 - 19 (incremented by 1) as resourceid, mask out
     61     * 20 - 31. */
     62    winres = (Win32Resource *)FindResourceW(hinst, (LPWSTR)(((wID>>4)&0xffff)+1), RT_STRINGW);
    6963    if(winres == NULL) {
    7064        dprintf(("LoadStringW NOT FOUND from %X, id %d buffersize %d\n", hinst, wID, cchBuffer));
     
    7367    }
    7468
    75     resstring = (LPWSTR)winres->lockResource();
    76     if(resstring) {
    77         resstrlen = min(lstrlenW(resstring)+1, cchBuffer);
    78         lstrcpynW(lpBuffer, resstring, resstrlen);
    79         lpBuffer[resstrlen-1] = 0;
    80         resstrlen--;
     69    p = (LPWSTR)winres->lockResource();
     70    if(p) {
     71        string_num = wID & 0x000f;
     72        for (i = 0; i < string_num; i++)
     73                p += *p + 1;
     74     
     75        if (lpBuffer == NULL) return *p;
     76        i = min(cchBuffer - 1, *p);
     77        if (i > 0) {
     78                memcpy(lpBuffer, p + 1, i * sizeof (WCHAR));
     79                lpBuffer[i] = (WCHAR) 0;
     80        }
     81        else {
     82                if (cchBuffer > 1) {
     83                        lpBuffer[0] = (WCHAR) 0;
     84                        return 0;
     85                }
     86        }
    8187    }
    8288    delete winres;
    8389
    8490    dprintf(("LoadStringW from %X, id %d buffersize %d\n", hinst, wID, cchBuffer));
    85     return(resstrlen);
     91    return(i);
    8692}
    8793//******************************************************************************
Note: See TracChangeset for help on using the changeset viewer.