Ich habe versucht ChooseColorW mit ctypes aufzurufen.
Schlussendlich sollte ich dann die Werte abrufen können.
Das Ganze sollte auch funktionieren. Leider öffnet sich aber kein Fenster in dem man die Schrift auswählen könnte.
Da ich mit C nicht sehr vertraut bin, weiss ich nicht mehr weiter. Ich habe es mit Hilfe der Dokumentation versucht in Python zu implementieren.
ChooseFontW callback function
CHOOSEFONTW structure
LOGFONTA structure
Beispiel in C
Code: Alles auswählen
import ctypes
import ctypes.wintypes as wtypes
class LOGFONT(ctypes.Structure):
_fields_ = [
("lfHeight", wtypes.LONG),
("lfWidth", wtypes.LONG),
("lfEscapement", wtypes.LONG),
("lfOrientation", wtypes.LONG),
("lfWeight", wtypes.LONG),
("lfItalic", wtypes.BYTE),
("lfUnderline", wtypes.BYTE),
("lfStrikeOut", wtypes.BYTE),
("lfCharSet", wtypes.BYTE),
("lfOutPrecision", wtypes.BYTE),
("lfClipPrecision", wtypes.BYTE),
("lfQuality", wtypes.BYTE),
("lfPitchAndFamily", wtypes.BYTE),
("lfFaceName", ctypes.c_wchar * 32)
]
class CHOOSEFONT(ctypes.Structure):
_fields_ = [
("lStructSize", wtypes.DWORD),
("hwndOwner", wtypes.HWND),
("hDC", wtypes.DWORD), # ignored
("lpLogFont", LOGFONT),
("iPntSize", wtypes.INT),
("Flags", wtypes.DWORD),
("rgbColors", wtypes.DWORD),
("lCustData", wtypes.LPARAM),
("lpfnHook", wtypes.DWORD), # ignored
("lpTemplateName", wtypes.LPCSTR),
("hInstance", wtypes.HINSTANCE),
("lpszStyle", wtypes.LPSTR),
("nFontType", wtypes.WORD),
("___MISSING_ALIGNMENT__", wtypes.WORD),
("nSizeMin", wtypes.INT),
("nSizeMax", wtypes.INT)
]
class FontChooser():
CF_SCREENFONTS = 0x1
CF_EFFECTS = 0x100
font_chooser = ctypes.windll.Comdlg32.ChooseFontW
def ask_font(self):
struct = CHOOSEFONT()
# ctypes.memset(ctypes.byref(struct), 0, ctypes.sizeof(struct))
struct.lStructSize = ctypes.sizeof(struct)
struct.Flags = wtypes.DWORD(self.CF_SCREENFONTS | self.CF_EFFECTS)
self.font_chooser(ctypes.byref(struct))
print(struct.rgbColors)
r = FontChooser()
r.ask_font()
LG Fire Spike