SystemParametersInfoA( SPI_SETNONCLIENTMETRICS, ...) fix.

Rein Klazes wijn at wanadoo.nl
Sun Nov 6 13:38:03 CST 2005


Hi,

Changelog:
dlls/user		: sysparams.c
Make SystemParametersInfoA( SPI_SETNONCLIENTMETRICS, ...) work by adding
the needed non client metrics A->W conversions.

Rein.
-------------- next part --------------
--- wine/dlls/user/sysparams.c	2005-09-20 10:46:58.000000000 +0200
+++ mywine/dlls/user/sysparams.c	2005-11-05 19:33:27.000000000 +0100
@@ -403,6 +403,25 @@ static void SYSPARAMS_LogFont32WTo32A( c
     font32A->lfFaceName[LF_FACESIZE-1] = 0;
 }
 
+static void SYSPARAMS_LogFont32ATo32W( const LOGFONTA* font32A, LPLOGFONTW font32W )
+{
+    font32W->lfHeight = font32A->lfHeight;
+    font32W->lfWidth = font32A->lfWidth;
+    font32W->lfEscapement = font32A->lfEscapement;
+    font32W->lfOrientation = font32A->lfOrientation;
+    font32W->lfWeight = font32A->lfWeight;
+    font32W->lfItalic = font32A->lfItalic;
+    font32W->lfUnderline = font32A->lfUnderline;
+    font32W->lfStrikeOut = font32A->lfStrikeOut;
+    font32W->lfCharSet = font32A->lfCharSet;
+    font32W->lfOutPrecision = font32A->lfOutPrecision;
+    font32W->lfClipPrecision = font32A->lfClipPrecision;
+    font32W->lfQuality = font32A->lfQuality;
+    font32W->lfPitchAndFamily = font32A->lfPitchAndFamily;
+    MultiByteToWideChar( CP_ACP, 0, font32A->lfFaceName, -1, font32W->lfFaceName, LF_FACESIZE );
+    font32W->lfFaceName[LF_FACESIZE-1] = 0;
+}
+
 static void SYSPARAMS_NonClientMetrics32ATo16( const NONCLIENTMETRICSA* lpnm32, LPNONCLIENTMETRICS16 lpnm16 )
 {
     lpnm16->iBorderWidth	= lpnm32->iBorderWidth;
@@ -439,6 +458,24 @@ static void SYSPARAMS_NonClientMetrics32
     SYSPARAMS_LogFont32WTo32A( &lpnm32W->lfMessageFont,		&lpnm32A->lfMessageFont );
 }
 
+static void SYSPARAMS_NonClientMetrics32ATo32W( const NONCLIENTMETRICSA* lpnm32A, LPNONCLIENTMETRICSW lpnm32W )
+{
+    lpnm32W->iBorderWidth	= lpnm32A->iBorderWidth;
+    lpnm32W->iScrollWidth	= lpnm32A->iScrollWidth;
+    lpnm32W->iScrollHeight	= lpnm32A->iScrollHeight;
+    lpnm32W->iCaptionWidth	= lpnm32A->iCaptionWidth;
+    lpnm32W->iCaptionHeight	= lpnm32A->iCaptionHeight;
+    SYSPARAMS_LogFont32ATo32W(  &lpnm32A->lfCaptionFont,	&lpnm32W->lfCaptionFont );
+    lpnm32W->iSmCaptionWidth	= lpnm32A->iSmCaptionWidth;
+    lpnm32W->iSmCaptionHeight	= lpnm32A->iSmCaptionHeight;
+    SYSPARAMS_LogFont32ATo32W( &lpnm32A->lfSmCaptionFont,	&lpnm32W->lfSmCaptionFont );
+    lpnm32W->iMenuWidth		= lpnm32A->iMenuWidth;
+    lpnm32W->iMenuHeight	= lpnm32A->iMenuHeight;
+    SYSPARAMS_LogFont32ATo32W( &lpnm32A->lfMenuFont,		&lpnm32W->lfMenuFont );
+    SYSPARAMS_LogFont32ATo32W( &lpnm32A->lfStatusFont,		&lpnm32W->lfStatusFont );
+    SYSPARAMS_LogFont32ATo32W( &lpnm32A->lfMessageFont,		&lpnm32W->lfMessageFont );
+}
+
 
 /***********************************************************************
  *           get_volatile_regkey
@@ -2143,6 +2180,21 @@ BOOL WINAPI SystemParametersInfoA( UINT 
 	break;
     }
 
+    case SPI_SETNONCLIENTMETRICS: 		/*     42  WINVER >= 0x400 */
+    {
+        NONCLIENTMETRICSW tmp;
+        LPNONCLIENTMETRICSA lpnmA = (LPNONCLIENTMETRICSA)pvParam;
+        if (lpnmA && lpnmA->cbSize == sizeof(NONCLIENTMETRICSA))
+        {
+            tmp.cbSize = sizeof(NONCLIENTMETRICSW);
+            SYSPARAMS_NonClientMetrics32ATo32W( lpnmA, &tmp );
+            ret = SystemParametersInfoW( uiAction, uiParam, &tmp, fuWinIni );
+        }
+        else
+            ret = FALSE;
+        break;
+    }
+
     case SPI_GETICONMETRICS:			/*     45  WINVER >= 0x400 */
     {
 	ICONMETRICSW tmp;


More information about the wine-patches mailing list