- Add a bit of a hack to paint over the NULL text values in the caption bar. At least...
authorGed Murphy <gedmurphy@reactos.org>
Fri, 5 Jan 2007 17:51:05 +0000 (17:51 +0000)
committerGed Murphy <gedmurphy@reactos.org>
Fri, 5 Jan 2007 17:51:05 +0000 (17:51 +0000)
- load resource strings onto heap to avoid overfows from translations

svn path=/trunk/; revision=25309

19 files changed:
reactos/dll/cpl/desk/Fr.rc
reactos/dll/cpl/desk/It.rc
reactos/dll/cpl/desk/Ja.rc
reactos/dll/cpl/desk/Ru.rc
reactos/dll/cpl/desk/Uk.rc
reactos/dll/cpl/desk/cz.rc
reactos/dll/cpl/desk/de.rc
reactos/dll/cpl/desk/desk.h
reactos/dll/cpl/desk/desk.rc
reactos/dll/cpl/desk/en.rc
reactos/dll/cpl/desk/es.rc
reactos/dll/cpl/desk/gr.rc
reactos/dll/cpl/desk/hu.rc
reactos/dll/cpl/desk/misc.c [new file with mode: 0644]
reactos/dll/cpl/desk/nl.rc
reactos/dll/cpl/desk/pl.rc
reactos/dll/cpl/desk/preview.c
reactos/dll/cpl/desk/resource.h
reactos/dll/cpl/desk/sv.rc

index 2219c5b..9423592 100644 (file)
@@ -131,4 +131,7 @@ BEGIN
     IDS_MESSBOX  "Message Box"
     IDS_MESSTEXT "Message Text"
     IDS_BUTTEXT  "OK"
+    IDS_NORMAL   "Normal"
+    IDS_DISABLED "Disabled"
+    IDS_SELECTED "Selected"
 END
index 07a7598..1d7e37f 100644 (file)
@@ -125,4 +125,7 @@ BEGIN
     IDS_MESSBOX  "Message Box"
     IDS_MESSTEXT "Message Text"
     IDS_BUTTEXT  "OK"
+    IDS_NORMAL   "Normal"
+    IDS_DISABLED "Disabled"
+    IDS_SELECTED "Selected"
 END
index 50900eb..df2e329 100644 (file)
@@ -129,4 +129,7 @@ BEGIN
     IDS_MESSBOX  "Message Box"
     IDS_MESSTEXT "Message Text"
     IDS_BUTTEXT  "OK"
+    IDS_NORMAL   "Normal"
+    IDS_DISABLED "Disabled"
+    IDS_SELECTED "Selected"
 END
index c00fcef..a4d0931 100644 (file)
@@ -151,4 +151,7 @@ BEGIN
     IDS_MESSBOX  "Message Box"
     IDS_MESSTEXT "Message Text"
     IDS_BUTTEXT  "OK"
+    IDS_NORMAL   "Normal"
+    IDS_DISABLED "Disabled"
+    IDS_SELECTED "Selected"
 END
index d5e568f..8c812e2 100644 (file)
@@ -133,4 +133,7 @@ BEGIN
     IDS_MESSBOX  "Message Box"
     IDS_MESSTEXT "Message Text"
     IDS_BUTTEXT  "OK"
+    IDS_NORMAL   "Normal"
+    IDS_DISABLED "Disabled"
+    IDS_SELECTED "Selected"
 END
index c05e5cf..0c4632b 100644 (file)
@@ -123,4 +123,7 @@ BEGIN
     IDS_MESSBOX  "Message Box"
     IDS_MESSTEXT "Message Text"
     IDS_BUTTEXT  "OK"
+    IDS_NORMAL   "Normal"
+    IDS_DISABLED "Disabled"
+    IDS_SELECTED "Selected"
 END
index ded2505..c3dc2cc 100644 (file)
@@ -127,4 +127,7 @@ BEGIN
     IDS_MESSBOX  "Message Box"
     IDS_MESSTEXT "Message Text"
     IDS_BUTTEXT  "OK"
+    IDS_NORMAL   "Normal"
+    IDS_DISABLED "Disabled"
+    IDS_SELECTED "Selected"
 END
index 1f275da..3c19499 100644 (file)
@@ -33,6 +33,10 @@ extern HINSTANCE hApplet;
 PDIBITMAP DibLoadImage(LPTSTR lpFilename);
 VOID DibFreeImage(PDIBITMAP lpBitmap);
 
+INT AllocAndLoadString(LPTSTR *lpTarget,
+                       HINSTANCE hInst,
+                       UINT uID);
+
 DWORD DbgPrint(PCH Format,...);
 
 #endif /* __CPL_DESK_H__ */
index 393a7fb..70f7c3e 100644 (file)
@@ -8,7 +8,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
 #define REACTOS_STR_INTERNAL_NAME       "desk\0"
 #define REACTOS_STR_ORIGINAL_FILENAME   "desk.cpl\0"
 
-#include <reactos/version.rc>
+//#include <reactos/version.rc>
 
 IDC_DESK_ICON ICON "resources/applet.ico"
 IDC_DESK_ICON2 ICON "resources/applet.ico"
index c532a16..48bc9c8 100644 (file)
@@ -125,4 +125,7 @@ BEGIN
     IDS_MESSBOX  "Message Box"
     IDS_MESSTEXT "Message Text"
     IDS_BUTTEXT  "OK"
+    IDS_NORMAL   "Normal"
+    IDS_DISABLED "Disabled"
+    IDS_SELECTED "Selected"
 END
index e375927..741c492 100644 (file)
@@ -130,4 +130,7 @@ BEGIN
     IDS_MESSBOX  "Message Box"
     IDS_MESSTEXT "Message Text"
     IDS_BUTTEXT  "OK"
+    IDS_NORMAL   "Normal"
+    IDS_DISABLED "Disabled"
+    IDS_SELECTED "Selected"
 END
index 174d913..c998196 100644 (file)
@@ -129,4 +129,7 @@ BEGIN
     IDS_MESSBOX  "Message Box"
     IDS_MESSTEXT "Message Text"
     IDS_BUTTEXT  "OK"
+    IDS_NORMAL   "Normal"
+    IDS_DISABLED "Disabled"
+    IDS_SELECTED "Selected"
 END
index 24b2d01..810dbd2 100644 (file)
@@ -117,4 +117,7 @@ BEGIN
     IDS_MESSBOX  "Message Box"
     IDS_MESSTEXT "Message Text"
     IDS_BUTTEXT  "OK"
+    IDS_NORMAL   "Normal"
+    IDS_DISABLED "Disabled"
+    IDS_SELECTED "Selected"
 END
diff --git a/reactos/dll/cpl/desk/misc.c b/reactos/dll/cpl/desk/misc.c
new file mode 100644 (file)
index 0000000..df35a38
--- /dev/null
@@ -0,0 +1,63 @@
+#include "desk.h"\r
+\r
+static INT\r
+LengthOfStrResource(IN HINSTANCE hInst,\r
+                    IN UINT uID)\r
+{\r
+    HRSRC hrSrc;\r
+    HGLOBAL hRes;\r
+    LPWSTR lpName, lpStr;\r
+\r
+    if (hInst == NULL)\r
+    {\r
+        return -1;\r
+    }\r
+\r
+    /* There are always blocks of 16 strings */\r
+    lpName = (LPWSTR)MAKEINTRESOURCE((uID >> 4) + 1);\r
+\r
+    /* Find the string table block */\r
+    if ((hrSrc = FindResourceW(hInst, lpName, (LPWSTR)RT_STRING)) &&\r
+        (hRes = LoadResource(hInst, hrSrc)) &&\r
+        (lpStr = LockResource(hRes)))\r
+    {\r
+        UINT x;\r
+\r
+        /* Find the string we're looking for */\r
+        uID &= 0xF; /* position in the block, same as % 16 */\r
+        for (x = 0; x < uID; x++)\r
+        {\r
+            lpStr += (*lpStr) + 1;\r
+        }\r
+\r
+        /* Found the string */\r
+        return (int)(*lpStr);\r
+    }\r
+    return -1;\r
+}\r
+\r
+INT\r
+AllocAndLoadString(OUT LPTSTR *lpTarget,\r
+                   IN HINSTANCE hInst,\r
+                   IN UINT uID)\r
+{\r
+    INT ln;\r
+\r
+    ln = LengthOfStrResource(hInst,\r
+                             uID);\r
+    if (ln++ > 0)\r
+    {\r
+        (*lpTarget) = (LPTSTR)LocalAlloc(LMEM_FIXED,\r
+                                         ln * sizeof(TCHAR));\r
+        if ((*lpTarget) != NULL)\r
+        {\r
+            INT Ret;\r
+            if (!(Ret = LoadString(hInst, uID, *lpTarget, ln)))\r
+            {\r
+                LocalFree((HLOCAL)(*lpTarget));\r
+            }\r
+            return Ret;\r
+        }\r
+    }\r
+    return 0;\r
+}\r
index ac71dec..10fff5a 100644 (file)
@@ -123,4 +123,7 @@ BEGIN
     IDS_MESSBOX  "Message Box"
     IDS_MESSTEXT "Message Text"
     IDS_BUTTEXT  "OK"
+    IDS_NORMAL   "Normal"
+    IDS_DISABLED "Disabled"
+    IDS_SELECTED "Selected"
 END
index fa996a4..5fbcc8a 100644 (file)
@@ -124,4 +124,7 @@ BEGIN
     IDS_MESSBOX  "Message Box"
     IDS_MESSTEXT "Message Text"
     IDS_BUTTEXT  "OK"
+    IDS_NORMAL   "Normal"
+    IDS_DISABLED "Disabled"
+    IDS_SELECTED "Selected"
 END
index 6eb290d..ae70cf3 100644 (file)
@@ -39,6 +39,16 @@ typedef struct _PREVIEW_DATA
 \r
     RECT rcDialogButton;\r
 \r
+    LPTSTR lpInAct;\r
+    LPTSTR lpAct;\r
+    LPTSTR lpWinTxt;\r
+    LPTSTR lpMessBox;\r
+    LPTSTR lpMessText;\r
+    LPTSTR lpButText;\r
+    LPTSTR lpMenNorm;\r
+    LPTSTR lpMenDis;\r
+    LPTSTR lpMenSel;\r
+\r
     LOGFONT CaptionFont;\r
     LOGFONT DialogFont;\r
     LOGFONT MenuFont;\r
@@ -46,6 +56,22 @@ typedef struct _PREVIEW_DATA
 } PREVIEW_DATA, *PPREVIEW_DATA;\r
 \r
 \r
+/* HACK: fill the caption bar squares due to NULL text */\r
+static VOID\r
+FillSquare(HDC hdc, PRECT rect)\r
+{\r
+    INT x, y, i;\r
+\r
+    x = rect->left + 2;\r
+    y = rect->top + 2;\r
+\r
+    for (i = 3; i < 12; i++)\r
+    {\r
+        BitBlt(hdc, x, y + i, 10, 1, hdc, x, y, SRCCOPY);\r
+    }\r
+}\r
+\r
+\r
 static VOID\r
 DrawCaptionButtons(HDC hdc, LPRECT lpRect, BOOL bMinMax)\r
 {\r
@@ -176,13 +202,6 @@ PreviewWndProc(HWND hwnd,
     HDC hdc;\r
     PAINTSTRUCT ps;\r
     RECT rc;\r
-    static NONCLIENTMETRICS NonClientMetrics;\r
-    static TCHAR szInAct[32];\r
-    static TCHAR szAct[32];\r
-    static TCHAR szWinTxt[32];\r
-    static TCHAR szMessBox[32];\r
-    static TCHAR szMessText[32];\r
-    static TCHAR szButText[4];\r
 \r
     pPreviewData = (PPREVIEW_DATA)GetWindowLongPtr(hwnd, GWLP_USERDATA);\r
 \r
@@ -190,6 +209,8 @@ PreviewWndProc(HWND hwnd,
     {\r
         case WM_CREATE:\r
         {\r
+            NONCLIENTMETRICS NonClientMetrics;\r
+\r
             pPreviewData = (PPREVIEW_DATA)HeapAlloc(GetProcessHeap(),\r
                                                     HEAP_ZERO_MEMORY,\r
                                                     sizeof(PREVIEW_DATA));\r
@@ -214,12 +235,15 @@ PreviewWndProc(HWND hwnd,
             pPreviewData->MenuFont = NonClientMetrics.lfMenuFont;\r
             pPreviewData->DialogFont = NonClientMetrics.lfMessageFont;\r
 \r
-            LoadString(hApplet, IDS_INACTWIN, szInAct, sizeof(szInAct));\r
-            LoadString(hApplet, IDS_ACTWIN, szAct, sizeof(szAct));\r
-            LoadString(hApplet, IDS_WINTEXT, szWinTxt, sizeof(szWinTxt));\r
-            LoadString(hApplet, IDS_MESSBOX, szMessBox, sizeof(szMessBox));\r
-            LoadString(hApplet, IDS_MESSTEXT, szMessText, sizeof(szMessText));\r
-            LoadString(hApplet, IDS_BUTTEXT, szButText, sizeof(szButText));\r
+            AllocAndLoadString(&pPreviewData->lpInAct, hApplet, IDS_INACTWIN);\r
+            AllocAndLoadString(&pPreviewData->lpAct, hApplet, IDS_ACTWIN);\r
+            AllocAndLoadString(&pPreviewData->lpWinTxt, hApplet, IDS_WINTEXT);\r
+            AllocAndLoadString(&pPreviewData->lpMessBox, hApplet, IDS_MESSBOX);\r
+            AllocAndLoadString(&pPreviewData->lpMessText, hApplet, IDS_MESSTEXT);\r
+            AllocAndLoadString(&pPreviewData->lpButText, hApplet, IDS_BUTTEXT);\r
+            AllocAndLoadString(&pPreviewData->lpMenNorm, hApplet, IDS_NORMAL);\r
+            AllocAndLoadString(&pPreviewData->lpMenDis, hApplet, IDS_DISABLED);\r
+            AllocAndLoadString(&pPreviewData->lpMenSel, hApplet, IDS_SELECTED);\r
 \r
             break;\r
         }\r
@@ -241,25 +265,26 @@ PreviewWndProc(HWND hwnd,
             DrawEdge(hdc, &pPreviewData->rcInactiveFrame, EDGE_RAISED, BF_RECT | BF_MIDDLE);\r
             DrawCaption(hwnd, hdc, &pPreviewData->rcInactiveCaption, DC_GRADIENT | DC_TEXT);\r
             DrawCaptionButtons(hdc, &pPreviewData->rcInactiveCaption, TRUE);\r
-            CopyMemory(&tmpRc, &pPreviewData->rcInactiveCaption, sizeof(RECT));\r
+            FillSquare(hdc, &pPreviewData->rcInactiveCaption);\r
+            CopyRect(&tmpRc, &pPreviewData->rcInactiveCaption);\r
             tmpRc.left += 4;\r
             tmpRc.top += 2;\r
             SelectObject(hdc, CreateFontIndirect(&pPreviewData->CaptionFont));\r
             SetTextColor(hdc, RGB(212,208,200));\r
-            DrawText(hdc, szInAct, lstrlen(szInAct), &tmpRc, DT_LEFT);\r
+            DrawText(hdc, pPreviewData->lpInAct, lstrlen(pPreviewData->lpInAct), &tmpRc, DT_LEFT);\r
             DeleteObject(SelectObject(hdc, GetStockObject(SYSTEM_FONT)));\r
 \r
-\r
             /* Active Window */\r
             DrawEdge(hdc, &pPreviewData->rcActiveFrame, EDGE_RAISED, BF_RECT | BF_MIDDLE);\r
             DrawCaption(hwnd, hdc, &pPreviewData->rcActiveCaption, DC_ACTIVE | DC_GRADIENT | DC_TEXT);\r
             DrawCaptionButtons(hdc, &pPreviewData->rcActiveCaption, TRUE);\r
-            CopyMemory(&tmpRc, &pPreviewData->rcActiveCaption, sizeof(RECT));\r
+            FillSquare(hdc, &pPreviewData->rcActiveCaption);\r
+            CopyRect(&tmpRc, &pPreviewData->rcActiveCaption);\r
             tmpRc.left += 4;\r
             tmpRc.top += 2;\r
             SetTextColor(hdc, RGB(255,255,255)); // FIXME: don't hardcode colors\r
             SelectObject(hdc, CreateFontIndirect(&pPreviewData->CaptionFont));\r
-            DrawText(hdc, szAct, lstrlen(szAct), &tmpRc, DT_LEFT);\r
+            DrawText(hdc, pPreviewData->lpAct, lstrlen(pPreviewData->lpAct), &tmpRc, DT_LEFT);\r
             DeleteObject(SelectObject(hdc, GetStockObject(SYSTEM_FONT)));\r
 \r
             /* FIXME: Draw the menu bar */\r
@@ -268,48 +293,47 @@ PreviewWndProc(HWND hwnd,
             FillRect(hdc, &rc, pPreviewData->hbrWindow);\r
 \r
             /* Draw the client text */\r
-            CopyMemory(&tmpRc, &pPreviewData->rcActiveClient, sizeof(RECT));\r
+            CopyRect(&tmpRc, &pPreviewData->rcActiveClient);\r
             tmpRc.left += 4;\r
             tmpRc.top += 2;\r
             SetTextColor(hdc, RGB(0,0,0));\r
             SelectObject(hdc, CreateFontIndirect(&pPreviewData->DialogFont));\r
-            DrawText(hdc, szWinTxt, lstrlen(szWinTxt), &tmpRc, DT_LEFT);\r
+            DrawText(hdc, pPreviewData->lpWinTxt, lstrlen(pPreviewData->lpWinTxt), &tmpRc, DT_LEFT);\r
             DeleteObject(SelectObject(hdc, GetStockObject(SYSTEM_FONT)));\r
 \r
             /* Draw the scroll bar */\r
             DrawScrollbar(hdc, &pPreviewData->rcActiveScroll);\r
 \r
-\r
             /* Dialog Window */\r
             DrawEdge(hdc, &pPreviewData->rcDialogFrame, EDGE_RAISED, BF_RECT | BF_MIDDLE);\r
             DrawCaption(hwnd, hdc, &pPreviewData->rcDialogCaption, DC_ACTIVE | DC_GRADIENT | DC_TEXT);\r
             DrawCaptionButtons(hdc, &pPreviewData->rcDialogCaption, FALSE);\r
-            CopyMemory(&tmpRc, &pPreviewData->rcDialogCaption, sizeof(RECT));\r
+            FillSquare(hdc, &pPreviewData->rcDialogCaption);\r
+            CopyRect(&tmpRc, &pPreviewData->rcDialogCaption);\r
             tmpRc.left += 4;\r
             tmpRc.top += 2;\r
             SetTextColor(hdc, RGB(255,255,255));\r
             SelectObject(hdc, CreateFontIndirect(&pPreviewData->CaptionFont));\r
-            DrawText(hdc, szMessBox, lstrlen(szMessBox), &tmpRc, DT_LEFT);\r
+            DrawText(hdc, pPreviewData->lpMessBox, lstrlen(pPreviewData->lpMessBox), &tmpRc, DT_LEFT);\r
             DeleteObject(SelectObject(hdc, GetStockObject(SYSTEM_FONT)));\r
 \r
             /* draw the dialog text */\r
-            CopyMemory(&tmpRc, &pPreviewData->rcDialogClient, sizeof(RECT));\r
+            CopyRect(&tmpRc, &pPreviewData->rcDialogClient);\r
             tmpRc.left += 4;\r
             tmpRc.top += 2;\r
             SetTextColor(hdc, RGB(0,0,0));\r
             SelectObject(hdc, CreateFontIndirect(&pPreviewData->DialogFont));\r
-            DrawText(hdc, szMessText, lstrlen(szMessText), &tmpRc, DT_LEFT);\r
+            DrawText(hdc, pPreviewData->lpMessText, lstrlen(pPreviewData->lpMessText), &tmpRc, DT_LEFT);\r
             DeleteObject(SelectObject(hdc, GetStockObject(SYSTEM_FONT)));\r
 \r
             /* Draw Button */\r
             DrawFrameControl(hdc, &pPreviewData->rcDialogButton, DFC_BUTTON, DFCS_BUTTONPUSH);\r
-            CopyMemory(&tmpRc, &pPreviewData->rcDialogButton, sizeof(RECT));\r
+            CopyRect(&tmpRc, &pPreviewData->rcDialogButton);\r
             tmpRc.top += 6;\r
             SelectObject(hdc, CreateFontIndirect(&pPreviewData->DialogFont));\r
-            DrawText(hdc, szButText, lstrlen(szButText), &tmpRc, DT_CENTER);\r
+            DrawText(hdc, pPreviewData->lpButText, lstrlen(pPreviewData->lpButText), &tmpRc, DT_CENTER);\r
             DeleteObject(SelectObject(hdc, GetStockObject(SYSTEM_FONT)));\r
 \r
-\r
             EndPaint(hwnd, &ps);\r
             break;\r
         }\r
@@ -318,6 +342,16 @@ PreviewWndProc(HWND hwnd,
             DeleteObject(pPreviewData->hbrDesktop);\r
             DeleteObject(pPreviewData->hbrWindow);\r
 \r
+            LocalFree((HLOCAL)pPreviewData->lpInAct);\r
+            LocalFree((HLOCAL)pPreviewData->lpAct);\r
+            LocalFree((HLOCAL)pPreviewData->lpWinTxt);\r
+            LocalFree((HLOCAL)pPreviewData->lpMessBox);\r
+            LocalFree((HLOCAL)pPreviewData->lpMessText);\r
+            LocalFree((HLOCAL)pPreviewData->lpButText);\r
+            LocalFree((HLOCAL)pPreviewData->lpMenNorm);\r
+            LocalFree((HLOCAL)pPreviewData->lpMenDis);\r
+            LocalFree((HLOCAL)pPreviewData->lpMenSel);\r
+\r
             HeapFree(GetProcessHeap(), 0, pPreviewData);\r
             break;\r
 \r
index bdc9f0c..5277aec 100644 (file)
@@ -88,6 +88,9 @@
 #define IDS_MESSBOX     1513
 #define IDS_MESSTEXT    1514
 #define IDS_BUTTEXT     1515
+#define IDS_NORMAL      1516
+#define IDS_DISABLED    1517
+#define IDS_SELECTED    1518
 
 
 #endif /* __CPL_DESK_RESOURCE_H__ */
index 3a473d4..2f5447e 100644 (file)
@@ -126,4 +126,7 @@ BEGIN
     IDS_MESSBOX  "Message Box"
     IDS_MESSTEXT "Message Text"
     IDS_BUTTEXT  "OK"
+    IDS_NORMAL   "Normal"
+    IDS_DISABLED "Disabled"
+    IDS_SELECTED "Selected"
 END