public static Win16.LOGFONT To16(Win32.LOGFONT lf32) { return(new Win16.LOGFONT() { lfHeight = (short)lf32.lfHeight, lfWidth = (short)lf32.lfHeight, lfEscapement = (short)lf32.lfEscapement, lfOrientation = (short)lf32.lfOrientation, lfWeight = (short)lf32.lfWeight, lfItalic = lf32.lfItalic, lfUnderline = lf32.lfUnderline, lfStrikeOut = lf32.lfStrikeOut, lfCharSet = lf32.lfCharSet, lfOutPrecision = lf32.lfOutPrecision, lfClipPrecision = lf32.lfClipPrecision, lfQuality = lf32.lfQuality, lfPitchAndFamily = lf32.lfPitchAndFamily, lfFaceName = lf32.lfFaceName, }); }
static extern int GetObject(HGDIOBJ hgdiobj, int cbBuffer, out Win32.LOGFONT lpvObject);
public short GetObject(HGDIOBJ hgdiobj, short cbBuffer, uint ptr) { unsafe { var objectType = GetObjectType(hgdiobj); switch (objectType) { case Win32.OBJ_PEN: { if (ptr == 0) { return((short)Marshal.SizeOf <Win16.LOGPEN>()); } // Check if buffer big enough if (cbBuffer < Marshal.SizeOf <Win16.LOGPEN>()) { return(0); } // Get it var lp32 = new Win32.LOGPEN(); var plp32 = &lp32; var size = GetObject(hgdiobj, Marshal.SizeOf <Win32.LOGPEN>(), (IntPtr)plp32); // Convert and write it back _machine.WriteStruct(ptr, Win32.LOGPEN.To16(lp32)); return((short)Marshal.SizeOf <Win16.LOGPEN>()); } case Win32.OBJ_BRUSH: { if (ptr == 0) { return((short)Marshal.SizeOf <Win16.LOGBRUSH>()); } if (cbBuffer < Marshal.SizeOf <Win16.LOGBRUSH>()) { return(0); } var lb32 = new Win32.LOGBRUSH(); var plb32 = &lb32; var size = GetObject(hgdiobj, Marshal.SizeOf <Win32.LOGBRUSH>(), (IntPtr)plb32); _machine.WriteStruct(ptr, Win32.LOGBRUSH.To16(lb32)); return((short)Marshal.SizeOf <Win16.LOGBRUSH>()); } case Win32.OBJ_BITMAP: { // Just asking for size? if (ptr == 0) { return((short)Marshal.SizeOf <Win16.BITMAP>()); } // Check if buffer big enough if (cbBuffer < Marshal.SizeOf <Win16.BITMAP>()) { return(0); } // Get it var bmp32 = new Win32.BITMAP(); var pbmp32 = &bmp32; var size = GetObject(hgdiobj, Marshal.SizeOf <Win32.BITMAP>(), (IntPtr)pbmp32); // Convert and write it back _machine.WriteStruct(ptr, Win32.BITMAP.To16(bmp32)); // Return size return((short)Marshal.SizeOf <Win16.BITMAP>()); } case Win32.OBJ_FONT: { // Just asking for size? if (ptr == 0) { return((short)Marshal.SizeOf <Win16.LOGFONT>()); } // Check if buffer big enough if (cbBuffer < Marshal.SizeOf <Win16.LOGFONT>()) { return(0); } // Get it var lf32 = new Win32.LOGFONT(); var size = GetObject(hgdiobj, Marshal.SizeOf <Win32.LOGFONT>(), out lf32); // Convert and write it back _machine.WriteStruct(ptr, Win32.LOGFONT.To16(lf32)); // Return size return((short)Marshal.SizeOf <Win16.LOGFONT>()); } default: throw new NotImplementedException("Unsupported object type passed to GetObject"); } } }
public static extern HGDIOBJ CreateFontIndirect([In] ref Win32.LOGFONT lf);