Angel, adjunto las funciones que tengo hechas
//----------------------------------------------------------------------------//
HB_FUNC ( NONCLIENT )
{
聽 聽NONCLIENTMETRICS mi;
聽 聽memset( ( char * ) &mi, 0, sizeof( NONCLIENTMETRICS ) );
聽 聽mi.cbSize = sizeof( NONCLIENTMETRICS );
聽 聽SystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &mi, 0);
#if (WINVER >= 0x0600)
聽 聽hb_reta(10);
#else
聽 聽hb_reta(9);
#endif
聽 聽hb_storvni(mi.iBorderWidth, -1, 1); 聽 聽 聽 聽 // 5
聽 聽hb_storvni(mi.iScrollWidth, -1, 2); 聽 聽 聽 聽 //17
聽 聽hb_storvni(mi.iScrollHeight,-1, 3); 聽 聽 聽 聽 //17
聽 聽hb_storvni(mi.iCaptionWidth, -1, 4); 聽 聽 聽 聽//36
聽 聽hb_storvni(mi.iCaptionHeight, -1, 5); 聽 聽 聽 //22
聽 聽hb_storvni(mi.iSmCaptionWidth, -1, 6); 聽 聽 聽//22
聽 聽hb_storvni(mi.iSmCaptionHeight, -1, 7); 聽 聽 //22
聽 聽hb_storvni(mi.iMenuWidth, -1, 8); 聽 聽 聽 聽 聽 //19
聽 聽hb_storvni(mi.iMenuHeight, -1, 9); 聽 聽 聽 聽 聽//19
#if (WINVER >= 0x0600)
聽 聽hb_storvni(mi.iPaddedBorderWidth, -1, 10); 聽// 0
#endif
}
//----------------------------------------------------------------------------//
HB_FUNC ( GETNONCLIENT ) 聽 聽// nPos
{
聽 聽INT nPos = hb_parni( 1 );
聽 聽INT nVal;
聽 聽NONCLIENTMETRICS mi;
聽 聽memset( ( char * ) &mi, 0, sizeof( NONCLIENTMETRICS ) );
聽 聽mi.cbSize = sizeof( NONCLIENTMETRICS );
聽 聽SystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &mi, 0);
聽 聽switch( nPos )
聽 聽{
聽 聽 聽 case 聽1:
聽 聽 聽 聽 聽 聽nVal = mi.iBorderWidth;
聽 聽 聽 聽 聽 聽break;
聽 聽 聽 case 聽2:
聽 聽 聽 聽 聽 聽nVal = mi.iScrollWidth;
聽 聽 聽 聽 聽 聽break;
聽 聽 聽 case 聽3:
聽 聽 聽 聽 聽 聽nVal = mi.iScrollHeight;
聽 聽 聽 聽 聽 聽break;
聽 聽 聽 case 聽4:
聽 聽 聽 聽 聽 聽nVal = 聽mi.iCaptionWidth;
聽 聽 聽 聽 聽 聽break;
聽 聽 聽 case 聽5:
聽 聽 聽 聽 聽 聽nVal = mi.iCaptionHeight;
聽 聽 聽 聽 聽 聽break;
聽 聽 聽 case 聽6:
聽 聽 聽 聽 聽 聽nVal = mi.iSmCaptionWidth;
聽 聽 聽 聽 聽 聽break;
聽 聽 聽 case 聽7:
聽 聽 聽 聽 聽 聽nVal = mi.iSmCaptionHeight;
聽 聽 聽 聽 聽 聽break;
聽 聽 聽 case 聽8:
聽 聽 聽 聽 聽 聽nVal = mi.iMenuWidth;
聽 聽 聽 聽 聽 聽break;
聽 聽 聽 case 聽9:
聽 聽 聽 聽 聽 聽nVal = mi.iMenuHeight;
聽 聽 聽 聽 聽 聽break;
聽 聽}
聽 聽hb_retni( nVal );
}
//----------------------------------------------------------------------------//
HB_FUNC ( SETNONCLIENT ) 聽 聽// nPos , uVal, ActWinIni
{
聽 聽INT nPos 聽 聽 = hb_parni( 1 );
聽 聽INT nVal 聽 聽 = hb_parni( 2 );
聽 聽BOOL bActIni = hb_parl( 3 );
聽 聽NONCLIENTMETRICS mi;
聽 聽memset( ( char * ) &mi, 0, sizeof( NONCLIENTMETRICS ) );
聽 聽mi.cbSize = sizeof( NONCLIENTMETRICS );
聽 聽SystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &mi, 0);
聽 聽switch( nPos )
聽 聽{
聽 聽 聽 case 聽0: 聽 // Actualizar todo
聽 聽 聽 聽 聽 聽//mi.iBorderWidth 聽 聽 = nVal;
聽 聽 聽 聽 聽 聽mi.iScrollWidth 聽 聽 = nVal+12;
聽 聽 聽 聽 聽 聽mi.iScrollHeight 聽 聽= nVal+12;
聽 聽 聽 聽 聽 聽mi.iCaptionWidth 聽 聽= nVal+21;
聽 聽 聽 聽 聽 聽mi.iCaptionHeight 聽 = nVal+17;
聽 聽 聽 聽 聽 聽mi.iSmCaptionWidth 聽= nVal+17;
聽 聽 聽 聽 聽 聽mi.iSmCaptionHeight = nVal+17;
聽 聽 聽 聽 聽 聽mi.iMenuWidth 聽 聽 聽 = nVal+12;
聽 聽 聽 聽 聽 聽mi.iMenuHeight 聽 聽 聽= nVal+12;
聽 聽 聽 聽 聽 聽break;
聽 聽 聽 case 聽1:
聽 聽 聽 聽 聽 聽mi.iBorderWidth = nVal;
聽 聽 聽 聽 聽 聽break;
聽 聽 聽 case 聽2:
聽 聽 聽 聽 聽 聽mi.iScrollWidth = nVal;
聽 聽 聽 聽 聽 聽break;
聽 聽 聽 case 聽3:
聽 聽 聽 聽 聽 聽mi.iScrollHeight = nVal;
聽 聽 聽 聽 聽 聽break;
聽 聽 聽 case 聽4:
聽 聽 聽 聽 聽 聽mi.iCaptionWidth = nVal;
聽 聽 聽 聽 聽 聽break;
聽 聽 聽 case 聽5:
聽 聽 聽 聽 聽 聽mi.iCaptionHeight = nVal;
聽 聽 聽 聽 聽 聽break;
聽 聽 聽 case 聽6:
聽 聽 聽 聽 聽 聽mi.iSmCaptionWidth = nVal;
聽 聽 聽 聽 聽 聽break;
聽 聽 聽 case 聽7:
聽 聽 聽 聽 聽 聽mi.iSmCaptionHeight = nVal;
聽 聽 聽 聽 聽 聽break;
聽 聽 聽 case 聽8:
聽 聽 聽 聽 聽 聽mi.iMenuWidth = nVal;
聽 聽 聽 聽 聽 聽break;
聽 聽 聽 case 聽9:
聽 聽 聽 聽 聽 聽mi.iMenuHeight = nVal;
聽 聽 聽 聽 聽 聽break;
聽 聽}
聽 聽if ( bActIni )
聽 聽 聽SystemParametersInfo( SPI_SETNONCLIENTMETRICS, sizeof( mi ), &mi, SPIF_SENDCHANGE); 聽// Update Win.ini
聽 聽else
聽 聽 聽SystemParametersInfo( SPI_SETNONCLIENTMETRICS, sizeof( mi ), &mi, 0 ); // NO Update Win.ini
}
//----------------------------------------------------------------------------//
Como hay en la struct varias LOGFONT, la function puede ser generica y hacerla con un switch