private unsafe bool GetCalendarGridInfoText(MCGIP dwPart, int calendarIndex, int row, int column, out string text) { const int nameLength = 128; Span <char> name = stackalloc char[nameLength + 2]; bool result; fixed(char *pName = name) { var gridInfo = new MCGRIDINFO { cbSize = (uint)sizeof(MCGRIDINFO), dwFlags = MCGIF.NAME, dwPart = dwPart, iCalendar = calendarIndex, iCol = column, iRow = row, pszName = pName, cchName = (uint)name.Length - 1 }; result = User32.SendMessageW(_owner, (User32.WM)MCM.GETCALENDARGRIDINFO, IntPtr.Zero, ref gridInfo) != IntPtr.Zero; } text = name.SliceAtFirstNull().ToString(); return(result); }
private bool GetCalendarGridInfo(ref MCGRIDINFO gridInfo) { // Do not use this if gridInfo.dwFlags contains MCGIF_NAME; // use GetCalendarGridInfoText() instead. Debug.Assert( (gridInfo.dwFlags & MCGIF.NAME) == 0, "Param dwFlags contains MCGIF_NAME, use GetCalendarGridInfoText() to retrieve the text of a calendar part."); gridInfo.dwFlags &= ~MCGIF.NAME; return(User32.SendMessageW(_owner, (User32.WM)MCM.GETCALENDARGRIDINFO, IntPtr.Zero, ref gridInfo) != IntPtr.Zero); }
public unsafe void MCGRIDINFO_x32_ensure_layout() { MCGRIDINFO sut = new MCGRIDINFO(); byte * addr = (byte *)&sut; Assert.Equal(0, (byte *)&sut.cbSize - addr); // 4, UINT Assert.Equal(4, (byte *)&sut.dwPart - addr); // 4, DWORD Assert.Equal(8, (byte *)&sut.dwFlags - addr); // 4, DWORD Assert.Equal(12, (byte *)&sut.iCalendar - addr); // 4, int Assert.Equal(16, (byte *)&sut.iRow - addr); // 4, int Assert.Equal(20, (byte *)&sut.iCol - addr); // 4, int Assert.Equal(24, (byte *)&sut.bSelected - addr); // 4, BOOL Assert.Equal(28, (byte *)&sut.stStart - addr); // 16, SYSTEMTIME Assert.Equal(44, (byte *)&sut.stEnd - addr); // 16, SYSTEMTIME Assert.Equal(60, (byte *)&sut.rc - addr); // 16, RECT Assert.Equal(76, (byte *)&sut.pszName - addr); // 4, PWSTR Assert.Equal(80, (byte *)&sut.cchName - addr); // 4, size_t }
private unsafe bool GetCalendarGridInfo( MCGIF dwFlags, MCGIP dwPart, int calendarIndex, int row, int column, out RECT rectangle, out Kernel32.SYSTEMTIME endDate, out Kernel32.SYSTEMTIME startDate) { Debug.Assert( (dwFlags & ~(MCGIF.DATE | MCGIF.RECT)) == 0, "GetCalendarGridInfo() should be used only to obtain Date and Rect," + "dwFlags has flag bits other that MCGIF_DATE and MCGIF_RECT"); var gridInfo = new MCGRIDINFO { cbSize = (uint)sizeof(MCGRIDINFO), dwFlags = dwFlags, dwPart = dwPart, iCalendar = calendarIndex, iCol = column, iRow = row }; try { bool result = GetCalendarGridInfo(ref gridInfo); rectangle = gridInfo.rc; endDate = gridInfo.stEnd; startDate = gridInfo.stStart; return(result); } catch { rectangle = new RECT(); endDate = new Kernel32.SYSTEMTIME(); startDate = new Kernel32.SYSTEMTIME(); return(false); } }
public unsafe void MCGRIDINFO_x64_ensure_layout() { if (!Environment.Is64BitProcess) { return; } MCGRIDINFO sut = new MCGRIDINFO(); byte * addr = (byte *)&sut; Assert.Equal(0, (byte *)&sut.cbSize - addr); // 4, UINT Assert.Equal(4, (byte *)&sut.dwPart - addr); // 4, DWORD Assert.Equal(8, (byte *)&sut.dwFlags - addr); // 4, DWORD Assert.Equal(12, (byte *)&sut.iCalendar - addr); // 4, int Assert.Equal(16, (byte *)&sut.iRow - addr); // 4, int Assert.Equal(20, (byte *)&sut.iCol - addr); // 4, int Assert.Equal(24, (byte *)&sut.bSelected - addr); // 4, BOOL Assert.Equal(28, (byte *)&sut.stStart - addr); // 16, SYSTEMTIME Assert.Equal(44, (byte *)&sut.stEnd - addr); // 16, SYSTEMTIME Assert.Equal(60, (byte *)&sut.rc - addr); // 16, RECT // 4 bytes alignment 76 -> 80 Assert.Equal(80, (byte *)&sut.pszName - addr); // 8, PWSTR Assert.Equal(88, (byte *)&sut.cchName - addr); // 8, size_t }
public extern static IntPtr SendMessage(HandleRef hWnd, int Msg, int wParam, [In, Out] ref MCGRIDINFO gridInfo);