ich habe eine Frage zur API-Funktion SystemParametersInfo. Ich dachte, daß ich die Basics bezüglich des Aufrufs von API-Funktionen begriffen hätte, aber PureBasic hat mich unsaft auf den Boden der Realität zurückgeholt. Anlaß für meinen Optimismus war folgender erfolgreicher Aufruf, der die Höhe des Desktops abzüglich der Taskleiste ('client' oder 'working area') zurückgibt:
Code: Alles auswählen
Define.rect DoTl ; Desktop ohne Taskleiste (RECT-Struktur)
Define.i ESPI, HDoTl ; Ergebnis SystemParametersInfo, Höhe Desktop ohne Taskleiste
ESPI=SystemParametersInfo_(#SPI_GETWORKAREA, 0, @DoTl, 0)
HDoTl=DoTl\Bottom
Debug ESPI
Debug HDoTl
Nun wollte ich von derselben Funktion (SystemParametersInfo gibt ja über so ziemlich alles mögliche Auskunft) den Font, den Windows in MessageBoxen verwendet, zurückgeben lassen. Diesen kann man aus der Struktur NONCLIENTMETRICS erfahren, die die uiAction (erster Parameter) #SPI_GETNONCLIENTMETRICS zurückgibt. Die zurückgegebene NONCLIENTMETRICS-Struktur enthält ihrerseits mehrere Strukturen vom Typ LOGFONT, von denen die letzte (lfMessageFont) die gewünschte Information enthält: ein statisches char-Array mit 32 Elementen (lfFaceName.c[32]).
Laut Win32.hlp muß ferner im zweiten Parameter uiParam die Größe der Struktur abgelegt werden:
Ich habe keine Ahnung, was mit "cbSize member of this structure" gemeint. Auf Grundlage der übrigen Informationen habe ich folgenden Kode zusammengebastelt:SPI_GETNONCLIENTMETRICS retrieves the metrics associated with the nonclient area of nonminimized windows. The pvParam parameter must point to a NONCLIENTMETRICS structure that receives the information. Set the cbSize member of this structure and the uiParam parameter to sizeof(NONCLIENTMETRICS).
Code: Alles auswählen
Define.i ESPI, Ix
Define.nonclientmetrics Syzs ; Systemzeichensätze
Define.logfont MBF ; MessageBox-Font
Define.s MBFN ; MessageBox-Font-Name
ESPI=SystemParametersInfo_(#SPI_GETNONCLIENTMETRICS, SizeOf(NONCLIENTMETRICS), @SyZs, 0)
MBF=Syzs\lfMessageFont
For Ix=0 To 31
MBFN=MBFN+MBF\lfFaceName[Ix]
Next
Hat von Euch jemand eine Idee, wo der Fehler steckt?
Vielen Dank