Seite 1 von 1

SystemParametersInfo und NONCLIENTMETRIC

Verfasst: 29.07.2014 18:41
von iostream
Hallo liebe Foristen,

ich lese aktuell wie folgt die Standard-UI-Schrift aus:

Code: Alles auswählen

Define.NONCLIENTMETRICS NCM
Define MessageFont

NCM\cbSize = SizeOf(NONCLIENTMETRICS)
SystemParametersInfo_(#SPI_GETNONCLIENTMETRICS, SizeOf(NONCLIENTMETRICS), @NCM, 0)
MessageFont = CreateFontIndirect_(@NCM\lfMessageFont)
If MessageFont
	SetGadgetFont(#PB_Default, MessageFont)
EndIf
Nun habe ich zufällig mitbekommen, dass ab Vista ein zusätzlicher Integer in der Struktur
dazugekommen ist (http://msdn.microsoft.com/en-us/library ... p/ff729175).
D.h. unter XP übergebe ich SystemParametersInfo eine falsche größe (vier Bytes bei x86 zu viel),
da mein Programm ja unter 8.1 kompiliert wurde...oder?

Ich bin nun irritiert, da in PB die Struktur diesen zusätzlichen Integer nicht besitzt...wie programmiere
ich nun "richtig", damit mein Auslesen der Schriftart unter XP genau so erfolgreich ist wie unter 8.1?

Re: SystemParametersInfo und NONCLIENTMETRIC

Verfasst: 29.07.2014 19:34
von edel
z.B. so:

Code: Alles auswählen

Structure NONCLIENTMETRICS_VISTA Extends NONCLIENTMETRICS
	iPaddedBorderWidth.l
EndStructure

Procedure isVistaOrGreater()	
	Protected OSVerInfo.OSVERSIONINFOEX

	OSVerInfo\dwOSVersionInfoSize = SizeOf(OSVERSIONINFOEX)

	GetVersionEx_(@OSVerInfo)	
	
	ProcedureReturn Bool(OSVerInfo\dwMajorVersion>=6)
EndProcedure

Define.NONCLIENTMETRICS_VISTA NCM
Define MessageFont

If isVistaOrGreater()	
	NCM\cbSize = SizeOf(NONCLIENTMETRICS_VISTA)
Else	
	NCM\cbSize = SizeOf(NONCLIENTMETRICS)
EndIf

Debug SystemParametersInfo_(#SPI_GETNONCLIENTMETRICS, NCM\cbSize, @NCM, 0)
MessageFont = CreateFontIndirect_(@NCM\lfMessageFont)
If MessageFont
	SetGadgetFont(#PB_Default, MessageFont)	
EndIf

Re: SystemParametersInfo und NONCLIENTMETRIC

Verfasst: 29.07.2014 19:48
von iostream
Sowas hatte ich auch schon im Kopf. Aber macht es denn keine
Probleme, wenn ich dann unter XP SystemParametersInfo einen
Pointer auf eine Struktur übergebe, die mehr Elemente hat als
eigentlich vorgesehen (ich meine, XP kennt ja iPaddedBorderWidth
gar nicht)?

Re: SystemParametersInfo und NONCLIENTMETRIC

Verfasst: 29.07.2014 20:14
von edel
Nein, deswegen gibst du ja die Groesse der Struktur mit an.

Re: SystemParametersInfo und NONCLIENTMETRIC

Verfasst: 29.07.2014 21:46
von iostream
edel hat geschrieben:Nein, deswegen gibst du ja die Groesse der Struktur mit an.
Verstehe...d.h. selbst wenn da noch zehn Floats kommen würden wäre es egal,
da ich die korrekte Größe angebe?

Auf jeden Fall vielen Dank edel!

Re: SystemParametersInfo und NONCLIENTMETRIC

Verfasst: 29.07.2014 21:50
von NicTheQuick
iostream hat geschrieben:
edel hat geschrieben:Nein, deswegen gibst du ja die Groesse der Struktur mit an.
Verstehe...d.h. selbst wenn da noch zehn Floats kommen würden wäre es egal,
da ich die korrekte Größe angebe?
Korrekt.