浏览代码

Fixed not getting correct system fonts.

woollybah 6 年之前
父节点
当前提交
0a3b3181f9
共有 3 个文件被更改,包括 13 次插入2 次删除
  1. 4 0
      win32maxguiex.mod/common.bmx
  2. 8 1
      win32maxguiex.mod/glue.cpp
  3. 1 1
      win32maxguiex.mod/win32maxguiex.bmx

+ 4 - 0
win32maxguiex.mod/common.bmx

@@ -593,6 +593,7 @@ Extern
 	Function bmx_win32_NONCLIENTMETRICSW_new:Byte Ptr()
 	Function bmx_win32_NONCLIENTMETRICSW_new:Byte Ptr()
 	Function bmx_win32_NONCLIENTMETRICSW_free(handle:Byte Ptr)
 	Function bmx_win32_NONCLIENTMETRICSW_free(handle:Byte Ptr)
 	Function bmx_win32_NONCLIENTMETRICSW_lfMessageFont:Byte Ptr(handle:Byte Ptr)
 	Function bmx_win32_NONCLIENTMETRICSW_lfMessageFont:Byte Ptr(handle:Byte Ptr)
+	Function bmx_win32_NONCLIENTMETRICSW_size:UInt()
 End Extern
 End Extern
 Type NONCLIENTMETRICSW
 Type NONCLIENTMETRICSW
 	Field metricsPtr:Byte Ptr
 	Field metricsPtr:Byte Ptr
@@ -616,6 +617,9 @@ Type NONCLIENTMETRICSW
 		Return LOGFONTW._create(bmx_win32_NONCLIENTMETRICSW_lfMessageFont(metricsPtr))
 		Return LOGFONTW._create(bmx_win32_NONCLIENTMETRICSW_lfMessageFont(metricsPtr))
 	End Method
 	End Method
 	
 	
+	Method Size:UInt()
+		Return bmx_win32_NONCLIENTMETRICSW_size()
+	End Method
 End Type
 End Type
 
 
 Extern
 Extern

+ 8 - 1
win32maxguiex.mod/glue.cpp

@@ -33,6 +33,7 @@ extern "C" {
 	NONCLIENTMETRICSW * bmx_win32_NONCLIENTMETRICSW_new();
 	NONCLIENTMETRICSW * bmx_win32_NONCLIENTMETRICSW_new();
 	void bmx_win32_NONCLIENTMETRICSW_free(NONCLIENTMETRICSW * metrics);
 	void bmx_win32_NONCLIENTMETRICSW_free(NONCLIENTMETRICSW * metrics);
 	LOGFONTW * bmx_win32_NONCLIENTMETRICSW_lfMessageFont(NONCLIENTMETRICSW * metrics);
 	LOGFONTW * bmx_win32_NONCLIENTMETRICSW_lfMessageFont(NONCLIENTMETRICSW * metrics);
+	UINT bmx_win32_NONCLIENTMETRICSW_size();
 
 
 	int bmx_win32_MOUSEHOOKSTRUCT_x(MOUSEHOOKSTRUCT * hook);
 	int bmx_win32_MOUSEHOOKSTRUCT_x(MOUSEHOOKSTRUCT * hook);
 	int bmx_win32_MOUSEHOOKSTRUCT_y(MOUSEHOOKSTRUCT * hook);
 	int bmx_win32_MOUSEHOOKSTRUCT_y(MOUSEHOOKSTRUCT * hook);
@@ -148,7 +149,9 @@ ULONG_PTR bmx_win32_DRAWITEMSTRUCT_itemData(DRAWITEMSTRUCT * item) {
 // ********************************************************
 // ********************************************************
 
 
 NONCLIENTMETRICSW * bmx_win32_NONCLIENTMETRICSW_new() {
 NONCLIENTMETRICSW * bmx_win32_NONCLIENTMETRICSW_new() {
-	return (NONCLIENTMETRICSW *)calloc(1, sizeof(NONCLIENTMETRICSW));
+	NONCLIENTMETRICSW * metrics = (NONCLIENTMETRICSW *)calloc(1, sizeof(NONCLIENTMETRICSW));
+	metrics->cbSize = sizeof(NONCLIENTMETRICSW);
+	return metrics;
 }
 }
 
 
 void bmx_win32_NONCLIENTMETRICSW_free(NONCLIENTMETRICSW * metrics) {
 void bmx_win32_NONCLIENTMETRICSW_free(NONCLIENTMETRICSW * metrics) {
@@ -159,6 +162,10 @@ LOGFONTW * bmx_win32_NONCLIENTMETRICSW_lfMessageFont(NONCLIENTMETRICSW * metrics
 	return &metrics->lfMessageFont;
 	return &metrics->lfMessageFont;
 }
 }
 
 
+UINT bmx_win32_NONCLIENTMETRICSW_size() {
+	return sizeof(NONCLIENTMETRICSW);
+}
+
 // ********************************************************
 // ********************************************************
 
 
 int bmx_win32_MOUSEHOOKSTRUCT_x(MOUSEHOOKSTRUCT * hook) {
 int bmx_win32_MOUSEHOOKSTRUCT_x(MOUSEHOOKSTRUCT * hook) {

+ 1 - 1
win32maxguiex.mod/win32maxguiex.bmx

@@ -937,7 +937,7 @@ Type TWindowsFont Extends TGuiFont
 		'Attempts to get hold of the Windows themed font (typically Tahoma on XP, Segeo UI on Vista)
 		'Attempts to get hold of the Windows themed font (typically Tahoma on XP, Segeo UI on Vista)
 		Local tmpNonClientMetrics:NONCLIENTMETRICSW = New NONCLIENTMETRICSW
 		Local tmpNonClientMetrics:NONCLIENTMETRICSW = New NONCLIENTMETRICSW
 		
 		
-		If SystemParametersInfoW( SPI_GETNONCLIENTMETRICS, 0, tmpNonClientMetrics.metricsPtr, 0 ) Then
+		If SystemParametersInfoW( SPI_GETNONCLIENTMETRICS, tmpNonClientMetrics.Size(), tmpNonClientMetrics.metricsPtr, 0 ) Then
 			Return New TWindowsFont.LoadFromLogFont( tmpNonClientMetrics.lfMessageFont(), pFontStyle, pFontSize )
 			Return New TWindowsFont.LoadFromLogFont( tmpNonClientMetrics.lfMessageFont(), pFontStyle, pFontSize )
 		EndIf
 		EndIf