/* typedef struct { DWORD lStructSize; 4 HWND hwndOwner; 4 HDC hDC; 4 LPLOGFONT lpLogFont; 4 INT iPointSize; 4 DWORD Flags; 4 COLORREF rgbColors; 4 LPARAM lCustData; 4 LPCFHOOKPROC lpfnHook; 4 LPCTSTR lpTemplateName; 4 HINSTANCE hInstance; 4 LPTSTR lpszStyle; 4 WORD nFontType; 2 INT nSizeMin; 4 INT nSizeMax; 4 } CHOOSEFONT, *LPCHOOSEFONT; */ //flags var CF_INITTOLOGFONTSTRUCT = 0x40; var CF_SCREENFONTS = 0x1; var CHOOSEFONT = Interop.Allocate(60); CHOOSEFONT.WriteDWORD(0, CHOOSEFONT.Size); //lStructSize CHOOSEFONT.WriteDWORD(4, 0); //hwndOwner CHOOSEFONT.WriteDWORD(8, 0); //hDC /* typedef struct tagLOGFONT { LONG lfHeight; 4 LONG lfWidth; 4 LONG lfEscapement; 4 LONG lfOrientation; 4 LONG lfWeight; 4 BYTE lfItalic; 1 BYTE lfUnderline; 1 BYTE lfStrikeOut; 1 BYTE lfCharSet; 1 BYTE lfOutPrecision; 1 BYTE lfClipPrecision; 1 BYTE lfQuality; 1 BYTE lfPitchAndFamily; 1 TCHAR lfFaceName[LF_FACESIZE]; 64 } LOGFONT, *PLOGFONT; */ var LOGFONT = Interop.Allocate(92); LOGFONT.WriteDWORD(0,0); //lfHeight LOGFONT.WriteDWORD(4,0); //lfWidth LOGFONT.WriteDWORD(8,0); //lfEscapement LOGFONT.WriteDWORD(12,0); //lfOrientation LOGFONT.WriteDWORD(16,0); //lfWeight LOGFONT.SetAt(20,0); //lfItalic LOGFONT.SetAt(21,0); //lfUnderline LOGFONT.SetAt(22,0); //lfCharSet LOGFONT.SetAt(23,0); //lfOutPrecision LOGFONT.SetAt(24,0); //lfClipPrecision LOGFONT.SetAt(25,0); //lfQuality LOGFONT.SetAt(26,0); //lfPitchAndFamily LOGFONT.WriteString(27, ""); // lfFaceName CHOOSEFONT.WriteDWORD(12, LOGFONT.DataPtr); //LPLOGFONT var iPointSize = Interop.Allocate(4); CHOOSEFONT.WriteDWORD(16, iPointSize.DataPtr); //iPointSize CHOOSEFONT.WriteDWORD(20, CF_INITTOLOGFONTSTRUCT | CF_SCREENFONTS ); //Flags CHOOSEFONT.WriteDWORD(24, 0); // rgbColors CHOOSEFONT.WriteDWORD(28, 0); // lCustData CHOOSEFONT.WriteDWORD(32, 0); // lpfnHook CHOOSEFONT.WriteDWORD(36, 0); // lpTemplateName CHOOSEFONT.WriteDWORD(40, 0); // hInstance var lpszStyle = Interop.Allocate(514); CHOOSEFONT.WriteDWORD(44, lpszStyle.DataPtr); // lpszStyle CHOOSEFONT.WriteWORD(48, 0x2000); // nFontType CHOOSEFONT.WriteDWORD(50, 0); // nSizeMin CHOOSEFONT.WriteDWORD(54, 0); // nSizeMax Interop.Call("comdlg32.dll", "ChooseFontW", CHOOSEFONT);